2014-04-21 13 views
10

Ho praticamente codificato un codice che compila un elenco di categorie dal mio database, quindi è possibile selezionare quale eliminare.Errore espressione isset

ho il problema con il codice di eliminazione che non sembra funzionare a causa dell'errore:

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 

La linea che causa questo è:

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

Il codice è vulnerabile a iniezioni SQL. ['mysql_real_escape_string' funziona solo se il valore è utilizzato in una stringa letterale MySQL.] (http://security.stackexchange.com/a/35718/539) – Gumbo

+0

Non è necessario usare' isset() 'e' ! empty() 'allo stesso tempo. 'empty' funziona anche se l'input non è definito: https://stackoverflow.com/questions/4559925/why-check-both-isset-and-empty – Adam

risposta

30

vi siete persi questo ):

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

Il problema è che questo

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

dovrebbe essere

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

Altri hanno mostrato la questione dei dispersi ) nell'espressione , ma empty() controllerà isset() quindi è ridondante. Basta controllare empty():

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

Il problema è che questo

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

dovrebbe essere

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