вставка переменной в базу данных с помощью php - PullRequest
0 голосов
/ 29 декабря 2011

Я редактирую часть системы входа пользователя, и я очень запутался в одном вопросе. Я пытаюсь позволить пользователю изменить свое имя пользователя, используя свою электронную почту в качестве ссылки для поиска. По какой-то причине я не могу установить переменную $ email для правильной установки. Когда я меняю переменную $ email на адрес, который, как я знаю, находится в моей базе данных (то есть я удаляю $ email и заменяю его на существующий адрес), имя пользователя корректно меняется. Когда я возвращаю его обратно в $ email, ничего не происходит.

Странная часть: когда я отправляю электронное письмо, отображается правильный адрес электронной почты. Я не могу понять, почему он не позволяет мне сделать это, несмотря на то, что это отражено должным образом Можно ли не быть строкой, несмотря на отображаемый адрес электронной почты?

Я понимаю про инъекции sql. Сейчас я просто стараюсь сделать код как можно более простым, чтобы вначале работала функциональность.

<?
if (isset($_POST['submit'])) {
    $email = $user->get_email($username);
    $newuser = $_POST['newusername'];
    $server = 'localhost';
    $usern = 'root';
    $pass = '';
    $connection = mysql_connect($server, $usern, $pass) or die(mysql_error());
    mysql_select_db(testdb, $connection) or die(mysql_error());
if(isset($username)) {
    mysql_query("UPDATE users SET username='$newuser' WHERE email = '$email'") or    die(mysql_error());
}
}
?>

Кроме того, когда я изменяю оператор запроса так, чтобы ссылочное значение было идентификатором пользователя, имя пользователя было вставлено правильно. Из этого я знаю, что $ email не устанавливается должным образом.

mysql_query("UPDATE users SET username='$newuser' WHERE userid = '$userid'") or    die(mysql_error());

Ответы [ 4 ]

0 голосов
/ 30 декабря 2011

Я должен использовать следующее:

<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $email = $user->get_email($username); // where does $username come from anyway? and where are you initiating the $user object?
    $newuser = $_POST['newusername'];
    $server = 'localhost';
    $usern = 'root';
    $pass = '';
    $connection = mysql_connect($server, $usern, $pass) or die(mysql_error());
    mysql_select_db(testdb, $connection) or die(mysql_error());
    if(isset($newuser)) {
        $newuser = mysql_real_escape_string($newuser);
        $email = mysql_real_escape_string($email);
        mysql_query("UPDATE users SET username='" . $newuser . "' WHERE email = '". $email ."'") or    die(mysql_error());
    }
}
?>

mysql_real_escape_string () создает новую строку. Он будет экранировать символы, которые, вероятно, могут повредить вашу базу данных при их вводе. (Вызывается: SQL-инъекция)

Примеры SQL-инъекций, чтобы дать вам представление о том, что это такое, и как его можно использовать и защищать: http://www.unixwiz.net/techtips/sql-injection.html

0 голосов
/ 29 декабря 2011

Похоже, ваша функция get_email () возвращает неверный адрес.Вы уверены, что ваша система аутентификации работает нормально во всех других отношениях?

Что происходит, когда вы делаете это:

echo "UPDATE users SET username='$newuser' WHERE email = '$email'";

Кроме того, вы захотите очистить ваш ввод для $ newuser, чтобы избежать внедрения SQL.Как сказано в одном из комментариев, вы должны использовать идентификатор пользователя вместо электронной почты.Я не уверен, какой класс аутентификации вы используете, но вы должны быть в состоянии найти что-то вроде $ user-> returnID () и обновить его с помощью этого.

0 голосов
/ 30 декабря 2011

В любом случае рекомендуется добавить

$email = mysql_real_escape_string($email);

Может быть, в этом проблема

0 голосов
/ 29 декабря 2011
if(isset($username)) {
    mysql_query("UPDATE users SET username='$newuser' WHERE email = '$email'") or die(mysql_error());
}

Где в вашем коде вы устанавливаете переменную $username?Если он не установлен, ваше обновление не будет запущено.Возможно, вам следует вернуться и просмотреть имена переменных и убедиться, что они согласованы (и установлены) на остальной части страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...