обновление данных с помощью php в базе MySQL не происходит.

G-SHEFF

Новичок
обновление данных с помощью php в базе MySQL не происходит.

PHP:
<?php 
$user = "nahuj"; 
$pass = "nahuj"; 
$db = "nahuj"; 
function untag ($string) { 
   $string = ereg_replace("<","&lt;",$string); 
   $string = ereg_replace(">","&gt;",$string); 
   $string = ereg_replace('\\\"',"&quot;",$string); 
   $string = ereg_replace(":",":",$string); 
   $string = ereg_replace("!","!",$string); 
   $string = ereg_replace("\r","",$string); 
   $string = ereg_replace("\n","<br>",$string); 
   $string = ereg_replace("%","%",$string); 
   $string = ereg_replace("^ +","",$string); 
   $string = ereg_replace(" +$","",$string); 
   $string = ereg_replace(" +"," ",$string); 
   $string = ereg_replace("'","\'",$string); 
   return $string; 
} 
$link = mysql_connect( "localhost", $user, $pass ); 
if ( ! $link ) 
   die( "Couldn't connect to MySQL" ); 
mysql_select_db( $db, $link ) or die ( "couldn't open $db: ".mysql_error() ); 

if ( isset ( $_POST['ntext'] ) && isset( $_POST['news_id'] ) && isset( $_POST['ntitle'] ) ) 
   { 
   $news_id=(int)$_POST[news_id]; 
   $ntext=untag($_POST[ntext]); 
   $ntitle=untag($_POST[ntitle]); 
   $query = "UPDATE news SET ntitle = '$ntitle', ntext = '$ntext'  where news_id = '$news_id'"; 
   $result = mysql_query( $query ); 
   if ( ! $result ) 
      die ("Couldn't update: ".mysql_error()); 
     print "<h1>Table updated: ".mysql_affected_rows() . 
   "row(s) changed</h1><p>"; 
   } 
?> 

<? 
$result = mysql_query( "SELECT news_id, ntext, ntitle FROM news" ); 
if ( ! $result ) 
      die ("Tabel empty");  
while( $a_row = mysql_fetch_object( $result ) ) 
   { 
   print "<table><tr><form action=\"$PHP_SELF\" method=\"POST\"><td width=20% align=center valign=top rowspan=2><input type=\"hidden\" name=\"news_id\" value=\"$a_row->news_id\">сообщение №: $a_row->news_id;<br>дата: $a_row[1];</td>"; 
   print "<td width=80% align=justify valign=middle><textarea rows=7 cols=75 name=\"ntext\">$a_row->ntext</textarea></font></td></tr><tr><td width=80% align=justify valign=middle>"; 
   print "<i>&nbsp;&nbsp;&nbsp; тема текста:</i></font><br><font size=\"-1\"><textarea rows=3 cols=75 name=\"ntitle\">$a_row->ntitle</textarea></font><p align=right><input type=\"submit\" name=\"action\" value=\"save\"><input type=\"submit\" name=\"action\" value=\"delete\"></form></p></td></tr></table>"; 
   } 
mysql_close( $link ); 
?> 


</form>
Где ошибка? почему при нажатии на кнопку происходит рэсэт страницы, а не обновление данных?
 

Фанат

oncle terrible
Команда форума
где ошибка, ты должен найти сам.
контролируй выполнение каждой части программы путём вывода на экран всех используемых переменных, и смотри - в какой момент они не соответствуют ожиданиям.

-~{}~ 04.10.05 09:45:

когда найдёшь - я расскажу тебе массу интересного про твой очень необычный код. не в плане "почему происходит рэсэт", а в плане твоих воззрений на безопасность.
 

dorfey

Guest
Добавь в начале своего скрипта эти строки:
PHP:
ini_set('display_errors',1);
error_reporting(E_ALL);
и будут видны все твои ошибки ;)

ps. а ошибок тут хватает
 

G-SHEFF

Новичок
мдя?..
ну, я сделал отак:
PHP:
<?php 
$user = "nahuj"; 
$pass = "nahuj"; 
$db = "nahuj"; 
$link = mysql_connect( "localhost", $user, $pass ); 
if ( ! $link ) 
   die( "Couldn't connect to MySQL" ); 
mysql_select_db( $db, $link ) or die ( "couldn't open $db: ".mysql_error() ); 

if ( isset ( $_POST['ntext'] ) && isset( $_POST['news_id'] ) && isset( $_POST['ntitle'] ) ) 
   { 
   $news_id=$_POST['news_id']; 
   $ntext=$_POST['ntext']; 
   $ntitle=$_POST['ntitle']; 
   $query = "UPDATE news SET ntext = '$ntext' where news_id=$news_id"; 
   $result = mysql_query( $query ); 
   if ( ! $result ) 
      die ("Couldn't update: ".mysql_error()); 
   $query = "UPDATE news SET ntitle = '$ntitle' where news_id=$news_id"; 
   $result = mysql_query( $query ); 
   if ( ! $result ) 
      die ("Couldn't update: ".mysql_error()); 
print "<h1>Table updated: ".mysql_affected_rows() . 
   "row(s) changed</h1><p>"; 
   } 
?> 

<? 
$result = mysql_query( "SELECT news_id, ntext, ntitle FROM news" ); 
while( $a_row = mysql_fetch_object( $result ) ) 
   { 
   print "<table><tr><form action=\"$PHP_SELF\" method=\"POST\"><td width=20% align=center valign=top rowspan=2><input type=\"hidden\" name=\"news_id\" value=\"$a_row->news_id\">сообщение №: $a_row->news_id;<br>дата: $a_row[1];</td>"; 
   print "<td width=80% align=justify valign=middle><textarea rows=7 cols=75 name=\"ntext\">$a_row->ntext</textarea></font></td></tr><tr><td width=80% align=justify valign=middle>"; 
   print "<i>&nbsp;&nbsp;&nbsp; тема текста:</i></font><br><font size=\"-1\"><textarea rows=3 cols=75 name=\"ntitle\">$a_row->ntitle</textarea></font><p align=right><input type=\"submit\" name=\"action\" value=\"save\"><input type=\"submit\" name=\"action\" value=\"delete\"></form></p></td></tr></table>"; 
   } 
mysql_close( $link ); 
?> 


</form>
данные обновляются, но в "Table updated: 0row(s) changed" постоянно выводится "0". И это только раз... Во-вторых, скрипт полностью оголён. ...
 

Фанат

oncle terrible
Команда форума
по поводу оголения прочти вот это: PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.
и сразу скрипт станет одет

по поводу нуля - ищи косяк сам. путём ЗАПУСКА кода, а не путём его ПРОСМОТРА.

и ещё. обновлять в таблице можно сразу несколько полей.
а не по одному, как у тебя.

-~{}~ 04.10.05 10:27:

а я знаю, хи-хи, почему ноль =)
 

dorfey

Guest
а я знаю, хи-хи, почему ноль =)
ну собсна теперь нужно автора подвести к своим ошибка ;)

G-SHEFF
1. empty - читаем
2. $news_id=$_POST['news_id']; - лишнее присвоение. в запросе к БД можно стразу использовать $_POST['news_id']
 

Фанат

oncle terrible
Команда форума
dorfey
что за фигню ты пишешь?
можно тебя попросить помолчать?
 

dorfey

Guest
что за фигню ты пишешь?
этим я только хотел показать его явные ошибки.
в чем у него трабл я дописать не успел.

Table updated: 0row(s) changed
означает что:
1. при попытке удалить запись нажатием кнопки "delete" скрипт пытается произвести Upadate (запись не изменяется, поэтому он и получает нуль)

данные обновляются, но
если добавить редирект после update этот трабл пропадет сам собой.

можно тебя попросить помолчать?
можно. а зачем? :D
 
Сверху