Votre question

[Résolu] Requete SQL sur tous les enregistrements sauf 1 ?

Tags :
  • Sql
  • Programmation
Dernière réponse : dans Programmation
23 Avril 2009 17:47:02

Bonsoir,

J'ai un problème de requête. En effet, lorsque l'on consulte la dernière actualité du moment, cela l'affiche et en dessous, il y a la possibilité de consulter d'autres actualités. Mais je voudrais faire une requête qui sélectionne tous les enregistrements sauf celui qui est affiché dans la page au-dessus.

Voici mon code :


  1. <?php
  2. include ("modules/module_connexion_base.php");
  3. $connexionMYSQL = mysql_connect("*****","******","****");
  4. if ($connexionMYSQL)//Connexion au serveur manqué
  5. {
  6. $activationBD = mysql_select_db("*****", $connexionMYSQL);
  7. if ($activationBD)//Activation de la base de données raté
  8. {
  9. $id=$_GET['id'];
  10. $sql = "SELECT * FROM `actualites` WHERE `id-actualites`=".$id;
  11. $requete = mysql_query($sql) or die(mysql_error());
  12. $nbResultats = mysql_num_rows($requete);//compte le nombre de ligne
  13. $row = mysql_fetch_array($requete);
  14. ?>
  15.  
  16. <?php
  17. echo "<center><strong>".$row['titre']."</strong></center><br />";
  18. echo "<strong>Date de sortie</strong> : ".$row['date_sortie']."<br/><br />";
  19. ?>
  20. <div style="{float:right;}">
  21. <img src="<?php echo $row['image'];?>" alt="Image du film" title="Image du film"/>
  22. </div><br />
  23. <div id="background_resume">
  24. <?php
  25. echo $row['resume'];
  26. ?>
  27. </div>
  28. <br />
  29. <strong>Informations diverses </strong><br />
  30. <div id="info">
  31. <?php
  32. echo $row['titre-info']."<br />";
  33. echo $row['info'];
  34. ?>
  35. </div>
  36. <strong>Bande-annonce</strong>
  37. <object width="425" height="344"><param name="movie" value=<?php echo $row['video']; ?>></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src=<?php echo $row['video']; ?> type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
  38. <?php
  39. }
  40. }
  41. ?>
  42. <hr />
  43.  
  44.  
  45.  
  46. /* C'est à partir d'ici qu'il faudrait que la requête change !!!! */
  47.  
  48.  
  49.  
  50. <strong>Les autres actualités de ce mois</strong><br />
  51. <?php
  52. $sql1 = "SELECT * FROM `actualites`";
  53. $requete1 = mysql_query($sql1);
  54. $nbResultats1 = mysql_num_rows($requete1);//compte le nombre de ligne
  55. while ($row1 = mysql_fetch_array($requete1)){
  56.  
  57. if ($nbResultats1 == 0) {
  58. echo "Il n'y a pas d'autres actualités pour ce mois-ci.<br />";
  59. }
  60. else {
  61. echo "<a href=\"index.php?action=action_actualites&id=".$row1['id-actualites']."\">";
  62. echo $row1['titre']."</a><br />";
  63. }
  64. }
  65. ?>



Je ne sais pas comment procéder...
Merci de votre aide !

Autres pages sur : resolu requete sql enregistrements

24 Avril 2009 01:12:14

utilise LIMIT.
24 Avril 2009 10:14:43

Salut Blasil64!

EN thérie la News affichée sur la page de ton site correspond à la dernière entrée.
Tu affiches donc la dernière donnée enregistrée dans la base par un DESC LIMIT.

SELECT *
FROM ma_table
ORDER BY id DESC LIMIT 0,1

Cette requête affichera l'ensemble des colonnes de la table "ma_table" de manière décroissante avec une limite ce qui aura pour but d'afficher la dernière news crée.
J'ai mis "id" comme colonne pour l'organisation, tu peux très bien mettre le numéro de la colonne c'est à dire 1 (puisque l'id correspond à la clé primaire).

Je te laisse un peu chercher :p  si vraiment tu n'y arrives pas tiens nous au courant!
++
Contenus similaires
24 Avril 2009 12:02:26

Apparemment tu n'as pas bien compris mes précédent message qui disent de ne jamais mettre des variable $_GET directement dans une requête sql. is_numeric() ;) 

PS : Pas de pub.
24 Avril 2009 20:26:28

AH oui pour la sécurité mais j'ai testé comme ça :

  1. $lettre = strlen($_GET['lettre']);
  2. if(strlen($lettre) != 1) {
  3. trigger_error("Parametre incorrect",E_USER_ERROR);
  4. }



Mais ça ne me fait rien, ça n'affiche rien...
Je cherche pour la requête !
24 Avril 2009 20:43:58

Bah oui ... mais vas tu lire la doc parfois et ce que fait strlen() ... copier coller c'est bien mais il faut comprendre ce que l'on fait. Et j'ai expliqué ce que ca faisait.

en l'occurence, tu passes un paramètre id de type numéric donc tu vérifies bien qu'il est numérique avec (is_numeric())

  1. if(!is_numeric($_GET['id'])) {
  2. trigger_error(............)
  3. }


le ! sert à dire non. Ce qui, le test donne en français, si la variable id donné en url n'est pas de type numérique.


Je note au passage que la requête SELECT * FROM `actualites` ne donne absolument pas les actualités du mois mais l'ensemble des actualites dans ta table depuis la nuit des temps. Et à voir les ` je suppose que tu copie sechement tes requêtes depuis PHPmyAdmin ... Quand on développe pour du web, c'est bien sympa d'aprendre PHP mais il faut aussi apprendre le SQL.

Bon, mes postes sont toujours aussi négatif mais c'est comme ça que tu y arriveras (si tu copies/colles pas).
24 Avril 2009 20:55:50

Non désolé je ne copies pas phpMyAdmin. C'est juste que mon site est récent et pour le moment je n'ai pas pensé à tous encore. Je sais que arrivé au mois prochain, il va falloir que je trouve une requête qui classe par date ou quoi. J'y ai pensé mais pas réfléchi !
Je sais que le ! sert à ça. Après je ne connais pas tous et j'avoue que ça me gave un peu de lire mais je sais qu'il faut le faire !
Ne t'inquiète pas pour ta négativité il faut de tout partout. En tout cas merci de ton aide !


EDIT :
Et en sachant que ma variable c'est lettre que je récupère et qu'elle peut soit être '0' (zéro) soit 'a' ou 'b' ou ... ou 'z' ???
25 Avril 2009 19:08:43

Niveau sécurité, j'ai trouvé cette fonction sympathique :
  1. function securite_bdd($string)
  2. {
  3. // On regarde si le type de string est un nombre entier (int)
  4. if(ctype_digit($string))
  5. {
  6. $string = intval($string);
  7. }
  8. // Pour tous les autres types
  9. else
  10. {
  11. $string = mysql_real_escape_string($string);
  12. $string = addcslashes($string, '%_');
  13.  
  14. }
  15.  
  16. return $string;
  17. }
  18.  
  19. $lettre = securite_bdd($_GET['lettre']);


Le problème est que ça m'affiche ça sur la page :
  1. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in ....mapage.php on line XX


Et ensuite ça m'affiche tous les films présent dans ma table au lieu de ce qui correspondent à la lettre.

J'ai testé 'strlen' mais ça me renvoit 1 et du coup ça ne m'affiche rien sur la page...



[EDIT] : Au niveau de la requête, puis-je faire un truc du genre :
  1. SELECT * FROM actualites WHERE `id-actualites` = (SELECT ...)


Ou les '...' serait un truc du genre : trouve moi tous sauf le max d'id-actualites.

Merci de votre aide !
26 Avril 2009 12:34:20

J'ai déjà donné la réponse du pourquoi ca ne marche pas dans l'autre topic.
30 Avril 2009 19:51:40

Pour la requête qui permet d'afficher tout sauf celui présente sur la page :
  1. "SELECT * FROM `dvd_accueil` WHERE `id-dvd` != ".$id;

Merci de votre aide !
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS