Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не обновляются данные в базе
 
 автор: franko   (01.02.2011 в 12:33)   письмо автору
 
 

<?php 

include 'bd.php';

if  (isset(
$_POST['id']))          {$id $_POST['id'];}

if (isset(
$_POST['login']) && ! empty($_POST['login'])) $login $_POST['login']; 
if (isset(
$_POST['password']) && ! empty($_POST['password'])) $password $_POST['password'];
if (isset(
$_POST['b_day']) && ! empty($_POST['b_day'])) $b_day $_POST['b_day'];
if (isset(
$_POST['b_month']) && ! empty($_POST['b_month'])) $b_month $_POST['b_month'];

if (isset(
$_POST['b_year']) && ! empty($_POST['b_year'])) $b_year $_POST['b_year'];
if (isset(
$_POST['gender']) && ! empty($_POST['gender'])) $gender $_POST['gender'];
if (isset(
$_POST['height']) && ! empty($_POST['height'])) $height $_POST['height'];
if (isset(
$_POST['family']) && ! empty($_POST['family'])) $family $_POST['family'];

if (isset(
$_POST['children']) && ! empty($_POST['children'])) $children $_POST['children'];
if (isset(
$_POST['education']) && ! empty($_POST['education'])) $education $_POST['education'];
if (isset(
$_POST['country']) && ! empty($_POST['country'])) $country $_POST['country'];
if (isset(
$_POST['city_ru']) && ! empty($_POST['city_ru'])) $city_ru $_POST['city_ru'];

if (isset(
$_POST['city_en']) && ! empty($_POST['city_en'])) $city_en $_POST['city_en'];
if (isset(
$_POST['confession']) && ! empty($_POST['confession'])) $confession $_POST['confession'];
if (isset(
$_POST['church']) && ! empty($_POST['church'])) $church $_POST['church'];
if (isset(
$_POST['about_ru']) && ! empty($_POST['about_ru'])) $about_ru $_POST['about_ru'];
if (isset(
$_POST['about_en']) && ! empty($_POST['about_en'])) $about_en $_POST['about_en'];
?>

<?php 
if (isset($login$password$b_day$b_month$b_year
$gender$height$family$children$education$country
$city_ru$city_en$confession$church$about_ru
$about_en))
{
/*Здесь мы пишем, что можно заносить информацию в базу*/
$result mysql_query ("UPDATE users SET login='$login', 
password='
$password', b_day='$b_day', b_month='$b_month', 
b_year='
$b_year', gender='$gender', height='$height', 
family='
$family', children='$children', 
education='
$education', country='$country', 
city_ru='
$city_ru', city_en='$city_en', 
confession='
$confession', church='$church', 
about_ru='
$about_ru', about_en='$about_en' WHERE id='$id'");
if (
$result == 'true') {echo "<p>Ваши данные обновлены!</p>";}
else {echo 
"<p>Ваши данные не обновлены!</p>";}
}          
else 
{
echo 
"<p>Вы ввели не всю информацию, поэтому информация не может быть добавлена</p>";
}
?>


По завершению - выходит надпись"Ваши данные обновлены!", но тем не менее в базе сохраняются прежние данные.
В чем может быть дело?

  Ответить  
 
 автор: Yuriev   (01.02.2011 в 13:06)   письмо автору
 
   для: franko   (01.02.2011 в 12:33)
 

Для начала.
> if ($result == 'true') {echo "<p>Ваши данные обновлены!</p>";}
Тут сравнение со строкой 'true', а надо бы сравнивать с истиной true,

  Ответить  
 
 автор: cheops   (01.02.2011 в 13:52)   письмо автору
 
   для: franko   (01.02.2011 в 12:33)
 

Проверьте количество реально обновившихся строк в базе данных при помощи функции mysql_affected_rows(). Их 1 или 0?

  Ответить  
 
 автор: franko   (01.02.2011 в 15:33)   письмо автору
 
   для: cheops   (01.02.2011 в 13:52)
 

<?php 
include 'bd.php';// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 

if  (isset($_POST['id']))          {$id $_POST['id'];}
if (isset(
$_POST['login']) && ! empty($_POST['login'])) $login $_POST['login']; 
if (isset(
$_POST['password']) && ! empty($_POST['password'])) $password $_POST['password'];
if (isset(
$_POST['b_day']) && ! empty($_POST['b_day'])) $b_day $_POST['b_day'];
if (isset(
$_POST['b_month']) && ! empty($_POST['b_month'])) $b_month $_POST['b_month'];
if (isset(
$_POST['b_year']) && ! empty($_POST['b_year'])) $b_year $_POST['b_year'];
if (isset(
$_POST['gender']) && ! empty($_POST['gender'])) $gender $_POST['gender'];
if (isset(
$_POST['height']) && ! empty($_POST['height'])) $height $_POST['height'];
if (isset(
$_POST['family']) && ! empty($_POST['family'])) $family $_POST['family'];
if (isset(
$_POST['children']) && ! empty($_POST['children'])) $children $_POST['children'];
if (isset(
$_POST['education']) && ! empty($_POST['education'])) $education $_POST['education'];
if (isset(
$_POST['country']) && ! empty($_POST['country'])) $country $_POST['country'];
if (isset(
$_POST['city_ru']) && ! empty($_POST['city_ru'])) $city_ru $_POST['city_ru'];
if (isset(
$_POST['city_en']) && ! empty($_POST['city_en'])) $city_en $_POST['city_en'];
if (isset(
$_POST['confession']) && ! empty($_POST['confession'])) $confession $_POST['confession'];
if (isset(
$_POST['church']) && ! empty($_POST['church'])) $church $_POST['church'];
if (isset(
$_POST['about_ru']) && ! empty($_POST['about_ru'])) $about_ru $_POST['about_ru'];
if (isset(
$_POST['about_en']) && ! empty($_POST['about_en'])) $about_en $_POST['about_en'];

if (isset(
$login$password$b_day$b_month$b_year
$gender$height$family$children$education$country,
 
$city_ru$city_en$confession$church$about_ru
$about_en))
{
/*Здесь мы пишем, что можно заносить информацию в базу*/
$result mysql_query ("UPDATE users SET login='$login', 
password='
$password', b_day='$b_day', b_month='$b_month', 
b_year='
$b_year', gender='$gender', height='$height', 
family='
$family', children='$children', 
education='
$education', country='$country', 
city_ru='
$city_ru', city_en='$city_en', 
confession='
$confession', church='$church', 
about_ru='
$about_ru', about_en='$about_en' WHERE id='$id'");
printf ("UPDATE: %d\n"mysql_affected_rows());
if (
$result == 'true') {echo "<p>Ваши данные обновлены!</p>";}
else {echo 
"<p>Ваши данные не обновлены!</p>";}
}          
else 
{
echo 
"<p>Вы ввели не всю информацию, поэтому информация не может быть добавлена</p>";
}
?>


UPDATE: 0
Ваши данные обновлены!

  Ответить  
 
 автор: cheops   (01.02.2011 в 15:47)   письмо автору
 
   для: franko   (01.02.2011 в 15:33)
 

Запрос выполняется, но подходящих строк для обновления нет. Проверьте значение id в WHERE-запроса (выведите весь SQL-запрос при помощи echo) - есть ли в базе данных запись с таким значением (возможно это значение равно 0 или имеет какое-то другое недействительное значение).

  Ответить  
 
 автор: franko   (01.02.2011 в 17:44)   письмо автору
 
   для: cheops   (01.02.2011 в 15:47)
 

<?php
session_start
();
include 
'bd.php';
// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 

if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login $_SESSION['login'];
$password $_SESSION['password'];
$result2 mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db); 
$myrow2 mysql_fetch_array($result2); 
if (empty(
$myrow2['id']))
   {
   
//Если не действительны, то закрываем доступ
    
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }

$old_login $_SESSION['login']; //Старый логин нам пригодиться
$id $_SESSION['id'];//идентификатор пользователя тоже нужен

////////////////////////
////////ИЗМЕНЕНИЕ ЛОГИНА
////////////////////////

if (isset($_POST['login']))//Если существует логин
      
{
$login $_POST['login'];
$login stripslashes($login);
 
$login htmlspecialchars($login);
 
$login trim($login);//удаляем все лишнее
if ($login == '') { exit("Вы не ввели логин");} //Если логин пустой, то останавливаем сценарий

if (strlen($login) < or strlen($login) > 15) {//проверяем дину
exit ("Логин должен состоять не менее чем из 3 символов и 
не более чем из 15."
);
 
//останавливаем выполнение сценариев
}

// проверка на существование пользователя с таким же логином
$result mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow mysql_fetch_array($result);
if (!empty(
$myrow['id'])) {
exit (
"Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); 
//останавливаем выполнение сценариев
}

$result4 mysql_query("UPDATE users SET login='$login' WHERE login='$old_login'",$db);//обновляем в базе логин пользователя
if ($result4=='TRUE') {
//если выполнено верно, то обновляем все сообщения, которые отправлены ему
mysql_query("UPDATE messages SET author='$login' WHERE author='$old_login'",$db);
$_SESSION['login'] = $login;
//Обновляем логин в сессии
if (isset($_COOKIE['login'])) {
setcookie("login"$logintime()+9999999);
//Обновляем логин в куках
}

echo 
"<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'>
</head>
<body>Ваш логин изменен! Вы будете перемещены через 5 сек.
 Если не хотите ждать, то <a href='page.php?id="
.
$_SESSION['id']."'>нажмите сюда.</a></body></html>";}
//отправляем пользователя назад

      


////////////////////////
////////ИЗМЕНЕНИЕ ПАРОЛЯ
////////////////////////

else if (isset($_POST['password']))
//Если существует пароль
      
{
$password $_POST['password'];
$password stripslashes($password);$password htmlspecialchars($password);$password trim($password);
//удаляем все лишнее
if ($password == '') { exit("Вы не ввели пароль");} 
//если пароль не введен, то выдаем ошибку

if (strlen($password) < or strlen($password) > 15) {
//проверка на количество символов
exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); 
//останавливаем выполнение сценариев
}

$password md5($password);//шифруем пароль
$password strrev($password);
// для надежности добавим реверс
$password $password."b3p6f";
//можно добавить несколько своих символов по вкусу,
// например, вписав "b3p6f". Если этот пароль будут 
//взламывать методом подбора у себя на сервере этой же 
//md5,то явно ничего хорошего не выйдет. Но советую ставить 
//другие символы, можно в начале строки или в середине.
//При этом необходимо увеличить длину поля password в базе. 
//Зашифрованный пароль может получится гораздо большего 
//размера.


$result4 mysql_query("UPDATE users SET password='$password' WHERE login='$old_login'",$db);//обновляем пароль
if ($result4=='TRUE') {//если верно, то обновляем его в сессии
$_SESSION['password'] = $password;

if (isset(
$_COOKIE['password'])) {
setcookie("password",$_POST['password'], time()+9999999);//Обновляем пароль в куках, если они есть
}

echo 
"<html><head><meta http-equiv='Refresh' content='5; 
URL=page.php?id="
.$_SESSION['id']."'></head><body>Ваш 
пароль изменен! Вы будете перемещены через 5 сек. Если не 
хотите ждать, то <a href='page.php?id="
.$_SESSION['id'].
"'>нажмите сюда.</a></body></html>";}
//отправляем обратно на его страницу

      

?>

<?php 
if (isset($_POST['b_day']) && ! empty($_POST['b_day'])) $b_day $_POST['b_day'];
if (isset(
$_POST['b_month']) && ! empty($_POST['b_month'])) $b_month $_POST['b_month'];
if (isset(
$_POST['b_year']) && ! empty($_POST['b_year'])) $b_year $_POST['b_year'];
if (isset(
$_POST['gender']) && ! empty($_POST['gender'])) $gender $_POST['gender'];
if (isset(
$_POST['height']) && ! empty($_POST['height'])) $height $_POST['height'];
if (isset(
$_POST['family']) && ! empty($_POST['family'])) $family $_POST['family'];
if (isset(
$_POST['children']) && ! empty($_POST['children'])) $children $_POST['children'];
if (isset(
$_POST['education']) && ! empty($_POST['education'])) $education $_POST['education'];
if (isset(
$_POST['country']) && ! empty($_POST['country'])) $country $_POST['country'];
if (isset(
$_POST['city_ru']) && ! empty($_POST['city_ru'])) $city_ru $_POST['city_ru'];
if (isset(
$_POST['city_en']) && ! empty($_POST['city_en'])) $city_en $_POST['city_en'];
if (isset(
$_POST['confession']) && ! empty($_POST['confession'])) $confession $_POST['confession'];
if (isset(
$_POST['church']) && ! empty($_POST['church'])) $church $_POST['church'];
if (isset(
$_POST['about_ru']) && ! empty($_POST['about_ru'])) $about_ru $_POST['about_ru'];
if (isset(
$_POST['about_en']) && ! empty($_POST['about_en'])) $about_en $_POST['about_en'];

if (isset(
$b_day$b_month$b_year$gender$height
$family$children$education$country$city_ru
$city_en$confession$church$about_ru$about_en))
{
/*Здесь мы пишем, что можно заносить информацию в базу*/
$result mysql_query ("UPDATE users SET b_day='$b_day', 
b_month='
$b_month', b_year='$b_year', gender='$gender', 
height='
$height', family='$family', children='$children', 
education='
$education', country='$country', 
city_ru='
$city_ru', city_en='$city_en', 
confession='
$confession', church='$church', 
about_ru='
$about_ru', about_en='$about_en
WHERE WHERE login='
$login'");
printf ("UPDATE: %d\n"mysql_affected_rows());
if (
$result == 'true') {echo "<p>Ваши данные обновлены!</p>";}
else {echo 
"<p>Ваши данные не обновлены!</p>";}
}          
else 
{
echo 
"<p>Вы ввели не всю информацию, поэтому информация не может быть добавлена</p>";
}
?>


просьба покритиковать

  Ответить  
 
 автор: cheops   (01.02.2011 в 17:54)   письмо автору
 
   для: franko   (01.02.2011 в 17:44)
 

В UPDATE-запросе идет два раза WHERE WHERE

PS Лучше такие объемные листинги прикреплять к сообщению в виде файла.

  Ответить  
 
 автор: franko   (01.02.2011 в 18:19)   письмо автору
3.2 Кб
 
   для: cheops   (01.02.2011 в 17:54)
 

делаю
if (isset($_POST['b_day']) && ! empty($_POST['b_day'])) $b_day = $_POST['b_day'];
if (isset($_POST['b_month']) && ! empty($_POST['b_month'])) $b_month = $_POST['b_month'];
if (isset($_POST['b_year']) && ! empty($_POST['b_year'])) $b_year = $_POST['b_year'];


if (isset($b_day, $b_month, $b_year, $gender, 
$height, $family, $children, $education, $country, 
$city_ru, $city_en, $confession, $church, $about_ru, 
$about_en))


$result = mysql_query ("UPDATE users SET 
b_day='$b_day', b_month='$b_month', b_year='$b_year', 
gender='$gender', height='$height', family='$family', 
children='$children', education='$education', 
country='$country', city_ru='$city_ru', city_en='$city_en', 
confession='$confession', church='$church', 
about_ru='$about_ru', about_en='$about_en' 
WHERE login='$login'");


все обновляется. кроме b_day и b_year. в Базе запись ноль.
Вывожу:
Это b_day - \\\'31\\\'
Это b_month - 12
Это b_year - \\\'1999\\\'

у всех тип varchar.

поменял тип на int
Но все равно
Это b_day - \\\'31\\\'
Это b_month - 12
Это b_year - \\\'1999\\\'

Где ошибка?

  Ответить  
 
 автор: franko   (02.02.2011 в 13:32)   письмо автору
 
   для: franko   (01.02.2011 в 18:19)
 

кто-нибудь знает?

  Ответить  
 
 автор: sim5   (01.02.2011 в 17:56)   письмо автору
 
   для: franko   (01.02.2011 в 17:44)
 

У вас проверка практически отсутствует, а значит от:
if (isset($_POST['b_day']) && ....
по:
if (isset($b_day, $b_month ....
можно сократить до трех строк.

$login = htmlspecialchars($login);

А если я захочу в логине использовать символы <>, например <user>, а вы сами увеличиваете длину его. Зачем?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования