jlb59 Posté 31 Janvier 2008 Posté 31 Janvier 2008 (modifié) Bonjour à tous, Afin de faire le moins de manip possible, j'ai fait un petit formulaire pour rechercher la liste des mots-clés suivant son id. Le name déclaré est: N° id à rechercher : <input type="text" name="id" size="3" maxlength="3"> et repris dans la requête SELECT <?php mysql_connect("localhost", "root", ""); mysql_select_db("recherche"); $reponse = mysql_query("SELECT id,mots_cles FROM recherche WHERE id='$id'") OR die(mysql_error()); while ($donnees = mysql_fetch_array($reponse) ) { ?> <strong>id : <?php echo $donnees['id']; ?> </strong><br /> <strong>titre : <span style="color:blue;"><?php echo $donnees['titre']; ?></span> </strong><br /> <strong>mots_cles :</strong> <?php echo $donnees['mots_cles']; ?><br /> J'ai un prb dans le select parce que j'ai cette erreur c'est au niveau de $reponse = mysql_query("SELECT J'ai essayé plusieurs syntaxes mais j'y arrive pas. Pourriez-vous m'aider à trouver la bonne syntaxe afin que cela fonctionne bien ? Essayez d'être clair parce que je débute avec MySQL, et je suis désolé si je suis un peu long à la détente ! Merci d'avance. Modifié 31 Janvier 2008 par jlb59
KnockedMaster Posté 31 Janvier 2008 Posté 31 Janvier 2008 (modifié) Salut, Essaye ceci : <input type="text" id="id" name="id" size="3" maxlength="3"> Puis, avant de faire ta requête : $id= $_GET['id'] ou $_POST['id']; Selon le procédé que tu utilises pour envoyer ton formulaire. Normalement ça devrait aller ++ Modifié 31 Janvier 2008 par KnockedMaster
jlb59 Posté 31 Janvier 2008 Auteur Posté 31 Janvier 2008 Salut, Essaye ceci : <input type="text" id="id" name="id" size="3" maxlength="3"> Puis, avant de faire ta requête : $id= $_GET['id'] ou $_POST['id']; Selon le procédé que tu utilises pour envoyer ton formulaire. Normalement ça devrait aller ++ Merci beaucoup, c'est OK maintenant avec $_GET. Ce que j'ai du mal à comprendre c'est pourquoi il faut mettre ces lignes pour que ça marche ???
KnockedMaster Posté 31 Janvier 2008 Posté 31 Janvier 2008 Ce que j'ai du mal à comprendre c'est pourquoi il faut mettre ces lignes pour que ça marche ??? C'est simple, si ton champ "id" existe bien dans ton formulaire, ta variable id, elle, n'existe pas tant que tu ne l'as pas déclarée. Or, dans ton cas, tu veux que cette variable contienne la valeur retournée par le champ id de ton formulaire ... Comme il y a deux méthodes pour envoyer ton formulaire (GET ou POST) qui sont toutes deux des tableaux contenant l'ensemble des valeurs de champs contenus dans ton form, tu dois déclarer ta variable avec la valeur qui t'intéresse via le tableau que tu utilises, en l'occurence id avec la méthode GET, d'où $id=$_GET['id']; C'est pareil pour toutes les valeurs que tu voudras récupérer en vue de l'affectation à une variable. Si ton form avait contenu un champ nommé 'tagada_tsouin_tsouin', tu aurais dû, pour en récupérer la valeur et l'affecter à une variable, faire $tagada_tsouin_tsouin = $_GET['tagada_tsouin_tsouin']; A noter que tu peux utiliser une telle variable sans l'affecter à une autre puisque $_GET['id'] contient bien la valeur transmise par le champ de formulaire. C'est cependant déconseillé de le faire s'il s'agit d'insérer des données dans ta base ... mieux vaut toujours traiter et vérifier les valeurs de commandes envoyées par l'utilisateur. Sorry si ce n'est pas clair mais je ne suis pas développeur non plus hein Quelques liens si tu veux apprendre les bases du php : http://www.phpdebutant.org/ http://www.lephpfacile.com/ http://www.phpsources.org/ ++
jlb59 Posté 31 Janvier 2008 Auteur Posté 31 Janvier 2008 C'est simple, si ton champ "id" existe bien dans ton formulaire, ta variable id, elle, n'existe pas tant que tu ne l'as pas déclarée. Or, dans ton cas, tu veux que cette variable contienne la valeur retournée par le champ id de ton formulaire ... Comme il y a deux méthodes pour envoyer ton formulaire (GET ou POST) qui sont toutes deux des tableaux contenant l'ensemble des valeurs de champs contenus dans ton form, tu dois déclarer ta variable avec la valeur qui t'intéresse via le tableau que tu utilises, en l'occurence id avec la méthode GET, d'où $id=$_GET['id']; C'est pareil pour toutes les valeurs que tu voudras récupérer en vue de l'affectation à une variable. Si ton form avait contenu un champ nommé 'tagada_tsouin_tsouin', tu aurais dû, pour en récupérer la valeur et l'affecter à une variable, faire $tagada_tsouin_tsouin = $_GET['tagada_tsouin_tsouin']; A noter que tu peux utiliser une telle variable sans l'affecter à une autre puisque $_GET['id'] contient bien la valeur transmise par le champ de formulaire. C'est cependant déconseillé de le faire s'il s'agit d'insérer des données dans ta base ... mieux vaut toujours traiter et vérifier les valeurs de commandes envoyées par l'utilisateur. Sorry si ce n'est pas clair mais je ne suis pas développeur non plus hein C'est vrai que c'est dur à comprendre ! Je dis ça parce que j'ai une page pour afficher la liste complète de la base et il n'y a pas $id= $_GET['id']; avant $reponse = mysql_query : <!-- Lister une table --><?phpmysql_connect("localhost", "root", ""); mysql_select_db("recherche"); $reponse = mysql_query("SELECT * FROM recherche ORDER BY id") or die(mysql_error()); while ($donnees = mysql_fetch_array($reponse) ) {echo '[ <a href="java script:history.go(-1)">Retour page précédente</a> ]';echo '<br><br>';?><p style="font-family:verdana;"><strong>id : <?php echo $donnees['id']; ?> </strong><br /><!--<strong>url : < ?php echo $donnees['url']; ?> </strong><br />--><strong>titre : <span style="color:blue;"><?php echo $donnees['titre']; ?></span> </strong><br /><strong>mots_cles :</strong> <?php echo $donnees['mots_cles']; ?><br /></body></html><?php}mysql_close(); echo '<br><br>'; echo '<br><br>'; echo '[ <a href="java script:history.go(-1)">Retour page précédente</a> ]';?> Enfin, ça marche comme ça, c'est pourquoi j'ai du mal à comprendre pourquoi ce GET influe sur le code ??? Moi qui n'y comprend presque rien en MySQL, tu vois le topo ? Mais un grand merci de tes explications que je vais étudier profondément. ++
KnockedMaster Posté 31 Janvier 2008 Posté 31 Janvier 2008 Re-, Normal encore une fois Ta table contient bien un champ id, donc pas besoin de variable si tu veux les afficher tous ... Dans ton premier exemple tu ne voulais en sélectionner qu'un, donc tu avais besoin de connaître la valeur de l'id sélectionné pour pouvoir l'afficher, donc tu devais déclarer la variable qui devait te permettre d'indiquer la valeur recherchée. Ex sans variable dans ton premier exemple : $reponse = mysql_query("SELECT id,mots_cles FROM recherche WHERE id='6") OR die(mysql_error()); Dans cette requête, tu sélectionnes uniquement l'id qui a la valeur 6. Cette valeur peut être modifiée pour apporter plus de flexibilité et de dynamisme à l'aide de ton form : l'id sélectionné contiendra une valeur (variable) et ta requête ira chercher uniquement l'enregistrement sélectionné. $id = 5 ou 6 ou 7 ....$reponse = mysql_query("SELECT id,mots_cles FROM recherche WHERE id='$id") OR die(mysql_error()); MAIS, dans ton 2ème exemple : $reponse = mysql_query("SELECT * FROM recherche ORDER BY id") or die(mysql_error()); Tu fais une requête pour afficher TOUS les enregistrements, donc pas besoin d'une variable pour en sélectionner un précisément, donc pas besoin de déclaration puisqu'il n'y a pas de variable CQFD Ton souci provient plus d'une méconnaissance du PHP que du SQL ++
jlb59 Posté 1 Février 2008 Auteur Posté 1 Février 2008 (modifié) Je ne mets pas ton message parce qu'il n'est pas possible de t'envoyer ce post. j'espère que tu vas comprendre mon message ! Tes explications sont très importantes pour moi ! Tes détails me permettent de comprendre beaucoup plus facilement l'usage de "$id= $_GET['id'];" Maintenant, je vois pourquoi il est nécessaire de déclarer une variable venant d'un formulaire, et pas utile directement à la source pour une recherche unique WHERE id='6'. Ah oui, pendant que j'y suis, je croyais qu'il n'était pas obligatoire de mettre des quotes quand c'est du numérique ? Grâce à tes lumières, je vois nettement mieux le fonctionnement d'une recherche générale et particulière. Ton souci provient plus d'une méconnaissance du PHP que du SQL Là, j'en suis convaincu et c'est pour cela que j'essaie de prendre le maximum de renseignements au lieu de faire du "copier/coller" ! Je te remercie encore vivement pour tes explications. ++ Modifié 1 Février 2008 par jlb59
KnockedMaster Posté 1 Février 2008 Posté 1 Février 2008 Salut, He be, content d'avoir pu t'aider ! Tu as du mérite parce que quand je relis mes explications je trouve ça très crès onfus Sinon pour les quotes tu as effectivement raison, ce n'est pas obligatoire quand il s'agit d'un numérique. D'ailleurs cela peut jouer parfois des tours parce qu'avec les quotes l'interprêteur va penser qu'il s'agit d'une chaîne et non pas d'un numérique. Dans la pratique, comme PHP ne demande pas de typer les variables, cela n'a pas trop d'incidence (c'est du moins ce qu'il ressort de ma petite expérience) mais il faut y être attentif car ça pourrait causer des erreurs lors du traitement de certaines données. Bonne continuation ++
jlb59 Posté 1 Février 2008 Auteur Posté 1 Février 2008 Tu as du mérite parce que quand je relis mes explications je trouve ça très crès onfus Sinon pour les quotes tu as effectivement raison, ce n'est pas obligatoire quand il s'agit d'un numérique. D'ailleurs cela peut jouer parfois des tours parce qu'avec les quotes l'interprêteur va penser qu'il s'agit d'une chaîne et non pas d'un numérique. Dans la pratique, comme PHP ne demande pas de typer les variables, cela n'a pas trop d'incidence (c'est du moins ce qu'il ressort de ma petite expérience) mais il faut y être attentif car ça pourrait causer des erreurs lors du traitement de certaines données. Ah ! je savais bien. J'ai pris bonne note de ta remarque et j'essayerai d'être vigilant. ++
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant