2012-07-01 3 views
0

У меня есть опыт программирования, но новичок в php. У меня есть проблема с примером, который я делал из этого урока. Я просмотрел его миллионы раз, искал в Google, ect ect. У меня нет идеи, почему мой код не работает.PHP Проблема с удалением из MySQL

Цель состоит в том, чтобы просто протестировать вставку и удаление в sql из php, используя кнопку «Добавить запись» и «Удалить запись». Кнопка «Добавить запись» работает отлично, но удаление не делает ничего, кроме перезагрузки страницы. Heres код ...

<?php // sqltest.php 

require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database, $db_server) 
    or die("Unable to select database: " . mysql_error()); 

if (isset($_POST['author']) && 
    isset($_POST['title']) && 
    isset($_POST['type'])  && 
    isset($_POST['year'])  && 
    isset($_POST['isbn'])) 
{ 
    $author = get_post('author'); 
    $title = get_post('title'); 
    $type = get_post('type'); 
    $year = get_post('year'); 
    $isbn = get_post('isbn'); 

    if (isset($_POST['delete']) && $isbn != "") 
    { 
     echo "worked!!!!!!!!!!!!!!"; 
     $query = "DELETE FROM classics WHERE isbn='$isbn'"; 
     $result = mysql_query($query) or die(mysql_error()); 
     if(mysql_affected_rows($result) > 0) echo 'user deleted'; 

     //if (!mysql_query($query, $db_server)) 
     //echo "DELETE failed: $query" . mysql_error(); 
    } 
    else 
    { 
     echo "nooooooooooooooooooo"; 
     $query = "INSERT INTO classics VALUES" . 
     "('$author', '$title', '$type', '$year', '$isbn')"; 
     if (!mysql_query($query, $db_server)) 
     { 
      echo "INSERT failed: $query" . mysql_error(); 
     } 
    } 
} 

echo <<<_END 
<form action="sqltest.php" method="post"><pre> 
Author <input type="text" name="author" /> 
Title <input type="text" name="title" /> 
Type <input type="text" name="type" /> 
Year <input type="text" name="year" /> 
ISBN <input type="text" name="isbn" /> 
<input type='submit' value='ADD RECORD' /> 
</pre></form> 
_END; 



$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

$rows = mysql_num_rows($result); 

for ($j = 0 ; $j < $rows ; ++$j) 
{ 
     $row = mysql_fetch_row($result); 

echo <<<_END 
<pre> 
Author $row[0] 
Title $row[1] 
Type $row[2] 
Year $row[3] 
ISBN $row[4] 
<form action="sqltest.php" method="post"> 
<input type="hidden" name="delete" value="yes" /> 
<input type="hidden" name='isbn' value="$row[4]" /> 
<input type='submit' value='DELETE RECORD' /> 
</form> 
</pre> 
_END; 
} 

mysql_close($db_server); 

function get_post($var) 
{ 
    return mysql_real_escape_string($_POST[$var]); 
} 

?> 

Я просмотрел это много раз, до сих пор не знаю, почему это не сработает. Это цикл for, который делает эту кнопку неработоспособной? Заметьте, вы увидите, что эхо «сработало !!!»; а в другом - «noooooooo»; это было для меня, чтобы проверить, проверена ли кнопка, но ничего не печатает. Так, может, я пропустил что-то в самом коде кнопки? Кроме того, ошибки не печатаются, и мой редактор (и я) пропустил синтаксическую ошибку (если это так).

Код кнопки удаления находится в конце, прежде чем я закрыл БД.

Спасибо за вашу помощь заранее.

+0

Сделайте 'var_dump()' on '$ _POST' и убедитесь, что вы получаете значения, которые вы ожидаете –

+0

@JohnConde Эй это только что заметил. Извините, что вы здесь, но как я могу это сделать? Новое к этому = ( Благодарим вас за ввод! – TheNoob

+0

нашел ответ на этот код: http://stackoverflow.com/questions/14077539/php-cant-add-content-text-book-example причина, по которой он не работает, заключается в том, что оператор if/else для удаления вложен внутри другого оператора if. , если вы его не знаете. –

ответ

-2

У вас нет поля формы с именем delete, поэтому невозможно, чтобы ваш путь кода удаления никогда не был выполнен.

Я предполагаю, что вы пытаетесь использовать значение кнопки отправки, чтобы решить, что делать? В этом случае у вас также отсутствует атрибут name на кнопке отправки - без этого он не может отправить какое-либо значение в форму. Вы, вероятно, хотите:

<input type="submit" name="submit" value="DELETE RECORD" /> 

и затем

if (isset($_POST['submit']) && ($_POST['submit'] == 'DELETE RECORD')) { 
    ... 
} 
+0

В его форме есть поле для удаления. – Rawkode

+0

@rawkode: d'oh ... –

+0

Спасибо за ваш вклад. Я попытался, тот же результат. Это просто очень раздражает. lol Снова спасибо, хотя – TheNoob

2

Ваша проблема ваша первая if блок.

Вы проверки на наличие посланных переменных authortitletypeyearisbn. В то время как в вашем коде удаления отправляются только переменные: delete и isbn. Поэтому первый блок if полностью пропущен (включая код удаления).

Необходимо изменить первый if, чтобы быть if(isset($_POST)) { // a form has been posted. Тогда это должно сработать.

Другой способ сделать это:

if(isset($_POST['delete']) && isset($_POST['isbn']) && !empty($_POST['isbn'])){ 
    //delete code here 
} 

if(isset($_POST['author']) && isset($_POST['title']) && isset....){ 
    // insert code here 
} 

EDIT: переписан код:

<?php // sqltest.php 

// I don't know what's in here, so I've left it 
require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database, $db_server) 
    or die("Unable to select database: " . mysql_error()); 

if (isset($_POST)) 
{ 

    if (isset($_POST['delete']) && !empty($_POST['isbn'])) 
    { 
     echo "Deleting"; 
     $query = "DELETE FROM classics WHERE isbn='".mysql_real_escape_string($_POST['isbn'])."'"; 
     $result = mysql_query($query) or die(mysql_error()); 
     if(mysql_affected_rows($result) > 0) echo 'user deleted'; 
    } 
    else 
    { 
     echo "Inserting"; 
     $query = "INSERT INTO classics VALUES ('".mysql_real_escape_string($_POST['author'])."', '".mysql_real_escape_string($_POST['title'])."', '".mysql_real_escape_string($_POST['type'])."', '".mysql_real_escape_string($_POST['year'])."', '".mysql_real_escape_string($_POST['isbn'])."')"; 
     if (!mysql_query($query)) 
     { 
      echo "INSERT failed: $query" . mysql_error(); 
     } 
    } 
} 

// you don't need echo's here... just html 
?> 

<form action="sqltest.php" method="post"> 
    <pre> 
     Author <input type="text" name="author" /> 
     Title <input type="text" name="title" /> 
     Type <input type="text" name="type" /> 
     Year <input type="text" name="year" /> 
     ISBN <input type="text" name="isbn" /> 
     <input type='submit' value='ADD RECORD' /> 
    </pre> 
</form> 

<?php 

$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

// a better way to do this: 
while($row = mysql_fetch_array($result)){ 
?> 

<pre> 
    Author <?php echo $row[0]; ?> 
    Title <?php echo $row[1]; ?> 
    Type <?php echo $row[2]; ?> 
    Year <?php echo $row[3]; ?> 
    ISBN <?php echo $row[4]; ?> 
    <form action="sqltest.php" method="post"> 
     <input type="hidden" name="delete" value="yes" /> 
     <input type="hidden" name='isbn' value="<?php echo $row[4]; ?>" /> 
     <input type='submit' value='DELETE RECORD' /> 
    </form> 
</pre> 

<?php 
} 

mysql_close($db_server); 

?> 
+0

Тот же результат =/его действие точно так же, как вы описали его тоже, спасибо большое за ваш вклад! – TheNoob

+0

Я действительно пробовал, хотя, когда я тестировал его, он печатал строку [0] [1] и когда я h он удаляет его, имея тот же результат. =/Я читаю ссылку, которую вы опубликовали прямо сейчас. Благодарим вас за ввод – TheNoob

+0

@TheNoob, пожалуйста, см. Мое редактирование. Я переписал ваш код, чтобы: a) быть более читаемым; b) просвещать вас в нескольких точках (например, лучший/более простой способ прокрутки строк db) и c) надеюсь, исправить вашу проблему. Пожалуйста, просмотрите и посмотрите, работает ли это. –

0

Проверьте метод, используемый в вашей форме.Убедитесь в том, что это POST так:

Форма action="yourpage.php" method="POST"

и в коде выше, замените следующее:

$author = get_post('author'); 
    $title = get_post('title'); 
    $type = get_post('type'); 
    $year = get_post('year'); 
    $isbn = get_post('isbn'); 

с

$author = $_POST['author']; 
$title = $_POST['title']; 
$type = $_POST['type']; 
$year = $_POST['year']; 
$isbn = $_POST['isbn']; 

Наконец, нет необходимости проверять снова, если $isbn не является нулевым, как вы это сделали в своем методе isset(). Так удалить $isbn!="" в случае ниже:

if (isset($_POST['delete']) && $isbn != "") 
    { 
} 

становится:

if (isset($_POST['delete'])) 
    { 
} 

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

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