Requête MySQL

Résolu/Fermé
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 25 oct. 2008 à 16:51
 webjfr - 26 oct. 2008 à 14:00
Bonjour,
J'ai un script de news dont j'ai ajouté un nouvel élément a ma table "module" et je voudrais afficher toutes les news du module qui a été sélectionner lors de la rédaction de la news:

J'ai essayé de modifier cette ligne :
$sql = "SELECT * FROM news ORDER BY id DESC LIMIT $limit_start,$pagination";


en ajoutant:

AND module='index'


a la ligne précedente:

$sql = "SELECT * FROM news ORDER BY id DESC LIMIT $limit_start,$pagination AND module='index'";


Mais on me dit:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Projet\index.php on line 104

Si vous avez une idée a ce sujet merci de me m'inviter a la lire :) . Voilà le fragment de code:


if( isset($_GET['page']) && is_numeric($_GET['page']) )
  $page = $_GET['page'];
else
  $page=1;

/* Nombre d'info par page */
$pagination = 3;
/* Numéro du 1er enregistrement à lire */
$limit_start = ($page - 1) * $pagination;
$sql = "SELECT * FROM news ORDER BY id DESC LIMIT $limit_start,$pagination AND module='index'";
/* Requête SQL */
$resultat = mysql_query($sql);

/* Traitement et affichage des données */
while ( $donnees = mysql_fetch_array($resultat) ) 
{
?>
      </p>
      <div class="news">
    <h3>
        <?php echo $donnees['titre']; ?>
        <em>posté le: <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em>
    </h3>
    
    <p>
   
    <?php
    // On enlève les éventuels antislash PUIS on crée les entrées en HTML (<br />)
    $contenu = nl2br(stripslashes($donnees['contenu']));
    echo $contenu;
    ?>
   <br/>
   <br/>
 <em>Post&eacute; par  
   <?php echo $donnees['login']; ?></em><a href="commentaires.php">Laisser un commentaire</a><em>
   <?php
   ?>
   </em></p>
      </div>

        <?php
} // Fin de la boucle des news
?>
      <div align="center">
      <?php

/* Nb d'enregistrement total */
$nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM news');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];

/* Pagination */
$nb_pages = ceil($nb_total / $pagination);

/* Affichage */
echo '<p class="pagination">' . pagination($page, $nb_pages) . '</p>';

?>
 
</div>
</div>

   
 </div>
			
 </div>

13 réponses

pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 16:54
Essaie :
$sql = "SELECT * FROM news WHERE module='index' ORDER BY id DESC LIMIT $limit_start,$pagination";
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
25 oct. 2008 à 17:02
Je me permets vous dire qu'il est preferable d'ajouter les `

$sql = "SELECT * FROM `news` WHERE `module`='index' ORDER BY `id` DESC LIMIT $limit_start,$pagination";
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 17:05
Tiens, ça tombe bien que tu en parles, je voudrais savoir à quoi ça sert ?
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
25 oct. 2008 à 17:11
poue des versions de mysql server, il est obligatoire de les utiliser car dans quelques cas mysql n'arrive pas a distinguer les nom des champs des valeurs.
ça m'est arrivé une fois d'etre obligé de les mettre car mon hebergeur avait une de ces versions de mysql
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 17:13
Oki, merci bien, je pense que je devrais les mettre dorénavant !
0
Salut,

Pour commencer, il se passe quoi si je fais
?page=0

page est bien présent, et en plus, is_numeric() reconnait 0 comme numeric ?

Alors, à $page-1 tu auras quoi ?

if( isset($_GET['page']) && is_numeric($_GET['page']) )
{
  $page = $_GET['page'];
} elseif ($_GET['page'] == '0') {
$page = 1;
} else {
  $page=1;
}


Je me permets vous dire qu'il est preferable d'ajouter les ` 

$sql = "SELECT * FROM `news` WHERE `module`='index' ORDER BY `id` DESC LIMIT $limit_start,$pagination";

Avant de donner des conseilles de ce style (ajout de séparateur), il faudrait peut être avertir que * est dans la majorité des cas, une surcharge inutile de la mémoire serveur, ce qui est BIEN PLUS important que de simple `
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 17:17
Ecoute bonhomme, avant de monter sur tes grands chevaux, apprends la politesse, si tu as des conseils à donner, donne-les, mais ne dénigre pas ceux des autres !

De plus il a peut-être besoin de tous les champs de la table auquel cas * est utilisé à bon escient.

Par contre, je n'avais pas lu le code, mais il faudrait effectivement contrôler la valeur de $page un peu plus sérieusement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
25 oct. 2008 à 17:18
Sur ce forum on donne les moyens de base, et apres c'est au developpeur d'utiliser son genie pour ne chercher que les champs voulus
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
25 oct. 2008 à 17:21
Merci donc de ne pas attaquer les autres, penses plus tot a utiliser les termes courtoix, comme, je suis pas d'accord, je penses qu'il est meilleur si ...
Bonne chance
0
Re,

Evite de juger trop vite, qui t'a dit que tu pouvais m'appeler "bonhomme".
Niveau politesse, je suis restée poli !

Ensuite, que ce soit avoir l'utiliter de tous les champs ou pas, il y a aussi des questions de sécurité, mais bon... Tu dois bien le savoir.
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
25 oct. 2008 à 17:24
On sais que t'es un bon developpeur puisqnue t'es du coté des gens qui repondent.
Toutefois, il faut peut etre laisser les autres decouvrir eux même les problèmes.
Par exemple, je n'ai decouvert que je suis en train de surcharger mpon serveur que lorsque j'ai commis ce genre d'erreur.
Voila
0
Re,

Je te donne un autre exemple de chose bien plus important.
Evite d'utiliser les " et préfére les ' quand tu n'as pas besoin des retours en ligne.
Puisque les " signifie à php qu'il faut faire attention au contenu, tel que les \r \n

Des tests ont été fait, sur un affichage de 1000 lignes, tu gagnes une seconde à l'affichage, ce qui est énorme (ca depend aussi du serveur mais bon).

Ensuite, la correction de psychopathe devrait plutot être :
$sql = "SELECT * FROM news WHERE module='index' ORDER BY id DESC LIMIT '$limit_start','$pagination'";
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 19:12
Les derniers bench que j'ai pu regarder ne donnaient pas d'aussi grandes différences entre les deux, mais il est vrai que les double quotes indiquent à php qu'il doit parser la chaine donc impose une légère charge supplémentaire.
Cependant, dans la correction que tu donnes, le résultat est le même que dans la mienne, mis à part que les valeurs de $limit_start et $pagination seront ente guillemets simples.
Une optimisation possible pourrait être :
$sql = 'SELECT * FROM news WHERE module=\'index\' ORDER BY id DESC LIMIT ' . $limit_start . ', ' . $pagination;

A condition bien sûr que la concaténation ne soit pas pire que l'interprétation par php...

Bref, je suis navré si tu t'es senti insulté, et je te présente mes excuses, mais la prochaine fois au lieu de prendre les gens de haut, sois un peu plus humble.
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
25 oct. 2008 à 17:54
Bon, je penses qu'on se reconnaitras un pe plus et qu'on aura l'occasion de connaitre nos styles de travail a travers ce forum.
Laissons le temps parler
0
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 70
26 oct. 2008 à 13:36
J'avais pensé a ce genre de requête:
$sql = "SELECT * FROM news WHERE module='index' ORDER BY id DESC LIMIT $limit_start,$pagination"
mais j'allais plutôt faire SELECT id,titre,contenu,timestamp,login,module FROM news WHERE module='index' ORDER BY id DESC LIMIT $limit_start,$pagination"
Mais bon la votre est correcte et c'est marche super bien :). Merci et a bientôt !
0
briiiiix Messages postés 575 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 juin 2010 18
26 oct. 2008 à 13:43
Content de le savoir
0
Re,

Oui mais le top, c'est bien ça :
SELECT id,titre,contenu,timestamp,login,module FROM
0