Formualire + recherche dans table
Résolu
Douguidog
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Douguidog Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Douguidog Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à envoyer les données d'un formulaire à une autre page qui recherchera ces données dans une base, mais je ne parviens pas à afficher les entrées quand les champs du formulaire envoyé sont vides, je n'obtiens de résultat que quand le champ entré est exactement ce qui est inscrit dans la base
exemples :
page formulaire :
<form method="post" action="traitement.php">
Agence <input type="text" name="agence"/>
</form>
page traitement:
$requete = $sql->prepare ('SELECT * FROM sessions WHERE Agence=?');
$requete->execute(array($_POST['agence']));
while ($donnees = $requete->fetch())
{
echo $donnees['Nom']; //un des champs de la table sessions
}
au fait si vous avez une méthode plus courte pour rechercher une variable dans une base ou pour afficher les entrées je suis preneur
Je cherche à envoyer les données d'un formulaire à une autre page qui recherchera ces données dans une base, mais je ne parviens pas à afficher les entrées quand les champs du formulaire envoyé sont vides, je n'obtiens de résultat que quand le champ entré est exactement ce qui est inscrit dans la base
exemples :
page formulaire :
<form method="post" action="traitement.php">
Agence <input type="text" name="agence"/>
</form>
page traitement:
$requete = $sql->prepare ('SELECT * FROM sessions WHERE Agence=?');
$requete->execute(array($_POST['agence']));
while ($donnees = $requete->fetch())
{
echo $donnees['Nom']; //un des champs de la table sessions
}
au fait si vous avez une méthode plus courte pour rechercher une variable dans une base ou pour afficher les entrées je suis preneur
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 photo - Guide
- Table des caractères - Guide
4 réponses
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 }
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 }
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)
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; }
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) )
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
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.
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