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

Форум PHP

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

 

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

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

тема: не обновляются данные
 
 автор: franko   (03.02.2011 в 15:23)   письмо автору
 
 

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($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."'
                       ");
printf ("UPDATE: %d\n", mysql_affected_rows());
if ($result == 'true') {echo "<p>Ваши данные обновлены!</p>";
echo "Это b_day - $b_day";
echo "Это b_month - $b_month";
echo "Это b_year - $b_year";

После выполнения
UPDATE: 1
Ваши данные обновлены!
Это b_day - \\\'31\\\'Это b_month - 12Это b_year - \\\'1999\\\'
В БД в ячейке b_day - о, b_month - 12, b_year - 0

В чем может быть дело?

Тип INT.

  Ответить  
 
 автор: cheops   (03.02.2011 в 15:51)   письмо автору
 
   для: franko   (03.02.2011 в 15:23)
 

А откуда столько лишних кавычек в значениях переменных? Может дело в этом? Значения воспринимаются как строка и при попытке привести их к числу они прводятся к 0?

  Ответить  
 
 автор: franko   (03.02.2011 в 16:21)   письмо автору
 
   для: cheops   (03.02.2011 в 15:51)
 

`b_day`='".$b_day."',

или вот так лучше b_day='$b_day',

как правильно все-таки?

  Ответить  
 
 автор: cheops   (03.02.2011 в 16:28)   письмо автору
 
   для: franko   (03.02.2011 в 16:21)
 

Так как это тип INT, то его следует указывать вообще без кавычек b_day=$b_day (хотя кавычки тоже допускаются), кроме того стоит проверить (просто вывести в браузер), что внутри переменной $b_day - там должно быть число, тоже без кавычек и любых других лишних символов.

  Ответить  
 
 автор: franko   (03.02.2011 в 16:36)   письмо автору
 
   для: cheops   (03.02.2011 в 16:28)
 

if ($result == 'true') {echo "<p>Ваши данные обновлены!</p>";
echo "Это b_day - $b_day";
echo "Это b_month - $b_month";
echo "Это b_year - $b_year";



вот что выводит.

Это b_day - \\\'31\\\'Это b_month - 12Это b_year - \\\'1999\\\'

  Ответить  
 
 автор: franko   (03.02.2011 в 17:00)   письмо автору
 
   для: franko   (03.02.2011 в 16:36)
 

может отключить magic_quotes

стоит это делать?

  Ответить  
 
 автор: cheops   (03.02.2011 в 18:14)   письмо автору
 
   для: franko   (03.02.2011 в 17:00)
 

Да стоит, кроме того следует проверить HTML-форму, магические кавычки столько слешей давать не могут - наверняка где-то ошибка при формировании атрибута value.

  Ответить  
 
 автор: psychomc   (04.02.2011 в 10:41)   письмо автору
 
   для: franko   (03.02.2011 в 16:36)
 

вообще-то, если переменная $result булевого типа, то true нужно писать без кавычек, или вообще просто if ($result) ...

  Ответить  
 
 автор: sim5   (03.02.2011 в 16:14)   письмо автору
 
   для: franko   (03.02.2011 в 15:23)
 

Дополнение - ответ на причину вам выдает echo, у вас все строки.
В условиях проверки у вас только одно - наличие всех полей чем-то заполненных. Если такая проверка удовлетворяет, то:
<?
//без создания промежуточных переменных,
//обрезаем пробелы, и удаляем из массва пустые поля
$_POST array_diff(array_map('trim',$_POST), array(""));
//если нет пустых полей, запись
if(count($_POST)==17) {
  
"UPDATE `users` SET  
          `b_day`="
.$_POST['b_day'].",
          ....."
);
}

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

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