2010-07-31 2 views
2

Je suis en train de mettre ce,MYSQL supprimer où la valeur = plusieurs valeurs POST

check_box=147&check_box=148&check_box=146 etc.. 

dans

$delete_selected = $connection->real_escape_string($_POST['check_box']) 

$sql = "DELETE FROM categories WHERE cat_id = '$delete_selected'"; 

mais il ne supprime que la première valeur de check_box. Y a-t-il un moyen de parcourir toutes les valeurs?

+1

C'est parce que votre "check_box" variabl e n'a que la première case à cocher sélectionnée pour la valeur. Je ne connais pas beaucoup PHP, mais si c'est PHP, la réponse est là. – MPelletier

+0

Suggère de convertir toutes les valeurs de check_box entrantes en 'IN()'. Toute réponse venant avec cette solution obtiendrait mon vote. –

+0

Avez-vous une influence sur le nom des champs POST? C'est à dire. pouvez-vous les faire par exemple? 'check_box []' au lieu de 'checkbox'? php va analyser le premier dans un tableau alors que dans la dernière forme, seule la dernière valeur est stockée. – VolkerK

Répondre

6

Vous devez changer votre poste vars avoir [], à savoir checkbox[]=. Une fois que ce fixe, sur le back-end ...

Considérant que vous neeed pour échapper à toute valeur, faire quelque chose comme ceci:

$clean_values = array(); 
foreach($_POST['check_box'] as $value){ 
    $clean_values[] = $connection->real_escape_string($value); 
} 

$sql = 'DELETE FROM categories WHERE cat_id in ('.implode(',',$clean_values).')'; 

BONUS PHP5.3 RÉPONSE:

array_walk($_POST['check_box'],function(&item) use($connection){ 
    $item = $connection->real_escape_string($item); 
}); 
$sql = 'DELETE FROM categories WHERE cat_id in ('.implode(',',$_POST['check_box']).')'; 
+0

+1: "implode" effectuer le travail ici fait moins de code! –

+0

merci Mike! bon code! – vii

2

essayer

$sql = "DELETE FROM categories WHERE cat_id in '($delete_selected)'"; 

que je peux avoir vissé le php. la requête résultante doit liik comme

DELETE FROM categories WHERE cat_id in ('cat1', 'cat2', ...) 
+0

+1: Vous avez raison, mais l'OP doit également vérifier le PHP pour obtenir ces valeurs pour remplir la clause IN. –

1

Exemple autonome pour jouer avec ...

<html> 
    <head><title>...</title></head> 
    <body> 
    <form method="post" action="?"> 
     <p> 
     <!-- php will parse post fields like check_box[]=xyz as an array, appending new elements to $_POST['check_box'] --> 
     <input type="checkbox" name="check_box[]" id="c1" value="140" /><label for="c1">140</label><br /> 
     <input type="checkbox" name="check_box[]" id="c2" value="141" /><label for="c2">141</label><br /> 
     <input type="checkbox" name="check_box[]" id="c3" value="142" /><label for="c3">142</label><br /> 
     <input type="checkbox" name="check_box[]" id="c4" value="143" /><label for="c4">143</label><br /> 
     <input type="checkbox" name="check_box[]" id="c5" value="144" /><label for="c5">144</label><br /> 
     <input type="submit" /> 
     </p> 
    </form> 
<?php 
if (isset($_POST['check_box']) && is_array($_POST['check_box'])) { 
    echo '<pre> _POST='; var_dump($_POST); echo '<pre>'; 

    // approach #1: treat ids as numbers. Keep the value range of php's integers and MySQL numeric fields in mind 
    // make sure the elements really are integers 
    $params = array_map('intval', $_POST['check_box']); 
    // join the elements to one string like "1,2,3" 
    $params = join(', ', $params); 
    // use the IN operator in your WHERE-clause 
    $sql = "DELETE FROM xyz WHERE cat_id IN ($params)"; 
    echo 'sql1 = ', $sql, "<br />"; 
    // mysql_query($sql, $mysql) or die(mysql_error()); 

    // approach #2: treat ids as strings. 
    // you need a database connection for mysql_real_escape_string() 
    $mysql = mysql_connect('localhost', 'localonly', 'localonly') or die(mysql_error()); 
    mysql_select_db('test', $mysql) or die(mysql_error()); 

    // each element has to be escaped and put into single quotes 
    $params = array_map(
    function($e) use ($mysql) { 
     return "'".mysql_real_escape_string($e, $mysql)."'"; 
    }, 
    $_POST['check_box'] 
); 
    // again join them, "'1','2','x'" 
    $params = join(', ', $params); 
    // IN operator in WHERE-clause 
    $sql = "DELETE FROM xyz WHERE cat_id IN ($params)"; 
    echo 'sql2 = ', $sql, "<br />"; 
    // mysql_query($sql, $mysql) or die(mysql_error()); 
} 
?> 
    </body> 
</html> 
+0

wow merci pour l'exemple détaillé! Très informatif – vii