Page 1 sur 3
Problème requete mysql
Posté : 08 nov. 2008, 12:52
par leuntout
Bonjour,
Je travail sur un script pour mon site pour un système de news.
Et j'ai un message d'erreur sur la ligne si-dessous :
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
Pouvez vous me dire ce qui cloche?
Merci!
Posté : 08 nov. 2008, 13:00
par lux
Et c'est quoi le message d'erreur ?

Posté : 08 nov. 2008, 13:13
par leuntout
Salut!
quand je remplis ma news, que je la valide le message est :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in *****/liste_news.php on line 71
la ligne 71 correspond à la deuxième ligne que j'ai mis plus haut.
Je suis débutant en php...
Posté : 08 nov. 2008, 13:14
par sylvaing26
Oui qu'est ce dont le message d'errur on veut tt savoir !!!
Posté : 08 nov. 2008, 13:47
par Aureusms
Il te dis en substance que mysql_fecth_array n'a pas trouver de ressource sql à traiter. (arrête aussi d'être parano en ne montrant qu'un bout de ton code). Vérifie si les mysql_connect et mysql_select_db sont bien avant ton appel de requete et que tu n'as pas de mysql_close entre les deux.
Posté : 08 nov. 2008, 15:19
par leuntout
Ok.
donc voici le scripte en son entier.
L'ouverture de la base ne pose pas pb, c apres.
<body>
<h2><a href="rediger_news.php">Ajouter une news</a></h2>
<?php
mysql_connect("***", "***", "***");
mysql_select_db("news");
if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
$titre = addslashes($_POST['titre']);
$contenu = addslashes($_POST['contenu']);
if ($_POST['id_news'] == 0)
{
mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
}
else
{
$_POST['id_news'] = addslashes($_POST['id_news']);
mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");
}
}
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
$_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
Posté : 08 nov. 2008, 15:49
par charabia
leuntout, efface au plus vite les accès de ta base !
Utilise le bbcode PHP pour que ton code soit plus lisible.
Posté : 08 nov. 2008, 16:38
par leuntout
Merci beaucoup!
Voila un bon exemple de ce que ca donne de faire 2 choses à la fois...
Ok je remet le code :
<body>
<h2><a href="rediger_news.php">Ajouter une news</a></h2>
<?php
mysql_connect("***", "***", "***");
mysql_select_db("news");
if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
$titre = addslashes($_POST['titre']);
$contenu = addslashes($_POST['contenu']);
if ($_POST['id_news'] == 0)
{
mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
}
else
{
$_POST['id_news'] = addslashes($_POST['id_news']);
mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");
}
}
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
$_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
}
?>
</table>
</body>
</html>
Posté : 08 nov. 2008, 17:13
par albat
$_POST['id_news'] = addslashes($_POST['id_news']);

Posté : 08 nov. 2008, 17:28
par leuntout
Salut albat.
Ou est le pb dans cette commande?
Posté : 08 nov. 2008, 18:00
par sylvaing26
Euh moi je pense que le soucis c'est que tu peux pas redefinir une variable $_POST comme ca.
a la limite fait
$id_news = addslashes($_POST['id_news']);
Posté : 08 nov. 2008, 18:26
par fred99
Bien sur que si tu peux redéfinir une variable $_POST
Par contre ce qui m'échappe pourquoi utiliser un addslashes sur une valeur numérique ?
De plus ta requete à l'air OK, donc ta table contient bien un champ id ? si oui se nomme t'il bien id ?
Posté : 08 nov. 2008, 18:34
par sylvaing26
Abon savai pas, a ba ca m'evitera de passer par d'autres variables a l'avenir lol
le maitre a parlé
Posté : 08 nov. 2008, 19:12
par fred99
Abon savai pas, a ba ca m'evitera de passer par d'autres variables a l'avenir lol
le maitre a parlé
Le maitre je dirais pas ca je suis encore loin de maitrisser php la preuve j'ai demander de l'aide ici

M'enfin moi perso je préfére creer une variable ca fait plus propre et ca evite les erreurs de concaténation :p
Posté : 08 nov. 2008, 19:21
par sylvaing26
ca evite les erreurs de concaténation
Tout à fait d'acc avec toi !