8719 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Je crée un formulaire simple avec nom prenom et année de naissance
Jaimerai afficher les resultats de cette recherche

Jai essayé plusieurs codes mais ca fonctionne pas et il n y a aucun messages d erreurs
est ce que quelqun sait si je suis sur la bonne voie ?

<?php

$serveur = "";
$dbname = "";
$user = "";
$pass = "";

$nom = $_POST["Nom"];
$prenom = $_POST["Prenom"];
$naissance = $_POST["Naissance"];


try{
//On se connecte à la BDD
$dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,$pass);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//On insère les données reçues
$sth = $dbco->prepare("SELECT * FROM table WHERE `Nom` LIKE '$nom' AND `Prenom` LIKE '$prenom' AND `Naissance` LIKE '$naissance'");
$sth->bindParam(':nom',$nom);
$sth->bindParam(':prenom',$prenom);
$sth->bindParam(':naissance',$naissance);
$sth->execute();


}
catch(PDOException $e){
echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
}


echo '<table>';
while ($donnees = $sth->fetch()) {


echo '<td><h8>' . $donnees['Nom'] . '</h8></td>';
echo '<td><h8>' . $donnees['Prenom'] . '</h8></td>';

}

echo '</table>';
Salut

Si tu fais un petit

var_dump($sth->fetch());die; le résultat est "null" ?
je reviens a mon sujet avec ce code a present. Je souhaite toujours trouver les lignes de ma base correspondantes aux trois criteres que sont nom prenom et annee de naissance.
Jai essaye var dump en vain
Voici le message d erreur puis le code :


Recoverable fatal error: Object of class PDOStatement could not be converted to string
ligne : echo $resultats


$host = "";
$dbname = "";
$username = "";
$password = "";

$nom = $_GET["nom"];
$prenom = $_GET["prenom"];
$naissance = $_GET["naissance"];

$connexion = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
$connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM LNS2020 WHERE Nom = '.$nom.' AND Prenom = '.$prenom.' ";
$resultats = $connexion->prepare($sql);

$prenom = $_GET["prenom"];
$resultats->bindParam(":nom", $nom);
$resultats->bindParam(":prenom", $prenom);
$resultats->execute();

echo $resultats
$resultat est un tableau, tu peux pas "l'écho" il faut utiliser var_dump.
et SURTOUT il faut le fetch Smiley smile
Modifié par JENCAL (25 Feb 2020 - 10:22)
merci pour ton aide deja
jai essaye var dump mais il me dit "bool(false)"

$sql = "SELECT * FROM tab WHERE Nom = '.$nom.' AND Prenom = '.$prenom.' ";
$resultats = $connexion->prepare($sql);
$nom = $_GET["nom"];
$prenom = $_GET["prenom"];
$resultats->bindParam(":nom", $nom);
$resultats->bindParam(":prenom", $prenom);
$resultats->execute();

var_dump($resultats->fetch());
die;
essaye ceci



$sql = "SELECT * FROM tab WHERE Nom = '.$nom.' AND Prenom = '.$prenom.' ";
$resultats = $connexion->prepare($sql);
$nom = $_GET["nom"];
$prenom = $_GET["prenom"];
$resultats->bindParam(":nom", $nom);
$resultats->bindParam(":prenom", $prenom);
$resultats->execute();
$results = $resultats->fetchAll();

var_dump( $_GET["prenom"], $_GET["nom"], $results );


il y a trois demande de variable dans le var_dump, ce qu'il y a dans le get et le fetchall
Ah oui ca m aide beaucoup de comprendre cela
cependant voici le message a present : NULL NULL array(0) { }

Dans tab jai bien le nom et prenom demande. Voci mon formulaire au cas ou :

<FORM action="*.php" method="GET">

<LABEL for="prenom">Prénom : </LABEL>
<INPUT type="text" id="prenom"><BR>
<LABEL for="nom">Nom : </LABEL>
<INPUT type="text" id="nom"><BR>
<LABEL for="naissance">Année de Naissance : </LABEL>
<INPUT type="text" id="naissance"><BR>
<INPUT type="submit" value="Rechercher">
</FORM>
Donc tu n'a aucune element dans GET, ni de prénom, ni de nom, rien.
Ta requête ne peux ne te renvoi rien

Et c'est parce que tu n'a pas d'attribut "name" dans ton formulaire, au niveau de tes input

<INPUT type="text" id="prenom" name="prenom"><BR>

Dans les formulaire, c'est le "name" qui est utile.

rajoute aussi pour le nom Smiley cligne
Modifié par JENCAL (25 Feb 2020 - 11:02)
Meilleure solution
cest mieux oui merci javais pas vu cet oubli
le tableau est toujours vide par contre il m affiche bien mes entrees de formulaire
$nom = $_GET["nom"];
$prenom = $_GET["prenom"];
$naissance = $_GET["naissance"];

$connexion = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
$connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM tab WHERE Nom = '.$nom.' AND Prenom = '.$prenom.' ";
$resultats = $connexion->prepare($sql);

$resultats->execute();
$results = $resultats->fetchAll();

var_dump( $_GET["prenom"], $_GET["nom"], $results );
rajoute dans le var_dump la requête $sql et lance la direct voir si en base elle te ressort quelque chose Smiley smile
Modifié par JENCAL (25 Feb 2020 - 11:18)
elle ressort :
SELECT * FROM tab WHERE Nom = 'le_nom_que_jai_tappé' AND Prenom = 'le_prenom_que_jai_tappé'
Modifié par fanch2506 (25 Feb 2020 - 11:39)
Faut l'essayer dans ta base, et essayer aussi ta connexion avec un if ou un try catch

try
{
    $sql = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
    die('Erreur : ' . $e->getMessage());
} 

Modifié par JENCAL (25 Feb 2020 - 11:42)
je lai essaye dans la base et jai recopié le code equivalent a ma recherche ca donne :

$sql = "SELECT * FROM `tab` WHERE `Nom` = '$nom' AND `Prenom` = '$prenom' AND `Naissance` = '$naissance'";

et la ca marche... oura jencal

je regarde pour n afficher que certaines colonnes et non pas toute la ligne
de plus ca s affiche comme ca :
string(6) "Jerome" string(5) "*" array(1) { [0]=> array(86) { ["Nom"]=> string(5)
Pour un affichage optimisé du var_dump il vaut mieux faire cela :


echo '<pre>';
		var_dump();
		echo '</pre>';
		die;
Jutilise print_r pour l affichage mais jai ceci qui s affiche avant le resultat :

Array
(
[0] => Array
(

Comment l'éliminer sachant que avec PDO::FETCH_ASSOC jai deja supprimé les double lignes ?
Bonjour,

Jai reussi a enlever laffichage de "Array" avec substr($res, 10, $longueur)
Mais il reste un sous affichage "array" encore...
Jarrive pas a enlever ca quelqu'un a une idee?
Modérateur
Franchement si vous avez besoin de styliser le contenu d'un tableau, le mieux restera de passer par une boucle.
Les dump et autre print ne sont réellement utiles que pour le débogage, pouvoir contrôler rapidement un résultat mais en aucun cas pour produire un affichage formaté.

Donc si vous avez cette nécessité, le mieux est de créer une fonction dédiée dans laquelle vous maitriserez intégralement la mise en forme, les niveaux de profondeur et la mise en forme en fonction des niveaux de profondeur.

N'est-il pas ?
Pages :