mysql — обновление данных БД из переменных PHP

У меня проблема с переменными в операторе SQL. У меня есть форма, где пользователь может обновить свой профиль. Форма перенаправляет на action.php?action=settings

Когда я пытаюсь без $ переменных, нет проблем! Но дело в том, что у меня много таких запросов, но не для обновления.

function change_user_data($trainer) {
require("database.php");

try {
$results = $db->query("UPDATE trainer SET email='$email', status='$status', password='$password' WHERE name='$trainer'");
} catch (Exception $e) {
echo "Data could not be changed!";
exit;
}
}

а это мой action.php

if ($action == "settings")  {
$email = $_POST['email'];
$status = $_POST['status'];
$password = $_POST['password'];

change_user_data($trainer);
}

Когда я echo те $variables, они отображаются так, что они не пусты. Но этот запрос обновляет мою таблицу, но без данных, так что после этого все пусто.

0

Решение

Я думаю, что проблема заключается в переменной области.

Переменные, определенные вне функции, не могут использоваться в функции, кроме глобальной переменной или чего-то еще.

У вас есть два метода.

Первый. Если функция change_user_data находится в файле action.php, добавьте «global $ email, $ status, $ password» следующим образом:

function change_user_data($trainer) {

global $email, $status, $password;

require("database.php");

try {
$results = $db->query("UPDATE trainer SET email='$email', status='$status', password='$password' WHERE name='$trainer'");
} catch (Exception $e) {
echo "Data could not be changed!";
exit;
}
}

Или второй. Передайте адрес электронной почты, статус, пароль для работы. Тогда вы можете использовать это.

Пожалуйста, проверьте это руководство:

http://php.net/manual/en/language.variables.scope.php

0

Другие решения

Вы можете попробовать это:

$results = $db->query("UPDATE trainer SET email='".$email."', status='".$status."', password='".$password."' WHERE name='".$trainer."'");
0

change_user_data($trainer, $email, $password, $status);

function change_user_data($trainer, $email, $password, $status) {
require("database.php");

try {
$results = $db->query("UPDATE trainer SET email='$email', status='$status', password='$password' WHERE name='$trainer'");
} catch (Exception $e) {
echo "Data could not be changed!";
exit;
}
}
0

После того, как вы получите сообщение о переменных, проверьте эти переменные
пустые они или нет
если не пусто или NULL, то обновите базу данных с помощью запроса на обновление с непустыми переменными

0

Может быть

  • Неверный тип данных ваших столбцов. Внимательно проверьте структуру вашего стола. Пример: если вы указали в столбце адрес электронной почты как int, вы не сможете вставить или обновить значение строки в виде текста или буквы
  • Неверные переменные внутри одинарной кавычки. Попробуйте объединить переменную и строку запроса для лучшей практики

Если те не работают

Попробуйте сделать синтаксическую ошибку mysql и проверьте значения этих переменных, тогда вы можете определить ошибку.

Извините за мой плохой английский

0

У вас есть несколько проблем с этой функцией:

  • Проблема определения объема, вы не прошли все значения
  • Вы уязвимы для инъекций SQL
  • Вы не проверяете, обновлена ​​ли запись

функция:

function change_user_data($db, $params) {
try {
$sql = "UPDATE trainer SET email= ?, status=?, password=? WHERE name=?";
$stmt = $db->prepare($sql);
$stmt->execute($params);
$success = ($stmt->rowCount() > 0) ? true : false;
} catch (Exception $e) {
echo "Data could not be changed!";
$success = false;
}
return $success;
}

использование

require("database.php");

$params = array($trainer, $email, $password, $status);
$user_data_updated = change_user_data($db, $params);

if($user_data_updated){
echo 'user data updated';
}else{
echo 'user data did not update';
}
0
По вопросам рекламы [email protected]