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

Форум PHP

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

 

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

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

тема: не записваются данные в БД
 
 автор: usa   (07.12.2011 в 14:25)   письмо автору
 
 

Данные не записываются в БД
if  (isset($_POST['title']))         
{$title = $_POST['title']; if ($title == '') {unset ($title);}  }
if  (isset($_POST['licence']))        
{$licence = $_POST['licence']; if ($licence == '') {unset ($licence);}}
if  (isset($_POST['accreditation']))       
 {$accreditation = $_POST['accreditation']; if ($accreditation == '') {unset ($accreditation);}}
if  (isset($_POST['address']))          
{$address = $_POST['address']; if ($address == '') {unset ($address);}}
if  (isset($_POST['tel']))         
 {$tel = $_POST['tel']; if ($tel == '') {unset ($tel);}}
if  (isset($_POST['fax']))          
{$fax = $_POST['fax']; if ($fax == '') {unset ($fax);}}
if  (isset($_POST['site']))         
 {$site = $_POST['site']; if ($site == '') {unset ($site);}}
if  (isset($_POST['email']))          
{$email = $_POST['email']; if ($email == '') {unset ($email);}}
if  (isset($_POST['full_name']))          
{$full_name = $_POST['full_name']; if ($full_name == '') {unset ($full_name);}}
if  (isset($_POST['short_name']))         
 {$short_name = $_POST['short_name']; if ($short_name == '') {unset ($short_name);}}
if  (isset($_POST['id_pu']))          {$id_pu = $_POST['id_pu']; if ($id_pu == '') {unset ($id_pu);}}
?>


<?php 
if (isset($title) && isset($licence) && isset($accreditation) && isset($address
&& isset(
$tel) && isset($fax) && isset($site) && isset($email) && isset($full_name)
 && isset(
$short_name)&& isset($id_pu))
{
/*Здесь мы пишем, что можно заносить информацию в базу*/
$result mysql_query ("INSERT INTO bd (title,licence,accreditation,address,tel,fax,site,email,full_name,short_name,id_pu) 
VALUES ('
$title', '$licence', '$accreditation','$address','$tel','$fax','$site','$email','$full_name','$short_name','$id_pu')");
if (
$result == 'true') {echo "<p>Ваш ПУ успешно добавлен!</p>";}
else {echo 
"<p>Ваш ПУ не добавлен!</p>";}
}     
else 
{
echo 
"<p>Вы ввели не всю информацию, поэтому информация не может быть добавлена в базу</p>";
}
?>

Делаем проверку:
<?php 
  
echo "<pre>"
  
print_r($_POST); 
  echo 
"</pre>"
?>

Вот что выводится:
Вы ввели не всю информацию, поэтому информация не может быть добавлена в базу
Array
(
    [title] => Профессиональное училище 
    [licence] => Лицензия
    [accreditation] => АУ
    [address] => город
    [tel] => 273-73-02 - приемная
    [fax] => 273-73-02
    [site] => http://www.pro.narod.ru
    [email] => pro@mail.ru
    [text] => Автономное учреждение
    [short_name] => АУ
    [id] => 2
    [submit] => Сохранить изменения
)

Что имеем? Все данные есть. А почему не записывается не понятно

  Ответить  
 
 автор: Valick   (07.12.2011 в 14:29)   письмо автору
 
   для: usa   (07.12.2011 в 14:25)
 

[id] => 2 или всетаки id_pu, но в любом случае это скорее всего число
и тип поля скорее всего INT, а в базу вы его пихаете как строку (в одинарных кавычках ' ')

и где фулл нэйм? вместо него я так понимаю text

  Ответить  
 
 автор: usa   (07.12.2011 в 14:36)   письмо автору
 
   для: Valick   (07.12.2011 в 14:29)
 

да поле int
А как надо правильно?

  Ответить  
 
 автор: Valick   (07.12.2011 в 14:39)   письмо автору
 
   для: usa   (07.12.2011 в 14:36)
 

VALUES('$title', '$licence', '$accreditation',
'$address','$tel','$fax','$site','$email',
'$full_name','$short_name',$id_pu)");

т.е. вместо '$id_pu' должно быть просто $id_pu

но до этого дело не доходит, у вас в форме и в проверке разные имена полей
поэтому и пишет скрипт
Вы ввели не всю информацию, поэтому информация не может быть добавлена в базу

  Ответить  
 
 автор: usa   (07.12.2011 в 14:47)   письмо автору
 
   для: Valick   (07.12.2011 в 14:39)
 

Спасибо. внес коррективы.
$result = mysql_query ("INSERT INTO bd (title,licence,accreditation,address,tel,fax,site,email,full_name,short_name,id_pu) 
VALUES ('$title', '$licence', '$accreditation','$address','$tel','$fax','$site','$email','$full_name','$short_name',$id_pu)");
if ($result == 'true') {echo "<p>Ваш ПУ успешно добавлен!</p>";}
else {echo "<p>Ваш ПУ не добавлен!</p>";}

И все равно
Ваш ПУ не добавлен!
Array
(
    [title] => Профессиональное училище
    [licence] => Лицензия
    [accreditation] => 111
    [address] => Адрес
    [tel] => 273-73-02 - приемная
    [fax] => 273-73-02
    [site] => http://www.pro14.narod.ru
    [email] => pro14@mail.ru
    [full_name] => Автономное учреждение 
    [short_name] => 111
    [id_pu] => 2
    [submit] => Сохранить изменения
)

  Ответить  
 
 автор: Valick   (07.12.2011 в 14:59)   письмо автору
 
   для: usa   (07.12.2011 в 14:47)
 

а в саму базу заглядывали? появилась там строка или нет?

if ($result == 'true')
___
if ($result == true)
if ($result)
но лично я бы сделал так
if(mysql_affected_rows()>0)
или
изменив логику вот так
if(mysql_affected_rows() == -1)

  Ответить  
 
 автор: usa   (07.12.2011 в 15:05)   письмо автору
 
   для: Valick   (07.12.2011 в 14:59)
 

В базе нет изменений.

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

надо переписать так:
if(mysql_affected_rows()>0) {echo "<p>Ваш ПУ успешно добавлен!</p>";}

  Ответить  
 
 автор: Valick   (07.12.2011 в 15:13)   письмо автору
 
   для: usa   (07.12.2011 в 15:05)
 

угу, но если записи нет в базе, то проблемма еще в запросе
проверьте еще раз типы полей, кроме id_pu есть еще числовые поля?

  Ответить  
 
 автор: usa   (07.12.2011 в 15:19)   письмо автору
 
   для: Valick   (07.12.2011 в 15:13)
 

оказывается еще есть :)
id_town
id_region
id_state
advertisment
все они int.
Но их не нужно редактировать пользователю. Поэтому я их и не вывожу для редактрования

  Ответить  
 
 автор: Valick   (07.12.2011 в 15:24)   письмо автору
 
   для: usa   (07.12.2011 в 15:19)
 

хм... о каком редактировании речь? :))
INSERT - это вставка, редактировать это UPDATE
и сильно сомневаюсь что
id_town
id_region
id_state
это те вещи которые имеют значения по умолчанию, хотя в принципе скорее всего просто "0" или еще лучше NULL

  Ответить  
 
 автор: usa   (07.12.2011 в 15:32)   письмо автору
 
   для: Valick   (07.12.2011 в 15:24)
 

значения там прописываются. Для каждой организации свои значения.
Тогда получается пропущенные intы - их нужно указывать еще в перовм файле?
<form action="pu_action.php" method="get" name="f2">
<p>Заметили неточность - сообщите об ошибке!</p>
<input type='hidden' name='title' value='<?php echo $myrow3['title']; ?>'>
<input type='hidden' name='licence' value='<?php echo $myrow3['licence']; ?>'>
...
<input type='submit' name='submit' value='Сообщить'></form>

  Ответить  
 
 автор: Valick   (07.12.2011 в 15:38)   письмо автору
 
   для: usa   (07.12.2011 в 15:32)
 

нет)
нужно использовать UPDATE вместо INSERT
вы же редактируете строку (о чем собственно нужно было сообщить в самом начале)
а не вставляете новую строку
хотя по идее новая строка должна вставиться если запрос корректный
кстати магические кавычки включены?

  Ответить  
 
 автор: usa   (07.12.2011 в 15:54)   письмо автору
 
   для: Valick   (07.12.2011 в 15:38)
 

переписал
<?php 
if (isset($title) && isset($licence) && isset($accreditation) && isset($address
&& isset(
$tel) && isset($fax) && isset($site) && isset($email) && isset($full_name
&& isset(
$short_name)&& isset($id_pu))
{
/*Здесь мы пишем, что можно заносить информацию в базу*/

$result mysql_query ("UPDATE pu SET title='$title', licence='$licence', 
accreditation='
$accreditation', address='$address', tel='$tel', 
fax='
$fax', site='$site', email='$email', full_name='$full_name', short_name='$short_name
WHERE id_pu='
$id_pu'");
if (
$result == 'true') {echo "<p>Ваша рубрика обновлена!</p>";}
else {echo 
"<p>Ваша рубрика не обновлена!</p>";}
}          
else 
{
echo 
"<p>Вы ввели не всю информацию, поэтому рубрика не может быть добавлена в базу</p>";
}
?>

Все равно тот же результат. Ваш ПУ не добавлен!
Про магические кавычки не знаю

  Ответить  
 
 автор: Valick   (07.12.2011 в 16:00)   письмо автору
 
   для: usa   (07.12.2011 в 15:54)
 

WHERE id_pu='$id_pu' -> WHERE id_pu=$id_pu
if ($result == 'true') -> ...

  Ответить  
 
 автор: usa   (07.12.2011 в 16:15)   письмо автору
 
   для: Valick   (07.12.2011 в 16:00)
 

заработало.
Только как быть если поле остается пустым, то запись не производится.
Как можно оставлять поле не заполненным?

  Ответить  
 
 автор: Valick   (07.12.2011 в 16:39)   письмо автору
 
   для: usa   (07.12.2011 в 16:15)
 

естетсвенно записи не будет, так как запрос станет некорректным
его нужно собирать в соответствии с теми полями которые присутствуют
именно при проверке данных переданных из формы нужно "по кусочку" собирать запрос
___
и кстати после проверки валидности данных не мешало бы применять эскейпирование :))
на магические кавычки лучше не расчитывать

  Ответить  
 
 автор: usa   (07.12.2011 в 16:47)   письмо автору
 
   для: Valick   (07.12.2011 в 16:39)
 

я решил это просто - написал, что все поля обязательны к заполнению.

а вот "и кстати после проверки валидности данных не мешало бы применять эскейпирование :))"
Можно поподробнее?

  Ответить  
 
 автор: Valick   (07.12.2011 в 16:56)   письмо автору
 
   для: usa   (07.12.2011 в 16:47)
 

mysql_real_escape_string
эксейпирование и магические кавычки - это как раз то что не грех спросить у гугла :)
поверьте лучше чем гугл или хорошая книга, я вам не смогу рассказать в рамках форума.
учитесь разделять информацию и выхватывать самую суть
___
в соседней теме отредактируйте сообщение что бы оно помещалось в окно браузера и не растягивало его, а то читать не удобно

  Ответить  
 
 автор: Sfinks   (07.12.2011 в 18:47)   письмо автору
 
   для: usa   (07.12.2011 в 16:15)
 

>Как можно оставлять поле не заполненным?
2 варианта.
Первый - в свойствах таблицы полям, которые можно не заполнять, нужно присвоить значения по умолчанию. Тогда при добавлении записи поля значения для которых не переданы будут заполняться значениями по умолчанию
Второй - Пусть из формы приходят и не все поля, но во время проверки правильности введенных данных, переменным, значения для которых не установлены, присваивать ничтожные (а может и значимые), но адекватные данные. Т.е., например, 0 для поля integer, "" для string и т.д. Но делать все это до отправки запроса в БД.

  Ответить  
 
 автор: usa   (12.12.2011 в 20:10)   письмо автору
 
   для: Sfinks   (07.12.2011 в 18:47)
 

вот поставил кавычки
$result = mysql_query ("UPDATE pu SET title='$title', licence='$licence', 
accreditation='$accreditation', address='$address', tel='$tel', fax='$fax', 
site='$site', email='$email', full_name='$full_name', short_name='$short_name' 
WHERE id_pu=" . mysql_real_escape_string($id_pu) . "");

Теперь все ОК в запросе?

  Ответить  
 
 автор: cheops   (12.12.2011 в 20:52)   письмо автору
 
   для: usa   (12.12.2011 в 20:10)
 

Внешне вроде да, но лучше проверить, обязательно обработав запрос на успешность выполнения, в случае неудачи выводить отчет mysql_error(), чтобы выяснить, где проблема.

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

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