У меня проблема с переменными в операторе 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
, они отображаются так, что они не пусты. Но этот запрос обновляет мою таблицу, но без данных, так что после этого все пусто.
Я думаю, что проблема заключается в переменной области.
Переменные, определенные вне функции, не могут использоваться в функции, кроме глобальной переменной или чего-то еще.
У вас есть два метода.
Первый. Если функция 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;
}
}
Или второй. Передайте адрес электронной почты, статус, пароль для работы. Тогда вы можете использовать это.
Пожалуйста, проверьте это руководство:
Вы можете попробовать это:
$results = $db->query("UPDATE trainer SET email='".$email."', status='".$status."', password='".$password."' WHERE name='".$trainer."'");
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;
}
}
После того, как вы получите сообщение о переменных, проверьте эти переменные
пустые они или нет
если не пусто или NULL, то обновите базу данных с помощью запроса на обновление с непустыми переменными
Может быть
Если те не работают
Попробуйте сделать синтаксическую ошибку mysql и проверьте значения этих переменных, тогда вы можете определить ошибку.
Извините за мой плохой английский
У вас есть несколько проблем с этой функцией:
функция:
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';
}