2013-07-16 9 views
0

Извините за любительский вопрос здесь, но я создал форму, которая для жизни меня не отлаживает причину, почему она не будет отправлять обновления в базу данных.Почему моя форма не обновляет базу данных?

Пример здесь: www.dominicharrison.co.uk/projects/Portfolio/admin

Код:

<?php 
require_once('../_inc/glob.php'); 

$query = mysql_query("SELECT * FROM `pages`"); 

echo "<table border=\"1\"><tr><td>ID</td><td>Name</td><td>Location</td><td>Edit</td><td>Delete</td></tr>"; 

while($array = mysql_fetch_assoc($query)) { 

    echo "<tr><td>" . $array['id'] . "</td><td>" . $array['name'] . "</td><td>" . $array['location']; 
    echo "</td><td><a href=\"?editid={$array['id']}\">Edit</a></td>"; 
    echo "<td><a href=\"?delete={$array['id']}\">Delete</a></td></tr>"; 

} 

echo "</table>"; 

// Defines the edit and delete functions 

$edit = mysql_real_escape_string($_GET['editid']); 
$delete = mysql_real_escape_string($_GET['delete']); 

// Edit function! 

$query2 = mysql_query("SELECT * FROM `pages` WHERE `id` = '{$edit}'"); 
$array2 = mysql_fetch_assoc($query2); 

if($edit != "") { 
    ?> 
    <p> 
    <form method="POST" action=""> 
    <input name="name" value="<?php echo $array2['name']; ?>" type="text"><br /> 
    <input name="location" value="<?php echo $array2['location']; ?>" type="text"><br /> 
    <input type="submit" value="Edit!"> 
    </form></p> 

    <?php 
    if($_POST['submit']) 
    { 
     $name = mysql_real_escape_string($_POST['name']); 
     $location = mysql_real_escape_string($_POST['location']); 

     mysql_query("UPDATE `pages` SET id = '{$edit}', name = '{$name}', location = '{$location}' WHERE id = '{$edit}'"); 
    } 

} 
+0

Проверьте, не завершился ли ваш запрос - если это не так, в 'mysql_error()' будет сообщение об ошибке. Вы также должны посмотреть на использование mysqli_ или PDO - они помогут вам написать более безопасный код. – andrewsi

+0

Это может быть странный вопрос взамен, куда вы подчиняетесь? – dmaij

+0

@dmaij - если вы оставите действие пустым, форма вернет его обратно к собственному URL-адресу. – andrewsi

ответ

0

Ваша форма не подает идентификатор, так что ваш SQL не может что-либо в статье WHERE id=.

1). Добавьте скрытое поле в свою форму, чтобы отправить editID, который вы получаете из массива $ _GET:

<form method="POST" action=""> 
    <input type="hidden" name="id" value="<?php echo $edit; ?>" /> 
    <input name="name" value="<?php echo $array2['name']; ?>" type="text"><br /> 
    <input name="location" value="<?php echo $array2['location']; ?>" type="text"><br /> 
    <input type="submit" value="Edit!"> 
</form> 

2). Захватите идентификатор редактирования в логике отправки:

if($_POST['submit']) 
    { 
     $name = mysql_real_escape_string($_POST['name']); 
     $location = mysql_real_escape_string($_POST['location']); 
     $edit = mysql_real_escape_string($_POST['id']); 

     mysql_query("UPDATE `pages` SET id = '{$edit}', name = '{$name}', location = '{$location}' WHERE id = '{$edit}'"); 
    } 
+0

Сделали это, и это все еще не дает мне ничего. – futureslay

1

У вас нет $ _POST ['submit'];

var_dump($_POST); 

Добавить имя в вашу кнопку отправки. Это создает переменную post, которую вы не видите.

<input type="submit" name="submit" value="Edit!"> 

И ваша таблица будет обновлена. Однако вам нужно будет обновить страницу, так как вы вызываете выбор задолго до того, как вы вызовете обновление.

+0

Просьба указать отсутствующий атрибут «имя» в кнопке отправки. Это то, что вызывает проблему в первую очередь. – Luceos

2

С вашей формы сообщений на той же странице, это то, что происходит ...

$edit = mysql_real_escape_string($_GET['editid']); // THIS IS NULL FOR POSTS 

... 

if($edit != "") { // THIS WON'T BE TRUE FOR POSTS 

и, таким образом, он никогда не получит к процессу POST вашего сценария. Реорганизуйте свой скрипт - ваш код обработки POST должен, вероятно, быть наверху (ЕСЛИ вы продолжаете идти с этим бизнесом с одним сценарием ... которого вы не должны).

+0

Также см. Ответ @Rob Adams; submit никогда не отправляется, потому что нет ввода с этим именем. – Luceos

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