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 ? :P

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']);
:shock:

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 :D
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 !