Requête MySQL

Résolu
Chabanus Messages postés 978 Date d'inscription   Statut Membre Dernière intervention   -  
 webjfr -
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 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
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   Statut Membre Dernière intervention   18
 
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 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
Tiens, ça tombe bien que tu en parles, je voudrais savoir à quoi ça sert ?
0
briiiiix Messages postés 575 Date d'inscription   Statut Membre Dernière intervention   18
 
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 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
Oki, merci bien, je pense que je devrais les mettre dorénavant !
0
webjfr
 
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 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
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   Statut Membre Dernière intervention   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   Statut Membre Dernière intervention   18
 
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
webjfr
 
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   Statut Membre Dernière intervention   18
 
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
webjfr
 
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 1974 Date d'inscription   Statut Membre Dernière intervention   135
 
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   Statut Membre Dernière intervention   18
 
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   Statut Membre Dernière intervention   70
 
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   Statut Membre Dernière intervention   18
 
Content de le savoir
0
webjfr
 
Re,

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