[RESOLU] if qui ne fonctionne pas

Eléphanteau du PHP | 31 Messages

21 août 2023, 01:13

je voudrai comparer des valeur de variable dans une fonction if() avec ce code
//conte le nombre de zone de text avant insertion dan la bdd
    if(count($texte)) {
        for($i = 0; $i < count($texte); $i++) {
		
           //put that into your SQL inserts w/e.
						$requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste");
						while($data = mysqli_fetch_array($requete)) {
							$Id_poste =$data['Id_poste'];
							$Nom_poste=$data['Nom_poste'];
							//}
						$Id_poste=$Id_poste + 1;
						$texte[$i] = strtoupper($texte[$i]);
						$Nom_poste = strtoupper($Nom_poste);
						//echo $Nom_poste."<br>";
				//on verifie si les postes ne sont pas deja existant
				if ($texte[$i] === $Nom_poste) {
					echo "$texte[$i] et $Nom_poste sont deja present<br>";
				} else {
					//echo $Nom_poste."deja present<br>";
					//$texte[$i] = strtoupper($texte[$i]);
					$Ins_poste = "INSERT INTO poste VALUES ('$Id_poste', '$texte[$i]', '$Nbr_com[$i]', '$circuit')";
					//echo $Ins_poste;
					mysqli_query($link, $Ins_poste);
					//echo "ajouter".$texte[$i]."<br>";
						}
				}
        }
    }
tout fonctionne a par la condition if qui quoi que je rentre dans me champ me passe la requete insert meme si cela me dit que
$texte[$i] et $Nom_poste sont deja present.
alors que je voudrai que ca passe a la suivante sans l inserer dans ma table
une piste?

Mammouth du PHP | 2581 Messages

21 août 2023, 01:45

https://www.php.net/manual/fr/function.in-array.php en ayant au préalable mis les postes dans un tableau.

Eléphanteau du PHP | 31 Messages

21 août 2023, 04:13

bonjour

j ai fait ceci mais ca me donne le meme resultat
//conte le nombre de zone de text avant insertion dan la bdd
    if(count($texte)) {
        for($i = 0; $i < count($texte); $i++) {
		
           //put that into your SQL inserts w/e.
						$requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste");
						while($data = mysqli_fetch_array($requete)) {
							$Id_poste =$data['Id_poste'];
							$Nom_poste=$data['Nom_poste'];
							//}
						$Id_poste=$Id_poste + 1;
						$texte[$i] = strtoupper($texte[$i]);
						$Nom_poste = strtoupper($Nom_poste);
						//echo $Nom_poste."<br>";
				//on verifie si les postes ne sont pas deja existant
				$a = array($texte[$i]);
				//if ($texte[$i] === $Nom_poste) {
				if (in_array($Nom_poste, $a, true)) {
					echo "$a et $Nom_poste sont deja present<br>";

				} else {
					//echo $Nom_poste."deja present<br>";
					//$texte[$i] = strtoupper($texte[$i]);
					$Ins_poste = "INSERT INTO poste VALUES ('$Id_poste', '$texte[$i]', '$Nbr_com[$i]', '$circuit')";
					//echo $Ins_poste;
					mysqli_query($link, $Ins_poste);
					//echo "ajouter".$texte[$i]."<br>";
						}
				}
        }
    }
ca me dit toujours que c est présent mais ca passe quand même dans la partie else pour l insert dans la base.

Mammouth du PHP | 2581 Messages

21 août 2023, 08:31

"en ayant au préalable mis les postes dans un tableau"
ce n'est pas ce qui est fait.
il faut mettre tous les postes dans un tableau, ensuite faire la boucle for

Eléphanteau du PHP | 31 Messages

21 août 2023, 11:49

j ai tester avec c code
if(count($texte)) {
		$requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste");
						while($data = mysqli_fetch_array($requete)) {
							$Id_poste =$data['Id_poste'];
							$Nom_poste=$data['Nom_poste'];
							//}
		$a = array($data['Nom_poste']);
								}
        for($i = 0; $i < count($texte); $i++) {
		
           //put that into your SQL inserts w/e.
						
						$Id_poste=$Id_poste + 1;
						$texte[$i] = strtoupper($texte[$i]);
						$Nom_poste = strtoupper($Nom_poste);
						//echo $Nom_poste."<br>";
				//on verifie si les postes ne sont pas deja existant
				
				//if ($texte[$i] === $Nom_poste) {
				if (in_array($texte[$i], $a, true)) {
					echo "$texte[$i] et $Nom_poste sont deja present<br>";

				} else {
					//echo $Nom_poste."deja present<br>";
					//$texte[$i] = strtoupper($texte[$i]);
					$Ins_poste = "INSERT INTO poste VALUES ('$Id_poste', '$texte[$i]', '$Nbr_com[$i]', '$circuit')";
					//echo $Ins_poste;
					mysqli_query($link, $Ins_poste);
					//echo "ajouter".$texte[$i]."<br>";
						}
				}
       // }
    }
ca fonctionne a 50% je dirai ca me prend seulement la derniere valeur de mon champ "nom_poste" de ma table
et si je fait un print_r($a);
ca me dit ceci
Array ( [0] => Poste1 ) Array ( [0] => Poste2 ) Array ( [0] => Poste3 ) ....
je pense que mon probleme du coup viendrai du faite que j ai toujours Array[0] non?
je suis complètement perdu la du coup

Mammouth du PHP | 1949 Messages

21 août 2023, 13:40

là ce que tu fais c'est récupérer tous les postes et à chaque poste tu crée un tableau du coup chaque poste écrase le précédent.

il faut créer ton tableau vide et le remplir dans ta boucle
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 31 Messages

21 août 2023, 14:27

j ai modifer mon code par celui-ci
    if(count($texte)) {
			$requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste WHERE Id_circuit=$circuit");
            while($data = mysqli_fetch_array($requete)) {
              $Id_poste =$data['Id_poste'];
              $Nom_poste=$data['Nom_poste'];
              //}
			$a = array($data['Nom_poste']);
			//print_r($data);
			
                //}
        for($i = 0; $i < count($texte); $i++) {
    
            $Id_poste=$Id_poste + 1;
            $texte[$i] = strtoupper($texte[$i]);
            $Nom_poste = strtoupper($Nom_poste);
            
        //on verifie si les postes ne sont pas deja existant
        
        //if ($texte[$i] == $Nom_poste) {
        if (in_array($texte[$i], $a, true)) {
          echo "$texte[$i] est deja present<br>";

        } else {
          $Ins_poste = "INSERT INTO poste VALUES ('$Id_poste', '$texte[$i]', '$Nbr_com[$i]', '$circuit')";
          //echo $Ins_poste;
          mysqli_query($link, $Ins_poste);
          //echo "ajouter".$texte[$i]."<br>";
				}
			}
        }
    }
ca m affiche bien le echo des zone déjà présente dans ma table mais ca passe aussi par le } else {

Mammouth du PHP | 2581 Messages

21 août 2023, 16:22

il faut commencer par arriver à avoir tous les noms de postes dans une variable de type tableau.
tant que print_r($a); ne retournera pas ce qu'il faut, pas la peine de s'attaquer à la suite.

Eléphanteau du PHP | 31 Messages

21 août 2023, 16:49

si je fait ceci
           $requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste WHERE Id_circuit=$circuit");
            while($data = mysqli_fetch_array($requete)) {
              $Id_poste =$data['Id_poste'];
              $Nom_poste=$data['Nom_poste'];
              //}
			$a = array($data['Nom_poste']);
			print_r($a);
                }
le print_r me donne bien
Array ( [0] => Poste1 ) Array ( [0] => Poste2 ) Array ( [0] => Poste3 )...
donc tout mes Nom_poste mais Array[0] du coup ca ecrase le tout pour garder le dernier
et si je fait ceci
           $requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste WHERE Id_circuit=$circuit");
            while($data = mysqli_fetch_array($requete)) {
              $Id_poste =$data['Id_poste'];
              $Nom_poste=$data['Nom_poste'];
              }
			$a = array($data['Nom_poste']);
			print_r($a);
               // }
ca me sort ceci
Array ( [0] => )
c est un peut le bordel je trouve quand meme juste pour lui dire si ca = ca alors tu fait rien sinon tu insert d ou la condition if que j avai mis.
je suis obliger de refaire une requete count() pour mettre ma requete $requete dans une boucle for aussi?

Mammouth du PHP | 2581 Messages

21 août 2023, 16:56

déjà, commencer par mettre un seul
print_r($a);
après la boucle.
ensuite, connaitre la base de la manipulation des tableaux en php avant de vouloir faire un vrai projet permet ensuite de perdre beaucoup moins de temps.

Eléphanteau du PHP | 31 Messages

21 août 2023, 17:37

bon après une bonne prise de tête personnel :lol: je pense avoir résolut mon problème avec votre aide surtout |*()
du coup j ai mis ce code.
if(count($texte)) {
	    $requete = mysqli_query($link, "SELECT Id_poste, Nom_poste FROM poste WHERE Id_circuit=$circuit");
            while($data = mysqli_fetch_array($requete)) {
              $Id_poste =$data['Id_poste'];
              //$Nom_poste=$data['Nom_poste'];
	            $a[] = $data['Nom_poste'];
                }		
        for($i = 0; $i < count($texte); $i++) {
            $Id_poste = $Id_poste + 1;
            $texte[$i] = strtoupper($texte[$i]);
            $Nom_poste = strtoupper($data['Nom_poste']);
            
        //on verifie si les postes ne sont pas deja existant
        if (in_array($texte[$i], $a, true)) {
          //echo "$texte[$i] est deja present<br>";
        } else {
          $Ins_poste = "INSERT INTO poste VALUES ('$Id_poste', '$texte[$i]', '$Nbr_com[$i]', '$circuit')";
          mysqli_query($link, $Ins_poste);
				}
			}
    }
et du coup ca a l air de fonctionné comme ca.
merci a vous or et Spols promit je vai essayer d arrêter de vous embêter :D

Mammouth du PHP | 1949 Messages

21 août 2023, 18:24

C'est pas mal.

Et pour éviter tout erreur au cas où la requète ne retourne rien, tu devrais déclarer ton tableau $a vide avant la boucle
$a = array();
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 2581 Messages

21 août 2023, 18:30

$Id_poste = $Id_poste + 1;
si $Id_poste n'a pas une valeur avant
if(count($texte)) {
alors c'est mauvais.
l'id de la table poste devrait être en auto-incrément, et le champ id pas présent dans la requête sql insert.

ensuite, des intitulés de poste vont entrainer une erreur, aucune insertion en base de données.

Eléphanteau du PHP | 31 Messages

21 août 2023, 18:54

merci de infos Spol

en ce qui concerne l id dans ma table poste il et en auto-incremet mais ca fonctionne pas du coup je lui rajoute +1 a chaque fois.
je verrais ca plus tard du coup