[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка обновления таблицы в БД
alex107
<?
include('bd.inc');
$id = $_SESSION['id'];
$name = $_POST['name'];
$email = $_POST['email'];
$pass = $_POST['pass'];
$rpass = $_POST['rpass'];
if (($pass)==($rpass)){
mysql_connect($host,$user,$pass_bd);
mysql_db_query("test");
UPDATE users;
SET name = $name;
SET email = $email;
SET pass = $pass;
WHERE id = $id;
} else {
$result = "Ошибка! Указанные пароли не совпадают!";
}
?>
и не работает! пишет: Parse error: syntax error, unexpected T_STRING in Z:\home\test.ru\www\save_changes.php on line 11 ((



Спустя 5 минут, 25 секунд (13.11.2010 - 13:49) UnWind написал(а):
Все правильно он тебе пишет.
SQL запросы делаются внутри mysql_query();
Т.е.
mysql_query("UPDATE users;
SET name =
$name;
SET email =
$email;
SET pass =
$pass;
WHERE id =
$id;
"
);

К тому же, зачем несколько раз делать SET ?
Делается это по другому, а именно:

UPDATE users SET name=$name, email=$email, pass=$pass; commit;

id в этом случае присваевается автоматически.
Так же можно опять же не описывать каждый столбец со значением, а сделать так:

UPDATE users SET VALUES(NULL, $name, $email, $pass); commit;


И так же что бы выбрать базу данных, нужно указывать не mysql_query_db();, а mysql_select_db();

И в результате получиться вот так:

<?
include('bd.inc');
$id = $_SESSION['id'];
$name = $_POST['name'];
$email = $_POST['email'];
$pass = $_POST['pass'];
$rpass = $_POST['rpass'];
if (($pass)==($rpass)){
mysql_connect($host,$user,$pass_bd);
mysql_select_db("test");
mysql_query("UPDATE users SET VALUES(NULL, $name, $email, $pass); COMMIT;");
} else {
$result = "Ошибка! Указанные пароли не совпадают!";
}
?>

В зависимости конечно от структуры таблицы, нужно расставить правильно значения, или воспользоватсья вторым вариантом запроса.

Хотя и делать постоянно подключение к БД там, где нужно выполнить запрос не стоит, а лучше сделать вот так:

Листинг файла mysql_connect.php

define(HOST_NAME, 'localhost');
define(USER_NAME, 'Имя пользователя');
define(USER_PASSWORD, 'Пароль пользователя');
define(DB_NAME, 'Имя базы данных');

$connect = mysql_connect(HOST_NAME, USER_NAME, USER_PASSWORD);
mysql_select_db(DB_NAME);
?>


Листинг файла index.php

<?
include('mysql_connect.php');

$info_user = array(
'name' => $_POST['name'],
'email' => $_POST['email'],
'pass' => $_POST['pass'],
'rpass' => $_POST['rpass']
);


if ($info_user['pass'] == $info_user['rpass']){
mysql_query("UPDATE users SET VALUES(NULL, $info_user['name'], $info_user['email'], $info_user['pass']); COMMIT;", $connect);
} else {
$result = "Ошибка! Указанные пароли не совпадают!";
}
?>


К тому же зачем индексировать пользователей по идентификатору их ссесий ?
Ведь можно создать столбец id с присваеваемым автоматически уникальным идентификатором id.

Т.е. вот таблица:

CREATE TABLE users (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
pass VARCHAR(255) NOT NULL,
PRIMARY_KEY(id)
);


Сей код, гораздо удобен, читабелен, гибок и практичен)

Спустя 2 часа, 46 минут, 30 секунд (13.11.2010 - 16:35) alex107 написал(а):
и все равно у меня ничего не работает!! (((( описываю суть
пользователь заходит на сайт > авторизуется > заходит в раздел с изменением настроек профиля > изменяет > нажимает сохранить. переходит на страницу где скрипт должен обновить настройки профиля в бд.
база выглядит так:
id name email pass
информацию нужно обновить в том ID который принадлежит авторизованному пользователю.
т.е. я зашел авторизовался мой ID 1 > я изменил имя в настройках > скрипт должен обновить поле name в id 1
надеюсь понятно объяснил ))))
ну так вот сам написал скрипт, он не работает, скрипт предложенный выше тоже не работает... ((((
<?
session_start();
include('bd.inc');

$id = $_SESSION['id'];
$name = $_POST['name'];
$email = $_POST['email'];
$pass = $_POST['pass'];
$rpass = $_POST['rpass'];

if (($pass)==($rpass))
{ @mysql_connect($host, $user, $pass_bd)or die("Could not connect to MySQL server!");
@mysql_select_db("ukads") or die("Could not select company database!");
mysql_query("UPDATE users SET name=$name, email=$email, pass=$pass; commit");
mysql_close( );
$result = "хм, странно!";
} else {
$result = "Ошибка! Указанные пароли не совпадают!";
}
?>
при выше указанном скрипте ошибок нет, но и в БД ничего не меняется... (((

Спустя 28 минут, 58 секунд (13.11.2010 - 17:04) DmitryOpalev написал(а):
echo mysql_error();

Должна появится ошибка :)

Спустя 1 минута, 1 секунда (13.11.2010 - 17:05) Basili4 написал(а):
вот
mysql_query("UPDATE users SET name='$name', email='$email', pass='$pass'");

и кто такой commit почему не знаю ??? ненужен он.

Спустя 52 секунды (13.11.2010 - 17:06) DmitryOpalev написал(а):
Цитата
mysql_query("UPDATE users SET name='$name', email='$email', pass='$pass'");

Где тут commit?...

Спустя 44 секунды (13.11.2010 - 17:07) Nikitian написал(а):

mysql_query("
UPDATE users
SET
name='"
.mysql_escape_string($name)."',
email='"
.mysql_escape_string($email)."',
pass='"
.mysql_escape_string($pass)."'
where
id='"
.mysql_escape_string($id)."'
limit 1"
);

Спустя 18 секунд (13.11.2010 - 17:07) Basili4 написал(а):
DmitryOpalev
вот
Цитата (alex107 @ 13.11.2010 - 17:35)
e=$name, email=$email, pass=$pass; commit");



Спустя 1 минута, 1 секунда (13.11.2010 - 17:08) alex107 написал(а):
Basili4 ты просто мастер !!!! thx!! )))) оказывается надо было про ' нахерачить ))) держи + в карму! ))
а commit я совсем убрал ))

Спустя 9 часов, 15 минут, 26 секунд (14.11.2010 - 02:24) UnWind написал(а):
Простите за COMMIT - у нас просто автоматический на Oracle не стоит, по привычке добавил)

Цитата
и кто такой commit почему не знаю ??? ненужен он.

COMMIT:
  • сделать «постоянными» все изменения, сделанные в текущей транзакции (реально данные могут быть изменены несколько позже)
  • очистить все точки сохранения данной транзакции
  • завершить транзакцию
  • освободить все блокировки данной транзакции
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.