Mysql_fetch_array

Fermé
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 - 24 sept. 2008 à 15:20
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 13 oct. 2008 à 11:54
Bonjour,
petit pb de requête sql sur une boucle
je débute un peu donc merci de m'éclairer
voici le code
//minitchat
<?php
	 if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent
{
    if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a quelque chose à enregistrer
    {
        // D'abord, on se connecte à MySQL
        mysql_connect("localhost", "ID", "pswd");
        mysql_select_db("test");
 
        // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
        $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
        $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
 
        // Ensuite on enregistre le message
        mysql_query("INSERT INTO minichatvolley VALUES('', '$pseudo', '$message')");
 
        // On se déconnecte de MySQL
        mysql_close();
    }
}
 
 
// Que l'on ait enregistré des données ou pas...
// On affiche le formulaire puis les 10 derniers messages
 
// Tout d'abord le formulaire :


 ?>
 
 
<form action="page2.php" method="post">
 
<p>
Pseudo : <input type="text" name="pseudo" /><br />
Message :  <input type="text" name="message" /><br />
 
<input type="submit" value="Envoyer" />
</p>
 
</form>
 
 
 
<?php
 
// Maintenant on doit récupérer les 10 dernières entrées de la table
// On se connecte d'abord à MySQL :
mysql_connect("localhost", "ID", "pswd");
mysql_select_db("test");
 
// On utilise la requête suivante pour récupérer les 10 derniers messages :
$reponse = mysql_query("SELECT * FROM minichatvolley ORDER BY ID DESC LIMIT 0,10");
 
// On se déconnecte de MySQL
mysql_close();
 
// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p><strong><?php echo $donnees['pseudo']; ?></strong> :  <?php echo $donnees['message']; ?></p>

 
 
 
<?php
}
// Fin de la boucle, le script est terminé !


	echo "</td>";
?>



l'erreur me dit
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in line "celle en gras et soulignée"

merci par avance
lolo

22 réponses

@nGel_974 Messages postés 3163 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 25 avril 2010 157
24 sept. 2008 à 15:27
Chalut :3

https://www.commentcamarche.net/contents/784-php-bases-de-donnees

Tu récupères mal les données de te BDD ;) tu te débrouilles bien pour un(e) débutant(e) ;)

Code propre, bien commenté *_* C'est super !!! ^^
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
24 sept. 2008 à 16:09
Bonjour,

Tu dois te déconnecté de la base de données après la fin de la boucle et non avant, car tu ne peux plus récupérer tes résultats à ce moment-là.

A plus
0
@nGel_974 Messages postés 3163 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 25 avril 2010 157
24 sept. 2008 à 16:11
Il a déjà récupérer les résultats, il ne peut simplement pas les lire :)


// On utilise la requête suivante pour récupérer les 10 derniers messages : Il récupère la réponse
$reponse = mysql_query("SELECT * FROM minichatvolley ORDER BY ID DESC LIMIT 0,10");
 
// On se déconnecte de MySQL
mysql_close();
 
// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($reponse) )
Et là il ne peut pas lire, car il ne l'a pas stocké dans un tableau je crois



0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389 > @nGel_974 Messages postés 3163 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 25 avril 2010
24 sept. 2008 à 16:55
Bonjour,

Honte sur moi, j'avais pas vu cette ligne. Sorry

A +
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
24 sept. 2008 à 16:35
bonjour merci de vos réponses
loin de moi l'idée de m'attribuer ce code
je l'ai pris sur le siteduzero c'est celui de matteo
j'ai suivi tous ces tuto et ça m'a donné envie d'améliorer mon site alors je me lance....en bon newbee quand même!


pour l'erreur mysql_fetch_array c'est réglé ...j'avais mis un nom de table erroné minichatvolley au lieu de minitchatvolley corrigé et ça marche


j'ai essayé de l'insérer dans mon site ,dans un tableau où il apparaitrait à chaque ligne du tableau et où bien sur le tchat de chaque ligne devrait être indépendant l'un de l'autre
les champs apparaissent bien ça c'est ok c'est déjà pas mal ...:lol:

mais par contre plusieurs pb se posent
-tout d'abord seul le pseudo s'affiche pas le message
-ensuite il s'affiche 1 fois dans la 1ère ligne , 2 fois dans la seconde
3fois dans la 3ème ...etc etc
-enfin les tchats ne sont pas indépendants donc quand je tape sur la 1ère ligne ça apparait partout
je vous joins tout le code de cette 1ère colonne

<?php
foreach($listeDates as $cle=>$date){
     echo "<tr>";
     //premiere colone date
     echo '<td align="center"><DIV class="dateclass">'.$date.'</DIV><br>';
	 //minitchat
	 if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent
{
    if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a quelque chose à enregistrer
    {
        // D'abord, on se connecte à MySQL
        mysql_connect("localhost", "ID", "pswd");
        mysql_select_db("test");
 
        // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
        $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
        $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
 
        // Ensuite on enregistre le message
        mysql_query("INSERT INTO minitchatvolley VALUES('', '$pseudo', '$message')");
 
        // On se déconnecte de MySQL
        mysql_close();
    }
}
 
 
// Que l'on ait enregistré des données ou pas...
// On affiche le formulaire puis les 10 derniers messages
 
// Tout d'abord le formulaire :


 ?>
 
 
<form action="page2.php" method="post">
 
<p>
Pseudo : <input type="text" name="pseudo" /><br />
Message :  <input type="text" name="message" /><br />
 
<input type="submit" value="Envoyer" />
</p>
 
</form>
 
 
 
<?php
 
// Maintenant on doit récupérer les 10 dernières entrées de la table
// On se connecte d'abord à MySQL :
mysql_connect("localhost", "ID", "pswd");
mysql_select_db("test");
 
// On utilise la requête suivante pour récupérer les 10 derniers messages :
$reponse = mysql_query("SELECT * FROM minitchatvolley ORDER BY ID DESC LIMIT 0,10")or exit(mysql_error());

 
// On se déconnecte de MySQL
mysql_close();
 
// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p><strong><?php echo $donnees['pseudo']; ?></strong> :  <?php echo $donnees['message']; ?></p>

 
 
<?php
}
// Fin de la boucle, le script est terminé !


	echo "</td>";
?>


je vous remercie encore beaucoup
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
24 sept. 2008 à 17:31
personne ?
0

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

Posez votre question
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
24 sept. 2008 à 18:01
Bonjour,

Il te manques une balise </tr> dans ton code
// Fin de la boucle, le script est terminé !


	echo "</td>";

       echo " </tr>";

Ensuite, à chaque occurrence de date (avec foreach), tu vas insérer un enregistrement, tu vas avoir un formulaire et tu vas afficher les 10 derniers enregistrements. C'est peut-être voulu ?

A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
24 sept. 2008 à 19:56
merci de t'y intéresser...
oui j'insère un nouvel enregistrement à chaque date donc à chaque ligne du tableau....c'est voulu
en fait je voudrais un minitchat indépendant pour chaque nouvelle date
pour le moment les pb restent les mêmes qu'à 16:35

par contre si je rajoute
echo " </tr>";
tout mon tableau part de travers ....
donc je l'ai pas mis...:lol::

merci encore
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
24 sept. 2008 à 21:22
personne?
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
25 sept. 2008 à 09:47
Bonjour,

En fait ton code devrait être le suivant (je ne l'ai pas testé)
<p><strong><?php echo $donnees['pseudo']; ?></strong> :  <?php echo $donnees['message']; ?></p>
  
<?php

     echo "</td>";
     echo "</tr>";
}
// Fin de la boucle, le script est terminé !

?>

Les echo doivent être dans la boucle et non après la boucle puisque les balises <tr> et <td> sont dans la boucle.
A plus
0
@nGel_974 Messages postés 3163 Date d'inscription dimanche 28 octobre 2007 Statut Membre Dernière intervention 25 avril 2010 157
25 sept. 2008 à 09:51
Bonjour,

rien à voir avec le problème, mais je vois que vous utilisez tous les 2 des balises Php quasimment tout le temps, mais si je me souviens bien, on peut écrire duu html dans du php, non ?!

Donc :

<?php

mon code html

echo "patati patata" ;

?>

ça le fait aussi non ? (pour un confort de lecture)
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
25 sept. 2008 à 10:06
Bonjour,

Tu as tout à fait raison mais je n'ai pas voulu changer son code, juste essayer de trouver son erreur.

A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
25 sept. 2008 à 12:53
j'ai essayé de modifier le code comme tu me l'as conseillé christounet mais ça va pas ....le tableau est complètement décalé et j'ai plein de "echo" qui s'affichent avant le tableau
en fait le <tr> est fermé plus loin dans le script



vous pensez pas qu'il faudrait ptêt une table différente pour chaque ligne....dans la mesure ou chaque tchat doit être indépendant?

merci
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
25 sept. 2008 à 13:04
Bonjour,

Je n'ai pas vu de balise </tr> dans le code que tu nous a donné, peut-être devrais-tu copier/coller le code complet et non une partie seulement.
Concernant le fait d'avoir une table par tchat, c'est peut-être pas une mauvaise idée si plus tard tu veux avoir des styles CSS différents en fonction du tchat.
A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
26 sept. 2008 à 08:45
ok merci
au niveau de l'affichage ça va mieux maintenant le pseudo et le messge s'affichent
par contre
cela s'affiche toujours 1 fois dans la 1ère ligne , 2 fois dans la seconde
3fois dans la 3ème ...etc etc
-enfin les tchats ne sont pas indépendants donc quand je tape sur la 1ère ligne ça apparait partout
je vous joins une image de ce que ça donne

http://imageshack-france.com/out.php/i217672_screensite.JPG
merci encore
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
26 sept. 2008 à 17:34
Bonjour,

Désolé pour cette réponse tardive, fort occupé aujourd'hui.
Peux-tu copier/coller la définition de ta table minitchatvolley, c-à-d les colonnes , le ou les index, cela pourra peut-être me donner des idées, car à priori ton code html à l'air correct.

A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
26 sept. 2008 à 23:55
salut
aucun pb ....c'est déjà sympa de m'aider
j'ai pas bien compris ce que tu voulais exactement alors j'ai un screen de la table et de ce qu'elle contenait à cet instant
désolé


les voilà.....
http://imagik.fr/view-rl/118248


http://imagik.fr/view-rl/118249

et merci encore
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
29 sept. 2008 à 12:55
Bonjour,

C'est bien ce que je voulais, définition de ta table , le ou les index et le contenu de cette table.
Juste une petite remarque, dans ton script tu fais un SELECT sur la table minitchatvolley mais tu m'as envoyé la table chat, mais je suppose que c'est la même chose.
Peux-tu essayer l'une des deux choses ci-dessous (a toi de voir ce qui est le plus facile)?
1°) Peux-tu rajouter dans ton code l'affichage de la colonne ID
<p><?php echo $donnees['id']; ?> : <strong><?php echo $donnees['pseudo']; ?></strong> :  <?php echo $donnees['message']; ?></p>

2°) Peux-tu dans phpMyadmin, dans l'onglet SQL executé ton ordre
SELECT * FROM minitchatvolley ORDER BY ID DESC LIMIT 0,10

et ensuite mettre sur imagik.fr le résultat de soit 1°) soit 2°)
Merci
A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
5 oct. 2008 à 14:39
ok merci christounet
effectivement j'ai renommé ma table tchat pour simplifier et j'ai ajouté un champ date (qui pour le moment sert pas )
voilà ce que la réquête sql donne

http://imagik.fr/view-rl/123881


pour l'affichage des données ID, rien n'est affiché....pas très normal ça ....


voici ce que ça donne

http://imagik.fr/view-rl/123901
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
6 oct. 2008 à 17:34
Bonjour,

Concernant l'affichage de l'ID, est-tu sur de le sélectionné dans ton ordre SQL ?

Concernant l'autre problème ( affichage 1 ligne, puis 2 , puis 3, ...) dans tes images, je ne vois où il se situe, le fait d'avoir plusieurs fois le même pseudo et message est normal étant donné que c'est ce que contient ta table tchat.

Quand au problème de tchat indépendant, là aussi je ne comprends pas très bien ce que tu veux dire, peut-être une image sera plus parlante ?

A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
6 oct. 2008 à 19:03
salut
bin je voudrais simplement que mon tchat soit indépendant pour chaque match
c'est à dire que sur cette image
http://imageshack-france.com/out.php/i217672_screensite.JPG

je voudrais pouvoir taper dans le tchat à la date du 6-10-2008 par exemple " je prends ma voiture"
sans que cela apparaisse aussi à la date d'après
ci sur l'image 13-10-2008)
on tchaterait indépendamment sur chaque date de match...

c'est plus clair là ?
merci encore de m'aider

sinon pour l'affichafge de l'ID effectivement je l'ai pas mis dans la requete SQl c'est pour ça
bye
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
7 oct. 2008 à 18:26
Bonjour,

Je pense que tu dois donner des noms différents aux variables Pseudo et Message, tu pourrais utiliser un tableau, ensuite mettre à jour ta colonne date lors de la création d'un nouveau enregistrement et également de tester la valeur de ta date dans ton select. Exemple de code pour le tableau
<form action="page2.php" method="post">
<p><?php
echo "Pseudo : <input type='text' name='pseudo['.$date']' /><br />";
echo "Message :  <input type='text' name='message['.$date']' /><br />
?>
<input type="submit" value="Envoyer" />
</p>
</form>
. Tu peux alors tester tes variables en fonction de la valeur de ta date
foreach($listeDates as $cle=>$date){
     echo "<tr>";
     //premiere colone date
     echo '<td align="center"><DIV class="dateclass">'.$date.'</DIV><br>';
	 //minitchat
	 if (isset($_POST['pseudo[.$date]']) AND isset($_POST['message[.$date['])) // Si les variables existent
{
    if ($_POST['pseudo[.$date]'] != NULL AND $_POST['message[.$date]'] != NULL) // Si on a quelque chose à enregistrer
    {
        // D'abord, on se connecte à MySQL
        mysql_connect("localhost", "ID", "pswd");
        mysql_select_db("test");
 
        // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
        $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
        $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
 
        // Ensuite on enregistre le message
        mysql_query("INSERT INTO minitchatvolley VALUES('', '$pseudo', '$message',date'$date')");
 
        // On se déconnecte de MySQL
        mysql_close();
    }
}
. Tu changes également ton ordre select
// On utilise la requête suivante pour récupérer les 10 derniers messages :
$reponse = mysql_query("SELECT * FROM tchat where date = date'.$date' ORDER BY ID DESC LIMIT 0,10")or exit(mysql_error());


Tiens moi au courant. A plus
0
ciocciu Messages postés 42 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 2 janvier 2009 7
10 oct. 2008 à 18:07
salut christounet
j'ai modifié comme tu me l'as dis
d'abord j'ai changé le champ date dans la table en date_match sur conseil d'un pote
ensuite j'ai modifié le code comme suis
if (isset($_POST['pseudo[.$date]']) AND isset($_POST['message[.$date]'])) // Si les variables existent
{
    if ($_POST['pseudo[.$date]'] != NULL AND $_POST['message[.$date]'] != NULL) // Si on a quelque chose à enregistrer
    {
        
 
        // On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
        $message = mysql_real_escape_string(htmlspecialchars($_POST['message[.$date]']));
        $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo[.$date]']));
 
        // Ensuite on enregistre le message
        mysql_query("INSERT INTO tchat VALUES('', '$pseudo', '$message','date_match'$date'')")or die(mysql_error());
 
        // On se déconnecte de MySQL
        mysql_close();
    }
}

 
 
// Que l'on ait enregistré des données ou pas...
// On affiche le formulaire puis les 10 derniers messages
 
// Tout d'abord le formulaire :


 ?>
 
 
<form action="page2.php" method="post">
<p><?php
echo "Pseudo : <input type='text' name='pseudo['.$date']' /><br />";
echo "Message :  <input type='text' name='message['.$date']' /><br />";
?>
<input type="submit" value="Envoyer" />
</p>
</form>
 
<?php
 
// Maintenant on doit récupérer les 10 dernières entrées de la table
// On se connecte d'abord à MySQL :
mysql_connect("localhost", "id", "pswd");
mysql_select_db("volleycrna");
 
// On utilise la requête suivante pour récupérer les 10 derniers messages :
$reponse = mysql_query("SELECT * FROM tchat where date_match = date_match'.$date' ORDER BY DESC LIMIT 0,10") or die(mysql_error()) ;

 

 
// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p><strong><?php echo $donnees['pseudo']; ?></strong> :  <?php echo $donnees['message'];?></p>

 
 
<?php
}
// Fin de la boucle, le script est terminé !
// On se déconnecte de MySQL
mysql_close();


   echo "</td>";
     



et ça ne change rien ....:-(
toujours un affichage dans le 1er
2 dans le second

....
0