Почему он не добавляется в мою базу данных?

#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);
  
  1. Да, я начал сеанс.
  2. Когда я пытаюсь повторить переменную на второй странице, она выводится правильно.
  3. Пробовал ли 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 .