#php #mysql
#php #mysql
Вопрос:
Почему переменная СЕАНСА не добавляется в базу данных? Я получаю только свое значение оценки, но не имя пользователя. Примечание: переменная сеанса определяется следующим образом:
$_SESSION['username'] = $_POST[username];
Это та часть, с которой у меня возникли проблемы:
session_start();
$user = $_SESSION['username'];
$con = mysql_connect("something.hosting.com","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("quiz", $con);
$sql="
INSERT INTO members (
Name, Score
) VALUES (
'$user', '$max_value'
)
";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
- Да, я начал сеанс.
- Когда я пытаюсь повторить переменную на второй странице, она выводится правильно.
- Пробовал ли mysql escape
Комментарии:
1. Вы начали сеанс с
session_start()
, прежде чем назначить$_SESSION
переменную?2. Если вы повторяете SQL, а затем пытаетесь выполнить его вручную, вы получаете какие-либо ошибки?
3. Не забудьте экранировать входные переменные, чтобы предотвратить SQL-инъекции.
$user = mysql_real_escape_string($_SESSION['username']);
4. Это зависит от того, что выводится
$_SESSION['username']
. Хотя комментарий @CheeseSucker действительно очень корректен, OP предполагает, что вставлено одно значение, предполагающее, что запрос не завершается ошибкой. ОП, каков тип данных столбцаName
? Я подозреваю, что это что-то несовместимое с содержимым$_SESSION['username']
5. 1) Да, я начал сеанс. 2) Когда я пытаюсь повторить переменную на второй странице, она выводится правильно. 3) Пробовал ли mysql escape
Ответ №1:
Я полагаю, что вы неправильно устанавливаете $_SESSION[‘username’] . Вы не указали кавычки при получении значения $ _POST.
$_SESSION['username'] = $_POST[username];
должно быть
$_SESSION['username'] = $_POST['username'];
Комментарии:
1. Не будет ли PHP интерпретировать это
username
как строковый литерал в этом контексте? codepad.org/DZvjCUtX (Не говорю, что это хорошая идея, но она должна сработать … верно?)2. Когда я изменил его, он выдал мне эту ошибку: сервер столкнулся с неожиданным условием, которое не позволило ему выполнить запрос. В скрипте произошла ошибка или он не выдал никаких выходных данных. Если произошла ошибка, вы должны увидеть ее в журнале ошибок.
3. Я никогда не видел, чтобы это делалось раньше. Я не знаю ни одной функции, в которой он интерпретировал бы имя пользователя как строку. Хотя спасибо за ссылку. Я думаю, это работает, хотя, вероятно, это то, что я бы не рекомендовал использовать.
4. @Kibbee Неопределенная константа интерпретируется как строка. Странно, но это правда. CodePad .