2015-01-21 2 views
1

Таким образом, у меня есть следующая проблема:Update MYSQL с PHP, удаляет значение вместо

У меня есть таблица, в которой я наполняться данными из моей базы данных MySQL, а затем отобразить на сайте. Я хочу сделать это так, чтобы вы могли изменить, например. описание впоследствии. Вместо этого я сейчас понял, что я опорожнил значение. Я не вижу, где мой код идет не так, поэтому я был бы признателен за помощь. :)

HTML

<tbody> 
    <?php 
     foreach($records as $r) {      

    ?> 
     <tr><?php 
      echo "<td>" . "<div class=table-image>" . "<img src=Assets/Images/" . escape($r->name) . " </td>". "</div>"; 
      ?> 
      <td><div class="data"><?php echo escape($r->name); ?></div></td> 
      <td><div class="data"><?php echo escape($r->location); ?></div></td> 
      <td><div class="data"><?php echo escape($r->partners); ?></div></td> 
      <td><a href="https://goo.gl/maps/S5Drk" target="_blank">◈ Google Maps</a></td> 
      <td class="tDesc"> 
       <div class="desc"> 
        <input class="form-control" value="<? echo escape($r->description); ?>" name="description" type="text"> 
       </div> 
      </td> 
      <td> 
       <?php echo escape($r->date); ?> 
      </td> 
      <td> 
       <form method="post" action="" enctype="multipart/form-data"> 
        <input type="submit" value="<? echo escape($r->id); ?>" name="delete"> 
       </form> 
      </td> 
      <td> 
       <form method="post" action="" enctype="multipart/form-data"> 
        <input type="submit" value="<? echo escape($r->id); ?>" name="update"> 
       </form> 
      </td> 
     </tr> 
    <?php 
     } 
    ?> 
</tbody> 

PHP

if(isset($_POST['update'])){ 
    $des = $_POST['description']; 
    $UpdateQuery = "UPDATE repo SET description = '$des', date = NOW() WHERE id ='$_POST[update]' ";   
    mysql_query($UpdateQuery); 
}; 
+1

Будьте благодарны, что удаляет только одну запись. Ваш запрос такой же опасный, как и он! Вы используете *** устаревшее *** 'mysql' расширение ([читайте ** красное поле ** вверху] (http://www.php.net/mysql_connect) - он говорит _warning_ по какой-либо причине). Узнайте о инъекциях и о том, как их предотвратить. Используйте либо одно из современных расширений ('PDO' или' mysqli'): они поддерживают подготовленные операторы и довольно просты в использовании. [здесь приведен пример] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+0

Вместо 'mysql_query ($ UpdateQuery);', напишите 'die ($ UpdateQuery) '. Какой текст вы видите? Можете ли вы объяснить, как это произошло? – Konerak

+0

UPDATE repo SET description = '', date = NOW() WHERE id = '46 ' Это текст, который я вижу. Не знаю, извините. Я изучаю php ровно 24 часа, поэтому мое общее понимание этого по-прежнему очень низкое. Я не думаю, что я сделал синтаксическую ошибку. Так, может, я объявил что-то не так? – Ozymandias

ответ

3

Ваши поля находятся вне формы, только поля внутри формы будут отправлены.

<input name="i_will_not_be_send" /> 
<form> 
    <input name="i_will_be_send" /> 
</form> 

Всегда избежать значения, введенные в вашей строке запроса, см mysql_real_escape_string

Читайте также комментарии об использовании соответствующей библиотеки MySQL

+0

'mysql_real_escape_string', например *** all' mysql_ * 'функции устарели ***. _And_ это всегда было громоздким (в том, что он полагается на программиста, чтобы правильно установить кодировку, _and_ требует от программиста отслеживать, какие значения были экранированы, а какие нет). Не рекомендуется отказываться от OP, если он должен переключиться на расширение, поддерживающее 'prepare' –