2014-04-21 25 views
10

Zasadniczo zakodowałem kod, który zapełnia listę kategorii z mojej bazy danych, a następnie można wybrać, które usunąć.Błąd wyrażeń Isset

mam problem z kodem usuwania, które nie wydają się do pracy z powodu błędu:

Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in F:\xamppnew\htdocs\650032\admin\delete.php on line 6 

Linia przyczyną tego jest:

if(isset($_POST['delete_id'] && !empty($_POST['delete_id']))) { 

deletecategory.php

<h3> 
    Delete Category 
    </h3> 

    <?php $result = mysql_query("SELECT * FROM category"); ?> 

<table> 
    <?php while($row = mysql_fetch_array($result)) : ?> 
    <tr id="<?php echo $row['category_id']; ?>"> 
    <td><?php echo $row['category_Name']; ?></td> 
    <td> 
     <button class="del_btn" rel="<?php echo $row['id']; ?>">Delete</button> 
    </td> 
    </tr> 
    <?php endwhile; ?> 
</table> 

<script> 
    $(document).ready(function(){ 
    $('.del_btn').click(function(){ 
     var del_id = $(this).attr('rel'); 
     $.post('delete.php', {delete_id:del_id}, function(data) { 
      if(data == 'true') { 
      $('#'+del_id).remove(); 
      } else { 
      alert('Could not delete!'); 
      } 
     }); 
    }); 
    }); 
</script> 

delete.php

<?php 
    if(isset($_POST['delete_id'] && !empty($_POST['delete_id']))) { 
     $delete_id = mysql_real_escape_string($_POST['delete_id']); 
     $result = mysql_query("DELETE FROM category WHERE `id`=".$delete_id); 
     if($result !== false) { 
     echo 'true'; 
     } 
    } 
    ?> 
+0

Twój kod jest podatny na SQL injection. ['mysql_real_escape_string' działa tylko wtedy, gdy wartość jest używana w dosłownym łańcuchu MySQL.] (http://security.stackexchange.com/a/35718/539) – Gumbo

+0

Nie ma potrzeby używania' isset() 'i' ! empty() 'w tym samym czasie. 'empty' działa również, jeśli dane wejściowe nie są zdefiniowane: https://stackoverflow.com/questions/4559925/why-check-both-isset-and-empty – Adam

Odpowiedz

30

Przegapiłeś to ):

if(isset($_POST['delete_id']) && !empty($_POST['delete_id'])) 
          ^--- 
3

Kwestia jest taka, że ​​ten

if(isset($_POST['delete_id'] && !empty($_POST['delete_id']))) 

powinny być

if(isset($_POST['delete_id']) && !empty($_POST['delete_id'])) 
5

Inne wykazały problem brakującej ) w wyrażeniu , ale empty() sprawdzi isset(), więc jest zbędny. Wystarczy sprawdzić empty():

if(!empty($_POST['delete_id'])) { 
0

Kwestia jest taka, że ​​ten

if(isset($_POST['delete_id'] && !empty($_POST['delete_id']))) 

powinny być

if((isset($_POST['delete_id'])) && (!empty($_POST['delete_id'])))