Formualire + recherche dans table
Résolu/Fermé
Douguidog
Messages postés
11
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
29 mai 2016
-
20 mai 2016 à 18:25
Douguidog Messages postés 11 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 29 mai 2016 - 29 mai 2016 à 00:28
Douguidog Messages postés 11 Date d'inscription mercredi 21 novembre 2012 Statut Membre Dernière intervention 29 mai 2016 - 29 mai 2016 à 00:28
A voir également:
- Formualire + recherche dans table
- Table ascii - Guide
- Table des matières word - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche adresse - Guide
- Recherche musique - Guide
4 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
20 mai 2016 à 19:02
20 mai 2016 à 19:02
Bonjour,
1 - **** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
.
2 -
1 - **** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
.
2 -
//récupération PROPRE des variables $agence = !empyt($_POST['agence']) ? $_POST['agence'] : NULL; //création du WHERE SI il y a une valeur dans $agence $where = $agence ? " WHERE Agence=? " : ""; //préparation de la requete et des variables $sql = "SELECT * FROM sessions $where"; $datas = $agence ? array($agence ) : NULL; //exécution de la requête try{ $requete = $sql->prepare ($sql); $requete->execute($datas); }catch(Exception $e){ //en cas d'erreur dans la requete echo "Erreur. " .$e->getMessage(); } //Affichage while ($donnees = $requete->fetch()){ echo $donnees['Nom']; //un des champs de la table sessions }
Douguidog
Messages postés
11
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
29 mai 2016
25 mai 2016 à 23:40
25 mai 2016 à 23:40
Bonjour,
Après avoir arrangé mon code à votre manière je n'obtiens pas de résultats :/
Voici le code en question (excusez le côté brouillon je suis un grand débutant en programmation)
Après avoir arrangé mon code à votre manière je n'obtiens pas de résultats :/
Voici le code en question (excusez le côté brouillon je suis un grand débutant en programmation)
//récupération PROPRE des variables $agence = !empty($_POST['agence']) ? $_POST['agence'] : NULL; $ddd = !empty($_POST['ddd']) ? $_POST['ddd'] : NULL; $ddf = !empty($_POST['ddf']) ? $_POST['ddf'] : NULL; $dfd = !empty($_POST['dfd']) ? $_POST['dfd'] : NULL; $dff = !empty($_POST['dff']) ? $_POST['dff'] : NULL; $statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL; //création du WHERE SI il y a une valeur dans $agence $where1 = $agence ? " WHERE Agence=? " : ""; $where2 = $ddd ? " WHERE Date_debut>=? " : ""; $where3 = $ddf ? " WHERE Date_debut<=? " : ""; $where4 = $dfd ? " WHERE Date_fin>=? " : ""; $where5 = $dff ? " WHERE Date-fin<=? " : ""; $where6 = $statut ? " WHERE Statut=? " : ""; //préparation de la requete et des variables $mysql = "SELECT * FROM sessions $where1& $where2& $where3& $where4& $where5 &$where5"; $datas[0] = $agence ? array($agence ) : NULL; $datas[1] = $ddd ? array($ddd ) : NULL; $datas[2] = $ddf ? array($ddf ) : NULL; $datas[3] = $dfd ? array($dfd ) : NULL; $datas[4]= $dff ? array($dff ) : NULL; $datas[5]= $statut ? array($statut ) : NULL; //exécution de la requête try{ $requete = $sql->prepare($mysql); $requete->execute(array($datas[0],$datas[1],$datas[2],$datas[3],$datas[4],$datas[5])); }catch(Exception $e){ //en cas d'erreur dans la requete echo "Erreur. " .$e->getMessage(); } //Affichage while ($donnees = $requete->fetch()){ echo $donnees['Nom']; //un des champs de la table sessions }
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
Modifié par jordane45 le 26/05/2016 à 00:35
Modifié par jordane45 le 26/05/2016 à 00:35
Fais donc un ECHO de ta variable $mysql
Puis testes ta requête DIRECTEMENT dans ta BDD ... tu comprendras l'erreur....
Indice : Tu as écris plusieurs fois where...
NB: Quel est cette variable $sql ? Est-ce la variable issue de ta connexion à ta BDD?
NB² : ar défaut l'affichage des erreurs pdo n'est pas active...
Il faut modifier ta connexion comme ceci :
par exemple : $bdd devient, d'après les lignes de code précédentes que tu nous as montré : $sql (drôle d'idée... mais bon.. à toi de voir)
$mysql = "SELECT * FROM sessions $where1& $where2& $where3& $where4& $where5 &$where5"; echo $mysql;
Puis testes ta requête DIRECTEMENT dans ta BDD ... tu comprendras l'erreur....
Indice : Tu as écris plusieurs fois where...
NB: Quel est cette variable $sql ? Est-ce la variable issue de ta connexion à ta BDD?
NB² : ar défaut l'affichage des erreurs pdo n'est pas active...
Il faut modifier ta connexion comme ceci :
<?php //Fichier de connexion à la bdd : cnxBdd.php try{ $bdd = new PDO("mysql:host=localhost;dbname=tabdd;charset=UTF8", 'user', 'password'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //pour activer l'affichage des erreurs pdo } catch(PDOException $e){ echo 'ERROR: ' . $e->getMessage(); }
- en remplaçant les différentes variables pour que ça correspondre à ton besoin.
par exemple : $bdd devient, d'après les lignes de code précédentes que tu nous as montré : $sql (drôle d'idée... mais bon.. à toi de voir)
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
26 mai 2016 à 00:43
26 mai 2016 à 00:43
Et puis.. tu n'avais jamais parlé d'avoir plusieurs variables dans tes conditions where..
Pour ce cas précis, tu peux utiliser ce code :
Pour ce cas précis, tu peux utiliser ce code :
//création du WHERE en fonctions des variables présentes $where = array(); //initialisation de l'array contenant les variables du where $datas = array(); //tableau contenant les valeurs passées dans le execute if($agence){ $where[] = "Agence=:agence "; $datas[] = ":agence"=>$agence; } if($ddd){ $where[] = "Date_debut>=:ddd "; $datas[] = ":ddd"=>$ddd; } //etc .... //... //Puis transformation de ces tableaux pour pouvoir les utiliser dans la requête $strWhere = !empty($where) ? "WHERE ".join(" AND ",$where) : ""; //exécution de la requête try{ $requete = $sql->prepare($mysql); $requete->execute($datas); }catch(Exception $e){ //en cas d'erreur dans la requete echo "Erreur. " .$e->getMessage(); echo "<br> REQUETE : ".$mysql; }
Douguidog
Messages postés
11
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
29 mai 2016
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
26 mai 2016 à 14:22
26 mai 2016 à 14:22
Il y a un bug "unexpected =>" au niveau des lignes 8-13-ect que je ne comprend pas, même dans mon cours c'est comme ça qu'ils remplissent un tableau....
NB: Oui $sql était la variable qui stockait ma base ( c'est ce qu'ils faisaient dans le cours sur openclassroom mais vu les codes que je suis censés utiliser (ceux que tu m'as donné) j'ai l'impression de n'avoir rien appris x) )
NB: Oui $sql était la variable qui stockait ma base ( c'est ce qu'ils faisaient dans le cours sur openclassroom mais vu les codes que je suis censés utiliser (ceux que tu m'as donné) j'ai l'impression de n'avoir rien appris x) )
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
Douguidog
Messages postés
11
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
29 mai 2016
26 mai 2016 à 14:46
26 mai 2016 à 14:46
Un oubli de ma part:
A remplacer par :
Idemn sur les autres
$datas[] = ":ddd"=>$ddd;
A remplacer par :
$datas[] =array( ":ddd"=>$ddd);
Idemn sur les autres
Douguidog
Messages postés
11
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
29 mai 2016
Modifié par Douguidog le 28/05/2016 à 01:05
Modifié par Douguidog le 28/05/2016 à 01:05
AAAAAAAAAAH Cette page va me rendre fou j'arrive pas à croire que je galère autant pour une si petite partie du site, je crains pour la suite..
Si vous pouviez juste encore m'indiquer le problème ce serait super parce que là je sèche :/
Voici le code :
Et voilà les erreurs :
array to string conversion à la ligne de $bdd->prepare($mysql);
et
Erreur. SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
REQUETE : SELECT * FROM sessions WHERE Agence=:agence
Si vous pouviez juste encore m'indiquer le problème ce serait super parce que là je sèche :/
Voici le code :
<?php //Fichier de connexion à la bdd : cnxBdd.php try{ $bdd = new PDO("mysql:host=localhost;dbname=Projet_formation;charset=UTF8", 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //pour activer l'affichage des erreurs pdo } catch(PDOException $e){ echo 'ERROR: ' . $e->getMessage(); } //récupération PROPRE des variables $agence = !empty($_POST['agence']) ? $_POST['agence'] : NULL; $ddd = !empty($_POST['ddd']) ? $_POST['ddd'] : NULL; $ddf = !empty($_POST['ddf']) ? $_POST['ddf'] : NULL; $dfd = !empty($_POST['dfd']) ? $_POST['dfd'] : NULL; $dff = !empty($_POST['dff']) ? $_POST['dff'] : NULL; $statut = !empty($_POST['statut']) ? $_POST['statut'] : NULL; //création du WHERE en fonctions des variables présentes $where = array(); //initialisation de l'array contenant les variables du where $datas = array(); //tableau contenant les valeurs passées dans le execute if($agence){ $where[] = "Agence=:agence "; $datas[] = array(":agence"=> $agence); } if($ddd){ $where[] = "Date_debut>=:ddd "; $datas[] = array(":ddd"=>$ddd); } if($ddf){ $where[] = "Date_debut<=:ddf "; $datas[] = array(":ddf"=>$ddf); } if($ddd){ $where[] = "Date_fin>=:dfd "; $datas[] = array(":dfd"=>$dfd); } if($ddd){ $where[] = "Date_fin <=:dff "; $datas[] = array(":dff"=>$dff); } if($statut){ $where[] = "Statut>=:statut "; $datas[] = array(":statut"=>$statut); } //Puis transformation de ces tableaux pour pouvoir les utiliser dans la requête $strWhere = !empty($where) ? "WHERE ".join(" AND ",$where) : ""; $mysql = 'SELECT * FROM sessions '.$strWhere.''; //exécution de la requête try{ $requete = $bdd->prepare($mysql); $requete->execute($datas); }catch(Exception $e){ //en cas d'erreur dans la requete echo "Erreur. " .$e->getMessage(); echo "<br> REQUETE : ".$mysql;} ?>
Et voilà les erreurs :
array to string conversion à la ligne de $bdd->prepare($mysql);
et
Erreur. SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
REQUETE : SELECT * FROM sessions WHERE Agence=:agence
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
28 mai 2016 à 02:20
28 mai 2016 à 02:20
Commence par faire afficher les variables pour voir si c'est bon.
Par exemple :
PS: N'oublie pas de mettre la ligne de code suivante AU DEBUT de ta page php:
PS² : Pourquoi colles tu le code de connexion à ta BDD dans ta page.... alors que le commentaire indique bien : FICHIER de connexion à la BDD.....
Reprends les discussions précédentes que nous avons eu.... et PLACE le code de connexion à ta BDD ..... DANS UN FICHIER A PARTR pour ne pas avoir à le copier/coller DANS TOUTES tes pages php.
Par exemple :
//$where: echo "<pre>where:<br>"; print_r($where); echo "</pre><br>"; //Puis transformation de ces tableaux pour pouvoir les utiliser dans la requête $strWhere = !empty($where) ? "WHERE " . join(" AND ",$where) : ""; //$strWhere : echo "<pre>strWhere : ".$strWhere ; echo "</pre><br>"; //$datas: echo "<pre>datas:<br>"; print_r($datas); echo "</pre><br>"; $mysql = "SELECT * FROM sessions ".$strWhere ; //exécution de la requête try{ $requete = $bdd->prepare($mysql); $requete->execute($datas); }catch(Exception $e){ //en cas d'erreur dans la requete echo "<br>Erreur : " .$e->getMessage(); echo "<br> REQUETE : ".$mysql; echo "<pre>datas:<br>"; print_r($datas); echo "</pre><br>"; } ?>
PS: N'oublie pas de mettre la ligne de code suivante AU DEBUT de ta page php:
error_reporting(E_ALL);
PS² : Pourquoi colles tu le code de connexion à ta BDD dans ta page.... alors que le commentaire indique bien : FICHIER de connexion à la BDD.....
Reprends les discussions précédentes que nous avons eu.... et PLACE le code de connexion à ta BDD ..... DANS UN FICHIER A PARTR pour ne pas avoir à le copier/coller DANS TOUTES tes pages php.
Douguidog
Messages postés
11
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
29 mai 2016
29 mai 2016 à 00:28
29 mai 2016 à 00:28
Bon finalement j'y suis arrivé mais j'ai du m'y prendre complètement différemment (je pigeais pas trop ce que tu voulais faire avec tes tableaux même si je me doute que ta solution doit mieux marcher à des niveaux plus élevés, bref) voilà comment je m'y suis pris au final :
Merci beaucoup pour ton aide ! à la prochaine sur un autre post
function fAND($chaine,$compteur) { if ($compteur>0){ return" AND "; } } $chaine ="SELECT * FROM sessions"; $compteur=0; if (!empty($agence)OR!empty($statut)OR!empty($ddd)) { $chaine=$chaine." WHERE "; if ($agence) { $chaine = $chaine.'Agence="'.$agence.'"'; $compteur= $compteur+1; } if ($statut) { $chaine = $chaine. fAND($chaine,$compteur); $chaine = $chaine.'Statut="'.$statut.'"'; $compteur= $compteur+1; } if ($ddd) { $chaine = $chaine. fAND($chaine,$compteur); $chaine = $chaine.'Date_debut>="'.$ddd.'"'.' AND Date_Debut<="'.$ddf.'"'; $compteur= $compteur+1; } if ($dfd) { $chaine = $chaine. fAND($chaine,$compteur); $chaine = $chaine.'Date_fin>="'.$dfd.'"'.' AND Date_fin<="'.$dff.'"'; $compteur= $compteur+1; } } echo $chaine.'</br>'; $requete = $bdd->query($chaine);
Merci beaucoup pour ton aide ! à la prochaine sur un autre post