Requête MySQL
Résolu
Chabanus
Messages postés
978
Date d'inscription
Statut
Membre
Dernière intervention
-
webjfr -
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 :
en ajoutant:
a la ligne précedente:
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:
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é 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>
A voir également:
- Requête MySQL
- Mysql community server - Télécharger - Bases de données
- Mysql error 2002 ✓ - Forum Linux / Unix
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Erreur de requete facebook - Forum Facebook
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
13 réponses
Essaie :
$sql = "SELECT * FROM news WHERE module='index' ORDER BY id DESC LIMIT $limit_start,$pagination";
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";
$sql = "SELECT * FROM `news` WHERE `module`='index' ORDER BY `id` DESC LIMIT $limit_start,$pagination";
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
ça m'est arrivé une fois d'etre obligé de les mettre car mon hebergeur avait une de ces versions de mysql
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 ?
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 `
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 `
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
Bonne chance
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.
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.
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
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
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 :
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'";
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 :
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.
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.
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
Laissons le temps parler
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 !
$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 !