2012-02-12 2 views
0

Я смотрел здесь повсюду в Stackoverflow и I've searced 16.493 сайтов на Google, но нет ответов на самые основные вещи в PHP (редактировать запись)Редактировать запись (должно быть так легко)

I've удалось кодируйте самые сложные вещи - но это похоже на рак, а также поможет другим.

У меня есть к файлам - edit.php - и update.php

edit.php работы и извлекает данные из записи

Вот edit.php

<?php 
mysql_connect('localhost', 'user', 'pass') or die(mysql_error()); 
mysql_select_db("db") or die(mysql_error()); 

$UID = (int)$_GET['id']; 
$query = mysql_query("SELECT * FROM cloudbig WHERE id = '$UID'") or die(mysql_error()); 

if(mysql_num_rows($query)>=1){ 
    while($row = mysql_fetch_array($query)) { 
     $fs = $row['fs']; 
     $texti = $row['texti']; 
    } 
?> 

<form name="form1" method="post" action="update.php"> 

<input type="text" name="fs" value="<?php echo $texti ?>" size="60"> 
<textarea rows="8" name="texti" id="userName" cols="60"><?php echo $texti ?></textarea> 
<input type="submit" name="save" value="submit" /> 
</form> 

<?php 
} 
?> 

и здесь update.php

<?php 
$id = $_REQUEST["id"]; 
$fs = $_POST["fs"]; 
$texti = $_POST["texti"]; 

mysql_connect('localhost', 'user', 'pass') or die(mysql_error()); 
echo "MySQL Connection Established! <br>"; 

mysql_select_db("db") or die(mysql_error()); 
echo "Database Found! <br>"; 

$query = "UPDATE cloudbig SET fs = '$fs', texti = '$texti' WHERE id = '$id'"; 

$res = mysql_query($query); 

if ($res) 
    echo "<p>Record Updated<p>"; 
else 
    echo "Problem updating record. MySQL Error: " . mysql_error(); 
?> 

Я сделал целую новость/сайт журнала в php, но простая функция edit.php - это проблема

+0

И что не работает? Любая ошибка? Вы пробовали 'echo $ id, $ fs, $ texti;'? –

+0

Попробуйте выполнить эхо-запрос и вставить его в mysql-клиент или проверить mysql_error() после обновления. Также ваш код уязвим для SQL-инъекции. – piotrm

+0

Сообщите нам об ошибке и всегда помните, как использовать mysql_real_escape_string(). – iDifferent

ответ

0

Я думаю, что короткий ответ заключается в том, что вы никогда не отправляете «id» до скрипта update.php , Ваша форма должна выглядеть следующим образом:

<form name="form1" method="post" action="update.php"> 
    <input type="hidden" name="id" value="<?php echo $UID ?>"> 
    <input type="text" name="fs" value="<?php echo $fs; ?>" size="60"> 
    <textarea rows="8" name="texti" id="userName" cols="60"><?php echo $texti ?></textarea> 
    <input type="submit" name="save" value="submit" /> 
</form> 

, который отправит id в массив POST, где она может быть доступна $id = $_REQUEST["id"];

Вы также можете сделать это, отправив его через _GET путем изменения формы action :

<form name="form1" method="post" action="update.php?id=<?php echo $UID ?>"> 
    <input type="text" name="fs" value="<?php echo $fs; ?>" size="60"> 
    <textarea rows="8" name="texti" id="userName" cols="60"><?php echo $texti ?></textarea> 
    <input type="submit" name="save" value="submit" /> 
</form> 

, который поставит его в массиве $ _GET, где он также будет видно в массиве $ _REQUEST.

Наконец, есть некоторые главные проблемы с кодом:

  • В первую очередь, это зависит от SQL инъекций! Вы должны удалить свои переменные перед передачей их в запрос MySQL.

  • Второй. Как указано в iDifferent, вы, похоже, хотите отразить неправильное значение в поле fs (вы устанавливаете его равным полю texti)

  • В-третьих, почему у вас есть этот цикл?

    , если (mysql_num_rows ($ запроса)> = 1) { в то время как ($ строка = mysql_fetch_array ($ запроса)) { $ фс = $ строки [ 'фс']; $ texti = $ row ['texti']; }

Если вы выборки по ID вы никогда не должны иметь дубликаты. Убедитесь, что идентификатор является первичным ключом, и нет причин проверять несколько строк.

+0

Еще одна ошибка в '', который, я думаю, должен быть ' ' – iDifferent

+0

@iDifferent хороший catch. Я добавил это в свой список –

Смежные вопросы