Petite question PHP, noob :)

Petite question PHP, noob :) - PHP - Programmation

Marsh Posté le 19-05-2012 à 11:37:43    

Alors je vous explique mon problème.  :o  
 
J'ai une page theatre.php

Code :
  1. <?php
  2. $reponse = $bdd->query('SELECT * FROM spectacle_spc WHERE spc_tsp_id=2' );
  3. while($donnees = $reponse->fetch())  {?>
  4.      <a href="affichage.php" style="color:white">La piece <strong><?php echo $donnees['spc_titre']; ?></strong>, realise par <strong><?php echo $donnees['spc_real']; ?></strong>.</a> <br />
  5. <?php
  6. } ?>


 
Ma page theatre.php fonctionne comme je le désire  :D (elle propose tous les choix des pièces présentes sur ma BDD) Mais j'aimerais qu'en cliquant sur un des liens proposé, elle me renvoie à la page affichage.php tout en gardant la donnée spc_titre en mémoire. Puisque cette page affichage.php sera la même pour tout les liens, seul le contenue sera différent selon la pièce sur laquelle on a cliqué. ( j’espère avoir été clair  :o )
 
La page affichage.php

Code :
  1. <?php
  2. $req = $bdd->prepare('SELECT * FROM spectacle_spc WHERE spc_title=?');
  3. $req->execute(array($donnees['spc_titre']));
  4. ?>
  5. <?php echo $donnees['spc_titre']; ?>
  6. <?php echo $donnees['spc_real']; ?>
  7. <?php echo $donnees['spc_desc']; ?>


 
Merci d'avance à celui qui pourra m'éclairer sur ce petit problème. ;)

Reply

Marsh Posté le 19-05-2012 à 11:37:43   

Reply

Marsh Posté le 19-05-2012 à 13:12:30    

Au plus simple comme ca je dirais que chaque lien crée sur theatre.php peut contenir l'identifiant de son spectacte (spc?) du type:
 

Code :
  1. <?php
  2. $reponse = $bdd->query('SELECT * FROM spectacle_spc WHERE spc_tsp_id=2' );
  3. while($donnees = $reponse->fetch())  {?>
  4.      <a href="affichage.php?spc_title=<?php echo  $donnees['spc_titre']; ?>" style="color:white">La piece <strong><?php echo $donnees['spc_titre']; ?></strong>, realise par <strong><?php echo $donnees['spc_real']; ?></strong>.</a> <br />
  5. <?php
  6. } ?>


 
Derrière sur affichage tu n'as qu'à récupérer les données dans $_GET pour retrouver le spc_title.

Reply

Marsh Posté le 19-05-2012 à 13:48:00    

Déjà merci pour cette super réponse, puisque j'arrive à récupérer le titre sur la page affiche.php  ;)  

Code :
  1. <?php echo $_GET['spc_titre']; ?>


 
Mais comment faire si je veux afficher les données qui correspondent à ce titre ?  
J'ai réalisé ca :

Code :
  1. <?php
  2. $req = $bdd->prepare('SELECT * FROM spectacle_spc WHERE spc_titre=?');
  3. $req->execute(array($_GET['spc_titre']));
  4. <?php echo $req['spc_titre']; ?>
  5. <?php echo $req['spc_real]; ?> // etc ...
  6. ?>


 
Mais ca ne fonctionne pas.  
Encore merci.

Reply

Marsh Posté le 19-05-2012 à 14:05:44    

à la ligne 4 de ton code, il faudrait utiliser ta ressource. Un petit fetch sur $req me semble tout indiqué :)

Reply

Marsh Posté le 19-05-2012 à 14:29:25    

Génial, ca fonctionne parfaitement [:gum]
D'ailleurs je comprend mieux l'utilité de Fetch d'un coup  :o  
 
Vraiment merci pour ces réponses si rapide ;)

Reply

Marsh Posté le 20-05-2012 à 10:43:37    

Petite remarque : ça serait sans doute mieux de faire le même traitement mais sur l'ID (clé primaire dans la table spectacle_spc de ta BD, a priori qui se nommerait spc_id) et non sur le titre. Ca t'évitera tout un tas de pbs de caractères à gérer si le titre de ta pièce contient des ", des /, des espaces... Et t'arriveras au même résultat ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-05-2012 à 12:18:18    

Remarque prise en compte  :o  
Surtout que j'avais bien une clé primaire spc_id ;)
 
Merci bien ;)

Reply

Marsh Posté le 25-05-2012 à 15:37:13    

Je me permet de vous poster un nouveau problème, vu la qualité de vos réponses ;)

 

J'ai tenté de créer une fonction recherche sur un seul attribut "spc_titre" de la table "spectacle_spc".
J'ai donc une case de type formulaire de name "requete" qui renvoie à ma page rechercher.php

 

rechercher.php

Code :
  1. <?php
  2. $query = "SELECT count(spc_titre) FROM spectacle_spc WHERE spc_titre LIKE \"%$requete%\"";
  3. $reponse = mysql_query($query);
  4. $row = mysql_fetch_row($reponse);
  5. $nombre = $row[0];
  6. if(empty($nombre)) {?>
  7. <?php echo "<h2>Aucun résultat ne correspond à votre recherche</h2>"; }
  8. else {
  9.       while($row = mysql_fetch_row($reponse))  { ?>
  10. <a href="affichage.php?spc_titre=<?php echo  $row['spc_titre']; ?>" class="beau" ><?php echo $row['spc_titre']; ?></a> <br />
  11. <?php
  12. } } ?>
 

Voyez vous ce qui ne colle pas ?
Je n'ai pas d'erreur de codage pure mais j'ai aucun résultat affiché.  :o  (comme si ca ne passait pas dans le if/else, j'ai d'ailleurs un doute sur la bonne utilisation de la fonction empty)
Merci à celui qui pourra tenter de me débloquer.


Message édité par Extravagent Fail le 25-05-2012 à 15:38:07
Reply

Marsh Posté le 25-05-2012 à 16:01:02    

Ben ta requête remonte qu'un nb de titres trouvés. Je vois pas comment tu espères avoir la liste :/ Vire le count().


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-05-2012 à 18:19:21    

J'ai tenté une autre version mais toujours pas de résultat correct  :/
J'ai remplacé le count()
Et mes fetch_row par un fetch_array

 
Code :
  1. $query = "SELECT * FROM spectacle_spc WHERE spc_titre LIKE \"%$requete%\"";
  2. $reponse = mysql_query($query);
  3. $donnees = mysql_fetch_array($reponse);
  4. if(empty($donnees) {?>
  5. <?php echo "<h2>Aucun résultat ne correspond à votre recherche</h2>"; }
  6. else {
  7.         while($donnees = mysql_fetch_array($reponse))  { ?>
  8.      <a href="affichage.php?spc_titre=<?php echo  $donnees['spc_titre']; ?>" class="beau" ><strong><?php echo $donnees['spc_titre']; ?></strong></a> <br />
  9. <?php
  10. } } ?>
 

J'suis naze. ( Mais merci ;) )


Message édité par Extravagent Fail le 25-05-2012 à 18:53:44
Reply

Marsh Posté le 25-05-2012 à 18:19:21   

Reply

Marsh Posté le 26-05-2012 à 02:00:17    

Dans l'absolu, je pense qu'il faut que tu écrives ton algo avant de coder, là tu fais 2 fois la même chose.
 
Il me semble que là dans tous les cas, si tu as des données, il va te manquer 1 ligne, de même si tu as 1 seule ligne en retour, rien ne s'affichera. J'aurai plutot vu un:
 

Code :
  1. $query = "SELECT * FROM spectacle_spc WHERE spc_titre LIKE \"%$requete%\"";
  2. $reponse = mysql_query($query);
  3. $donnees = mysql_fetch_array($reponse);
  4. // $flag permet de savoir si tu as un enregistrement ou pas
  5. $flag = false;
  6. while($donnees = mysql_fetch_array($reponse))  { ?>
  7.      <a href="affichage.php?spc_titre=<?php echo  $donnees['spc_titre']; ?>" class="beau" ><strong><?php echo $donnees['spc_titre']; ?></strong></a> <br />
  8. <?php
  9. $flag = true;
  10. }
  11. // si $flag est toujours à false, c'est que tu n'es jamais rentré dans ton while
  12. if(!$flag)
  13.     echo "<h2>Aucun résultat ne correspond à votre recherche</h2>";
  14. ?>


 
Bon il y a sans doute plus facile mais je dois t'avouer utiliser PDO pour les connexions en BDD et je te conseillerai d'y jeter un oeil si tu as le courage car je le trouve bien plus simple à maîtriser (quand tu auras le temps :o )
http://fr.php.net/manual/fr/book.pdo.php

Reply

Marsh Posté le 26-05-2012 à 08:31:10    

xaeon a écrit :

Dans l'absolu, je pense qu'il faut que tu écrives ton algo avant de coder, là tu fais 2 fois la même chose.
 
Il me semble que là dans tous les cas, si tu as des données, il va te manquer 1 ligne, de même si tu as 1 seule ligne en retour, rien ne s'affichera. J'aurai plutot vu un:
 

Code :
  1. ...


 
Bon il y a sans doute plus facile mais je dois t'avouer utiliser PDO pour les connexions en BDD et je te conseillerai d'y jeter un oeil si tu as le courage car je le trouve bien plus simple à maîtriser (quand tu auras le temps :o )
http://fr.php.net/manual/fr/book.pdo.php


 
Déjà merci pour tes conseils je vais vite allez voir ca ;)
Après pour PDO, c'est de cette façon que je commençais à coder (comme mes premiers codes laissés sur ce post) mais vu que je fais tous ca pour un projet scolaire à la con, et que pour le monsieur qui corrige PDO="vousnemaitrisezpascavousavezcopiercollersurlenet" j'ai du retourner à cette vieille version de papy :/

Reply

Marsh Posté le 26-05-2012 à 09:39:44    

Disons que y'a du mieux  :o  
Mais c'est pas tout a fait ca  :D  
 
Là maintenant, peut importe ce que l'on recherche, ca affichera tous les spectacles de la BDD. (sauf le premier)
Pourtant j'ai tout vérifié, les noms des requetes, titre etc.. et c'est bien ca.

Reply

Marsh Posté le 26-05-2012 à 10:16:08    

Fais voir ton code complet sur cette page :)

Reply

Marsh Posté le 26-05-2012 à 10:57:54    

Avec plaisir  :o  
 

Code :
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8" />
  5.  <link rel="stylesheet" href="recherche.css" />
  6.         <title>Recherches</title>
  7.     </head>
  8.     <body>
  9.    <div id="fond">
  10.    </div>
  11.  
  12.    <div id="resultat">
  13.  
  14.   <?php
  15. $host ='db416209894.db.1and1.com';
  16. $user = 'dbo416209894';
  17. $bdd = 'db416209894';
  18. $passwd ='******';
  19. mysql_connect($host, $user, $passwd) or die("erreur de connexion au serveur" );
  20. mysql_select_db($bdd) or die("erreur de connexion a la base de donnees" );
  21. $query = "SELECT * FROM spectacle_spc WHERE spc_titre LIKE '%$requete%'";
  22. $reponse = mysql_query($query);
  23. $don = mysql_fetch_array($reponse);
  24. // $flag permet de savoir si il y a un enregistrement ou pas, fonction binaire
  25. $flag = false;
  26. while($don = mysql_fetch_array($reponse))  { ?>
  27.      <a href="affichage.php?spc_titre=<?php echo  $don['spc_titre']; ?>" class="beau" ><strong><?php echo $don['spc_titre']; ?></strong></a> <br />
  28. <?php
  29. $flag = true;
  30. }
  31. // si $flag est toujours à false, c'est que tu n'es jamais rentré dans ton while
  32. if(!$flag)
  33.     echo "<h2>Aucun résultat ne correspond à votre recherche</h2>";
  34. ?>
  35.    </div>
  36.    </body>
  37.   </html>


 
Et je te rajoute mon formulaire de recherche :

Code :
  1. <div id="recherche">
  2.    <form action="rechercher.php" method="Post" class="recherche"> 
  3.    <input type="text" name="requete" size="27">
  4.    <input type="submit" value="ok">
  5.    </form>
  6.    </div>


 
Merci d'essayer de m'aider ;)

Reply

Marsh Posté le 26-05-2012 à 11:11:48    

Alors plusieurs conseils qui ne tienne qu'à moi:
 
- affiche ta requête sql $query et tu te rendras vite compte qu'elle ne change jamais et qu'avec de la chance est "fonctionne" en était toujours
SELECT * FROM spectacle_spc WHERE spc_titre LIKE '%%'
Résultat tu sélectionnes tous les champs de ta base.
 
- il faut donc valoriser ta variable $requete (que tu utilises dans $query) avec ce que tu as récupéré de ton formulaire avant d'exécuter ta requête.

Code :
  1. // récupération sécurisée du champ requete de ton formulaire
  2. $requete = htmlspecialchars(trim($_POST['requete']));


 
Essaie déjà de voir de ce coté :)

Reply

Marsh Posté le 26-05-2012 à 11:22:53    

Là ca affiche qu'aucun résultat ne correspond à ma recherche, meme si je recherche un titre exact. Je ne dois donc pas rentrer dans le While.
 
En fait avant j'avais rajouté cette ligne là

Code :
  1. $requete = $_POST['requete'];


 
Qui je crois doit avoir la même fonction que la tienne.
Mais à force de bidouiller elle avait disparue de mon codage.

Reply

Marsh Posté le 26-05-2012 à 11:51:47    

Non mais c'est moi aussi qui suis grave con ma parole...

Code :
  1. $query = "SELECT * FROM spectacle_spc WHERE spc_titre LIKE \"%$requete%\"";
  2. $reponse = mysql_query($query);
  3. // Bah ouai sinon si on a 1 ligne en retour, on ne rentre jamais dans le while...
  4. $donnees = mysql_fetch_array($reponse);
  5. // $flag permet de savoir si tu as un enregistrement ou pas
  6. $flag = false;
  7. while($donnees = mysql_fetch_array($reponse))  { ?>
  8.      <a href="affichage.php?spc_titre=<?php echo  $donnees['spc_titre']; ?>" class="beau" ><strong><?php echo $donnees['spc_titre']; ?></strong></a> <br />
  9. <?php
  10. $flag = true;
  11. }
  12. // si $flag est toujours à false, c'est que tu n'es jamais rentré dans ton while
  13. if(!$flag)
  14.     echo "<h2>Aucun résultat ne correspond à votre recherche</h2>";
  15. ?>
 

Mais tu as toujours besoin de ton $requete = $_POST['requete'] (ma syntaxe est juste plus sûre vis à vis des saisies utilisateur)


Message édité par xaeon le 26-05-2012 à 11:53:01
Reply

Marsh Posté le 26-05-2012 à 11:59:38    

SUPER, SUPER, SUPER §§§§§§§§§
Ca marche du feu de dieu.  :o  
 
Vraiment merci de ton soutien ;)
C'est cool de trouver des gens comme toi ;)
 

Spoiler :

Mais il me reste plein de fonction à travailler [:petoulachi]

Reply

Marsh Posté le 26-05-2012 à 12:05:22    

De nada :) C'est blindé de gens prêt à aider ici, suffit d'accepter les règles de base et de ne pas arriver les mains vides en espérant que la solution tombera du ciel :D
 
Bon courage pour la suite, vu la chaleur tu en auras bien besoin.

Reply

Marsh Posté le 06-06-2012 à 22:05:27    

Etant donné qu il y a du noob dans le titre je tente ma chance...
Je dois mettre un site en maintenance, les sites html c est simple je vais je créé une page index.htm avec serveur maintenance et ça roule sur le www.
 
 
Par contre sur un site PHP quel page je dois modifier pour rendre le site en down ?
 
Merci par avance


---------------
Moards : Challenge Everything. - En fait l'idée c est que t arrives comme un porc à l entrée en glisse ! Là tu te jettes comme un porc ! Et là tu sors comme un goret
Reply

Marsh Posté le 06-06-2012 à 22:57:05    

index.php à tout hasard?
 
Dans lequel tu fais un include(<fichier maintenance.html> )

Reply

Marsh Posté le 10-06-2012 à 16:24:23    

Merci de ta reponse.
Pour info c etait plus compliqué que ça... le ftp qu on m a donné correspondait pas au site en prod, mais au site en dev :)
 
Je pouvais toujours modifier les trucs  :)


---------------
Moards : Challenge Everything. - En fait l'idée c est que t arrives comme un porc à l entrée en glisse ! Là tu te jettes comme un porc ! Et là tu sors comme un goret
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed