Vérifier couple en BDD

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - Modifié le 15 sept. 2019 à 16:51
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 16 sept. 2019 à 17:02
Bonjour,
J'ai une table avec idpers et idmanif.
Lorsque j'insére la présence des membres pour une manifestation donnée je voudrais pouvoir vérifier si le couple idpers et idmanif existe déjà.
Actuellement l'INSERT ne se fait pas. Je ne vois pas l'erreur, par contre si je supprime ma requète SELECT de la table cdc_repondre qui vérifie si l'adhérent existe tout fonctionne. Si vous pouvez m'aider s'ils vous plait.
if($submit) {

 switch($haction) {
     case 'new':
   
  if ($effectif) {
   
   $sql = "SELECT idpers, idmanif
    FROM cdc_repondre
    WHERE cdc_repondre.idpers = :idpers
    AND cdc_repondre.idmanif = :idmanif";
   $datas = array('idpers' => $idpers, 'idmanif' => $idmanif);
   $result = executeQuery($sql,$datas);
   $nb = $result->rowCount();
   if($nb == 0) {
 
    if (is_array($effectif)) { 
     foreach($effectif as $idpers) {            
 
     // Construction de la requete d'ajout
     $sql = "INSERT INTO cdc_repondre (idrepon, idpers, idmanif, reponse) VALUES (:idrepon, :idpers, :idmanif, :reponse)";
     $datas = array('idrepon' => $idrepon, 'idpers' => $idpers, 'idmanif' => $idmanif, 'reponse' => $reponse);
     $result = executeQuery($sql,$datas);
     $typenr = "enregistré";
     $reqaj = $sql;  
     }
    }
     $sql = "SELECT idmanif,dmanif FROM cdc_manifestations WHERE idmanif = :idmanif";
     $datas = array('idmanif' => $idmanif);
     $result = executeQuery($sql,$datas);
     $donnees = $result->fetch();
     $success = "<span class='success'>Un musicien pour l'effectif de la sortie du - ".dateFR("$donnees->dmanif")." - a été $typenr.</span>";
   } else {
    $erreur = "<span class='erreur'>Cet Adhérent existe déjà pour cette sortie</span>";
   }
  } else $erreur = '<span class="erreur">Tu n\'as pas sélectionné de membres !</span>';
  break;
 }
}

voici mes chekbox pour la sélection des membres
echo '<input type="checkbox" name="effectif[]" value="'.$donnees->idpers.'"> '.$donnees->nom.' '.$donnees->prenom.'<br/>'; $nbp++;

11 réponses

yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
15 sept. 2019 à 17:16
bonjour, si je comprends bien, avec le code que tu nous montres, la ligne 23 n'est pas exécutée.
et tout fonctionne bien avec un code différent, que tu ne nous montres pas.
ai-je bien compris?
par ailleurs, tu ne nous montres qu'une partie de ton code, difficile de comprendre ce que tu veux faire.
je me demande, tout de même, ce que contient $idpers en ligne 12.
je suis surpris que tu ne vérifies pas le résultat de la ligne 23.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 sept. 2019 à 18:09
Voici mon script qui fonctionne bien.
if($submit) {

	switch($haction) {
	    case 'new':
		if ($effectif) {

			if (is_array($effectif)) {	
				foreach($effectif as $idpers) {            
				
				// Construction de la requete d'ajout
				$sql = "INSERT INTO cdc_repondre (idrepon, idpers, idmanif, reponse) VALUES (:idrepon, :idpers, :idmanif, :reponse)";
				$datas = array('idrepon' => $idrepon, 'idpers' => $idpers, 'idmanif' => $idmanif, 'reponse' => $reponse);
				$result = executeQuery($sql,$datas);
				$typenr = "enregistré";
				$reqaj = $sql;  
				}
			}
				$sql = "SELECT idmanif,dmanif FROM cdc_manifestations WHERE idmanif = :idmanif";
				$datas = array('idmanif' => $idmanif);
				$result = executeQuery($sql,$datas);
				$donnees = $result->fetch();
				$success = "<span class='success'>Un musicien pour l'effectif de la sortie du - ".dateFR("$donnees->dmanif")." - a été $typenr.</span>";
				
		} else $erreur = '<span class="erreur">Tu n\'as pas sélectionné de membres !</span>';
		break;
	}
}

Donc il me reste à faire la requète qui me permet de vérifier si le couple idpers et idmanif existe.
si le couple existe message d'eereur
si le couple n'existe pas INSERT
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
15 sept. 2019 à 18:43
quand tu fais ExecuteQuery, il est important de vérifier si tout s'est bien passé. par exemple en ligne 13 de ton code partagé en #2.
dans le code que tu as partagé au départ, tu utilises $idpers en ligne 12. quel est, à ton avis, le contenu de $idpers à ce moment-là?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 sept. 2019 à 19:21
Le contenu de $idpers c'est le nom et prenom de la personne que je sélectionne via mes checkboxs.
Je n'ai pas compris lorsque tu me dit de vérifier en ligne 13 de mon second post. parce que j'ai bien mon retour comme quoi l'insert c'est bien déroulé.
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
15 sept. 2019 à 20:17
à propos de $idpers: à quelle ligne est-ce mis à jour avant la ligne 12?
comment as-tu ton retour disant que l'insert s'est bien déroulé?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 sept. 2019 à 20:26
c'est cette ligne qui me dit que tout cest bien déroulé.
$success = "<span class='success'>Un musicien pour l'effectif de la sortie du - ".dateFR("$donnees->dmanif")." - a été $typenr.</span>";

je ne comprends pas ta question, excuse moi!
"à propos de $idpers: à quelle ligne est-ce mis à jour avant la ligne 12? "
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 sept. 2019 à 20:58
Bonjour
Une fois de plus ....est-ce que ton souci concerne la requête SQL où le code PHP ?

Si c'est au niveau du code php...il aurait fallu poster dans le forum php...!!

Ensuite..tu utilises pdo... as tu activé l'affichage des erreurs PHP et pdo ?

As tu essayé de faire un print_r de tes variables pour t'assurer qu'elles sont correctement remplies ?
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
15 sept. 2019 à 21:17
cette ligne qui te dit que tout s'est bien déroulé est basée sur la valeur de $typenr. en ligne 14, tu supposes que tout s'est bien passé, alors que tu n'as pas vérifié le résultat de la ligne 13.
.
tu penses que le contenu de $idpers c'est le nom et prenom de la personne que l'utilisateur a sélectionné via ses checkboxs. dans quelle partie du code est-ce que le nom et le prénom sont mis dans idpers?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 sept. 2019 à 22:33
c'est dans mon formulaire j'ai:
echo '<input type="checkbox" name="effectif[]" value="'.$donnees->idpers.'"> '.$donnees->nom.' '.$donnees->prenom.'<br/>'; $nbp++;

le reste de mon formulaire n'a aucun intéret je crois.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 sept. 2019 à 22:16
oui j'utilise pdo et j'ai activé l'affichage d'erreurs.
alors voilà je pense que cela viens de ma requète lorsque je fait un print_r mon résultat est
Array
(
    [idmanif] => 612
    [reponse] => absent
    [haction] => new
    [effectif] => Array
        (
            [0] => 2
        )

    [submit] => Enregistrer
)

mon INSERT à bien fonctionné mais j'avais déjà une entrée dans ma BDD qui correspond à celle-ci à savoir:
idmanif => 612
mon array => 2
j'aurai du avoir mon message "erreur" afin d'éviter d'avoir ce couple de doublon.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 sept. 2019 à 22:41
Tu dis avoir un souci au niveau de ta requête...et pourtant tu ecris

mon INSERT à bien fonctionné

Une fois de plus...ta question est si bien expliquée....
A moins qu'il ne s'agisse de la requête SELECT ?
As tu, au moins, testé tes requetes DIRECTEMENT dans ta bdd ?
Histoire de voir si le souci vient réellement de tes requetes...ou de ton code php ?

Je rappelle également que la fonction rowCount ne s'utilise jamais pour une requête select.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
15 sept. 2019 à 23:41
j'ai testé ma requète dans ma BDD
SELECT COUNT(*) AS verif FROM cdc_repondre WHERE cdc_repondre.idpers = 2 AND cdc_repondre.idmanif = 612 

elle me retourne bien 1
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
15 sept. 2019 à 23:53
Et donc.. ta requête fonctionne...don souci résolu ??
Sinon...Finalement ton souci conerne un pb de requete sql (forum que tu as choisi...) ou un souci de code php ?

Et puis...cette requête... elle se trpuve où dans le code que tu nous as posté ?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 sept. 2019 à 00:12
oui au niveau sql ça àl'air d'être bon alors je pense peut-être que c'est la condition qui pose problème! car l'INSERT se fait et que la requète SELECT est bonne. Je devrais entrer dans le "else".
			$sql = "SELECT COUNT(*) AS verif
				FROM cdc_repondre
				WHERE cdc_repondre.idpers = :idpers
				AND cdc_repondre.idmanif = :idmanif";
			$datas = array('idpers' => $idpers, 'idmanif' => $idmanif);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			if($donnees->verif == 0) {
 
				if (is_array($effectif)) { 
					foreach($effectif as $idpers) {            
 
					// Construction de la requete d'ajout
					$sql = "INSERT INTO cdc_repondre (idrepon, idpers, idmanif, reponse) VALUES (:idrepon, :idpers, :idmanif, :reponse)";
					$datas = array('idrepon' => $idrepon, 'idpers' => $idpers, 'idmanif' => $idmanif, 'reponse' => $reponse);
					$result = executeQuery($sql,$datas);
					$typenr = "enregistré";
					$reqaj = $sql;  
					}
				}
				
					$sql = "SELECT idmanif,dmanif FROM cdc_manifestations WHERE idmanif = :idmanif";
					$datas = array('idmanif' => $idmanif);
					$result = executeQuery($sql,$datas);
					$donnees = $result->fetch();
					$success = "<span class='success'>Un musicien pour l'effectif de la sortie du - ".dateFR("$donnees->dmanif")." - a été $typenr.</span>";
echo "<pre>";
print_r($_POST);
echo "</pre>";
			} else {
				$erreur = "<span class='erreur'>Cet Adhérent existe déjà pour cette sortie</span>";
			}
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
16 sept. 2019 à 00:16
Tu as essayé d'afficher le contenu de la variable
$donnees->verif ??

Ps: je deplace ta question dans le bon forum (une fois de plus...)
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 sept. 2019 à 09:19
Bonjour,
Le contenu de la variable $donnees->verif me retourne 0 !
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 sept. 2019 à 10:36
Bonjour,

Je débarque un peu dans la résolution du problème, mais je constate dans ton script que tu fais ton test SELECT sur un $idpers qui n'est pas le même que dans tes requêtes INSERT... L'un est une variable unique définie on ne sait comment, l'autre est issu d'un tableau POST...
Tu es sûr que ces requêtes sont cohérentes ?

Xavier
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
16 sept. 2019 à 11:06
Hello,
Pour traduire ce que Xavier souhaite te faire comprendre (car j'ai bien peur que ça ne soit pas clair pour lachaux...) ... C'est surtout que le test se trouve en dehors de la boucle....
Et donc... $idPers ne correspond pas....
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 sept. 2019 à 14:16
Bonjour,
Merci c'est exact ma condition était en dehors de ma boule foreach et donc maintenant cela fonctionne bien. Tout était bien fait mais mal positionné. Je vous remercie de votre patience.
Cordialement.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
16 sept. 2019 à 17:02
Merci je vois que vous avez mis en résolu.
0