Foreach avec une condition

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Foreach avec une condition

par guigui69 » 30 oct. 2008, 16:31

Regarde ci-dessus , c'est cela j'ai mis entre [] l'ID de ma table en question.

Non?

Guigui69

par mere-teresa » 30 oct. 2008, 16:29

Comme tu le vois dans ton var_dump(), ton tableau $_POST['del'] contient toujours la même valeur :

Code : Tout sélectionner

[del] => Array ( [0] => 1 [1] => 1 )
Je te propose de mettre dans le HTML comme value, l'id de ce que tu veux effacer.
name="del[3]" par exemple

par guigui69 » 30 oct. 2008, 16:21

Pourrais-tu m'expliquer, car dans ma page le input del est deja créer pour celui que tu ma indiqué. Et cela ne fonctionne pas.


merci

guigui69

--------------------------

Maj j'ai rajouter ceci dans la contrustion du tableau html:
echo '<td><select name="code_m['.$liste["num_rctt"].']">';
		while ( $list2 = mysql_fetch_array( $query2 ) ) {
		echo '<option value="'.$list2["code_m"].'"'; if($liste["code_m"] == $list2["code_m"]) { echo "SELECTED";}
		echo '>'.$list2['nom_m'].'</option>';
		}
echo "</SELECT></td>";
mysql_free_result($query2);
echo '<td><input type="text" name="qte_m['.$liste["num_rctt"].']" value ="'.$liste["qte_m"].'"></td>';
echo '<td><input type="checkbox" value="1" name="del['.$liste["num_rctt"].']"></td>';	
echo '</tr>';
}
echo '</table>';
echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />';
echo '</form>';
Avec le foreach comme ceci:
foreach ($_POST['num_rctt'] as $key => $num_rctt)
{
 if(isset($_POST['del'][$key]) && ($_POST['del'][$key]==1) )
 {
 }
 else
 {
 $_POST['del'][$key] == 0;
 }
 
if($_POST['del'][$key]==1)
{
echo 'DELETRE MATIERE';
//echo $_POST['suppression'][$key];
   //$sql = "DELETE FROM recette WHERE num_rctt = '".$_POST['num_rctt'][$key]."'";
	// echo '<br>';
    //echo $sql;
	//$query2=mysql_query($sql) or die(mysql_error() . $sql); 
}
else
{ 

$_POST['qte_m'][$key] = str_replace(",",".",$_POST['qte_m'][$key]);

     $sql = "UPDATE recette SET  code_m = '".$_POST['code_m'][$key]."', qte_m = '".$_POST['qte_m'][$key]."' WHERE num_rctt = '".$_POST['num_rctt'][$key]."'";
	 echo '<br>';
    echo $sql;
Est-ce correcte?

guigui69

par mere-teresa » 30 oct. 2008, 15:22

Il vaudrait mieux, pour gérer tes cases à cocher, regarder si la valeur choisie est dans le tableau.

input type="checkbox" name="del[]" value="1"

en PHP si c'est coché tu auras

$_POST['del'][0] // contient 1 si la case est cochée
//sinon
$_POST['del'][0] n'existe pas !

par guigui69 » 30 oct. 2008, 14:54

Merci j'ai corrigé cette erreur mais cela ne change rien,


J'ai demande de supprimé 2 trucs, celui avec l'id 502 et l'autre avec l'id 512.

Voila ce qu'il se passe quand j'excecute:

Code : Tout sélectionner

DELETRE MATIERE DELETRE MATIERE UPDATE recette SET code_m = '17', qte_m = '1.00' WHERE num_rctt = '501' UPDATE recette SET code_m = '5', qte_m = '1.00' WHERE num_rctt = '502' UPDATE recette SET code_m = '77', qte_m = '2.00' WHERE num_rctt = '512' Array ( [num_rctt] => Array ( [0] => 499 [1] => 500 [2] => 501 [3] => 502 [4] => 512 ) [code_m] => Array ( [0] => 16 [1] => 17 [2] => 17 [3] => 5 [4] => 77 ) [qte_m] => Array ( [0] => 1.00 [1] => 1.00 [2] => 1.00 [3] => 1.00 [4] => 2.00 ) [del] => Array ( [0] => 1 [1] => 1 ) [ok] => Envoyer
En faite les supprimer cocher ne se mettre sur le bon ID.

Comment corriger ceci ? Faudrait-il que je corrige le format du tableau array?

Merci d'avance pour votre aide.

guigui69

par stopher » 29 oct. 2008, 18:38

Salut ,

Attention , pour vérifier une égalité , il faut deux "=" sinon , la condition est toujours vrai !

Pas ok
if( $_POST['del'][$key] = 1 ) 
ok
if( $_POST['del'][$key] == 1 ) 
Petit rappelici

Foreach avec une condition

par guigui69 » 29 oct. 2008, 18:30

Bonsoir à tous,


Je cherche de l'aide pour utiliser une condition (if) dans un foreach

code:
foreach ($_POST['num_rctt'] as $key => $num_rctt)
{
if($_POST['del'][$key]=1)
{
echo 'DELETRE MATIERE';
//echo $_POST['suppression'][$key];
   //$sql = "DELETE FROM recette WHERE num_rctt = '".$_POST['num_rctt'][$key]."'";
	// echo '<br>';
    //echo $sql;
	//$query2=mysql_query($sql) or die(mysql_error() . $sql); 
}
else
{ 

$_POST['qte_m'][$key] = str_replace(",",".",$_POST['qte_m'][$key]);

     $sql = "UPDATE recette SET  code_m = '".$_POST['code_m'][$key]."', qte_m = '".$_POST['qte_m'][$key]."' WHERE num_rctt = '".$_POST['num_rctt'][$key]."'";
	 echo '<br>';
    echo $sql;
	//$query2=mysql_query($sql) or die(mysql_error() . $sql); 
	}
} 
html//php
echo '<td><input type="text" name="num_rctt[]" value ="'.$liste["num_rctt"].'" readonly size="5" maxlenght="5"></td>';
$sql2 = "SELECT code_m, nom_m FROM matiere;";
$query2 = mysql_query($sql2) or die('erreur');
//echo $sql2;
echo '<td><select name="code_m[]">';
		while ( $list2 = mysql_fetch_array( $query2 ) ) {
		echo '<option value="'.$list2["code_m"].'"'; if($liste["code_m"] == $list2["code_m"]) { echo "SELECTED";}
		echo '>'.$list2['nom_m'].'</option>';
		}
echo "</SELECT></td>";
mysql_free_result($query2);
echo '<td><input type="text" name="qte_m[]" value ="'.$liste["qte_m"].'"></td>';
echo '<td><input type="checkbox" value="1" name="del[]"></td>';	
echo '</tr>';
}
echo '</table>';
echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />';
echo '</form>';
Le problème, c'est que j'arrive à faire fonctionner mon IF dans le foreach , je voudrait lui dire que si suppr est coché dans le tableau cela execute une requete(DEL) sinon une autre requete (UPDATE)

Exemple j'en ai coché qu'un a supprimer et ben j'ai 5 ligne DELETRE MATIERE. Alors que normalement je devrait en avoir une seul.

Quel erreur j'ai commise?

Merci

guigui69

edit mere-teresa : utilise les balise
 plutôt que [code][/color]