Как вставить в определенную строку в базе данных?

Итак, моя база данных выглядит следующим образом:

id (первичный - auto_increment), имя пользователя (уникальное), пароль, fname, почта

У меня он для того, чтобы пользователи прописывали логин и пароль и он добавлял его в базу, в первую очередь. Ни одно имя пользователя не может быть одинаковым, и когда он добавляет данные в базу данных, он автоматически увеличивает идентификатор. Все это работает, но теперь я сделал страницу настроек учетной записи, на которой пользователь может изменить свой адрес электронной почты и имя, но это не работает. У меня есть пользователь, вводящий переменные в форму на одной странице, и он публикует свое имя как ufname (для обновления имени) и umail (для обновления почты). Затем на следующей странице, которая обновляет базу данных, у меня есть этот код:

session_start();
if(!isset($_SESSION['userId'])) {
die("&nbsp;You are not signed in. Please <a href='login.php'>click here</a> to sign in.");
} else {
$changeTXT = $_SESSION['username'];
$changeTXT = strtolower($changeTXT);
$changeTXT = ucfirst($changeTXT);
echo "Account Settings: <font color='red'>" . $changeTXT . "</font><br /><br />";

$ufname = $_POST['ufname'];
$umail = $_POST['umail'];

mysql_connect("localhost", "root", "sp1151") or die(mysql_error());


mysql_select_db("usersys") or die(mysql_error());

mysql_query("INSERT INTO userdb (id, username, password, fname, mail) VALUES('','','','$ufname', '$umail') ");


echo $umail . "<br /><br />";
echo $ufname;

}

О, у меня также есть пользователи, которые вошли в сеансы.

Но как мне вставить имя и адрес электронной почты, которые пользователь вводит в свою конкретную строку в базе данных? Имя моей базы данных userdb.


person Community    schedule 27.03.2009    source источник
comment
скажите мне, что вы не просто раскрыли свое имя пользователя и пароль mysql в этом посте   -  person Fire Crow    schedule 27.03.2009
comment
Лол, это просто тест на локальном ПК xD. Иначе у меня бы не было.   -  person    schedule 31.03.2009


Ответы (5)


Вам нужно запустить запрос UPDATE, чтобы изменить существующую строку, а не INSERT.

$sql = "UPDATE userdb SET fname = '$ufname', mail = '$umail' WHERE id = $id";
mysql_query($sql);
person David Snabel-Caunt    schedule 27.03.2009
comment
Параметризируйте это для защиты от SQL-инъекций. - person tvanfosson; 27.03.2009
comment
Верно; используйте mysql_real_escape_string или подготовленный оператор для защиты от SQL-инъекций! - person David Snabel-Caunt; 27.03.2009

Вам нужно использовать оператор и UPDATE вместо INSERT:

UPDATE userdb SET fname = ?, mail = ? WHERE username = ?;

Кроме того, вам следует серьезно подумать об использовании подготовленных операторов с параметрами запроса, чтобы предотвратить атаки SQL-инъекций.

person Simon Lehmann    schedule 27.03.2009

Попробуйте этот UPDATE запрос:

Update 'tableName' set 'columnName' = 'newEntry' where 'rowID' = 'value'.
person Community    schedule 27.03.2009

Попробуй это:

mysql_query("UPDATE userdb SET fname = '$ufname', umail = '$umail' WHERE id = '$_SESSION['userId']' ");
person Maximiliano Guzman    schedule 27.03.2009
comment
почему голосование против? другие ответы используют $id, что не является правильным var, так как у него есть идентификатор, хранящийся в $_SESSION['userId']. - person Maximiliano Guzman; 27.03.2009

Рассматривали ли вы возможность использования запроса SQL UPDATE?

person chosta    schedule 27.03.2009
comment
Нет, я новичок во всем этом. Я действительно пытаюсь изучить это как можно лучше. :) Как мне это сделать? - person ; 27.03.2009