Vérifier couple en BDD [Résolu]

Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
-
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++;
Afficher la suite 

11 réponses

Messages postés
8767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 octobre 2019
436
0
Merci
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.
Commenter la réponse de yg_be
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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
yg_be
Messages postés
8767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 octobre 2019
436 -
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à?
Commenter la réponse de LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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é.
yg_be
Messages postés
8767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 octobre 2019
436 -
à 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é?
Commenter la réponse de LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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? "
Commenter la réponse de LaChaux78
Messages postés
26551
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
1840
0
Merci
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 ?
Commenter la réponse de jordane45
Messages postés
8767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 octobre 2019
436
0
Merci
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?
LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3 -
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.
Commenter la réponse de yg_be
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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.
jordane45
Messages postés
26551
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
1840 -
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.
Commenter la réponse de LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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
jordane45
Messages postés
26551
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
1840 -
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é ?
Commenter la réponse de LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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>";
			}
jordane45
Messages postés
26551
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
1840 -
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...)
Commenter la réponse de LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
Bonjour,
Le contenu de la variable $donnees->verif me retourne 0 !
Reivax962
Messages postés
3485
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
14 octobre 2019
915 -
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
jordane45
Messages postés
26551
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
1840 > Reivax962
Messages postés
3485
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
14 octobre 2019
-
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....
Commenter la réponse de LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3
0
Merci
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.
LaChaux78
Messages postés
395
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
13 octobre 2019
3 -
Merci je vois que vous avez mis en résolu.
Commenter la réponse de LaChaux78