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
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


A voir également:

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
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 -
//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
}


0
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
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)

//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
}
0
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
Fais donc un ECHO de ta variable $mysql
$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)
0
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
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 :
//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;
}
0
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
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) )
0
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
Un oubli de ma part:
  $datas[] = ":ddd"=>$ddd;

A remplacer par :
  $datas[] =array( ":ddd"=>$ddd);


Idemn sur les autres
0
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
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 :

<?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
0
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
Commence par faire afficher les variables pour voir si c'est bon.
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.
0
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
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 :
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
0