Aller au contenu

probleme while et table entiere


bigornot

Sujets conseillés

je veux afficher une table entiere, mais, quand j'essaie, ca n'affiche que 1 message ( le premier, selon le classement en id

comment fzire pour que ca affiche tout ?

partie head :

<?
$msg = "rzte";
include("config.php");
_AT_mysql_connect($db_chemin,$db_user,$db_pass) or die("Impossible de se connecter à la base de données");
_AT_mysql_select_db("bdbourgeron") or die("Impossible de se connecter à la base de données");
$query = "SELECT * FROM bistrot ORDER BY id DESC ";
$result = "mysql_query($query)";
$nb = "mysql_fetch_array($result)";
?>

partie body :

<?php
echo "<br>".$nb['titre'];
echo "<br>".$nb['message'];
echo "<br>".$nb['ps'];
?>

:?:

Modifié par bigornot
Lien vers le commentaire
Partager sur d’autres sites

Salut bigornot,

mysql_fetch_array() ne retourne que le record suivant, ou false s'il n'y en a plus.

Il faut donc le mettre dans une boucle comme:

while ($nb = mysql_fetch_array($result)) {
   echo "<br>".$nb['titre'];
   echo "<br>".$nb['message'];
   echo "<br>".$nb['ps'];
}

Dan

Lien vers le commentaire
Partager sur d’autres sites

bah tiens ...

j'ai trouvé le moyen de planter un ordi !

en effet, ca me l'a affiché ( le mess ) indefiniment ...

en fait, ca veut dire quoi "while" et comment on s'en set ?

Lien vers le commentaire
Partager sur d’autres sites

while en fait c'est une boucle. Sa peut se traduire ~ comme sa :

Tant que (cette condition est vraie) alors
     action a éxécuter
Fin Tant que

Donc tant que la condition entre parenthèse est vraie alors il exécutera le code entre { et }.

Si comme dans ton cas sa t'as affiché le mess indéfiniment alors tu as du faire une faute et la condition était toujours vraie (bloucle infinie).

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

la boucle conditionnelle while signifie :

tant que (condition est vrai){

// faire ceci

}

Comment ca marche ?

Il y a plusieurs facons d'utiliser while. L'une d'elles est d'afficher toutes les lignes d'un fichier. Ca donne ceci :

// on ouvre le fichier :
pointeur_fichier = ouvre fichier.

// tant que ce n'est pas la fin du fichier :
tant que ( NON fin_fichier (pointeur_fichier)

// on lit la ligne suivante :
ligne = lecture_ligne(pointeur_fichier).

on écrit la ligne (dans son navigateur) que l'on vient d'extraire du fichier :
ecrire ligne.

// on a fini la boucle, on met un arret de boucle.
FIN tant que

// on a fini de lire le fichier, on ferme le fichier.
ferme_fichier

Que va faire ce programme ?

Il va ouvrir le fichier, lire la première ligne, écrire la première ligne, et en arrivrant à la "FIN tant que", va regarder la condition :

On n'est pas à la fin du fichier ? On refait un tour. On lit donc la deuxième ligne. On l'écrit. On est à la fin du fichier ? Non. On refait un tour... etc, etc. On est à la fin ? oui ? Donc, on sort de la boucle. On ferme le fichier.

Voilà.

Pour ton problème de mmmmmmmm.., donnes nous le code qui donne cette boucle.

A+, Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

voila mon code ...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<?

$msg = "rzte";

include("config.php");

_AT_mysql_connect($db_chemin,$db_user,$db_pass) or die("Impossible de se connecter à la base de données");

_AT_mysql_select_db("bdbourgeron") or die("Impossible de se connecter à la base de données");

$query = "SELECT * FROM bistrot ORDER BY id";

$result = "mysql_query($query)";

?>

<title>index.php</title>

<meta name="author" content="Franck Bourgeron">

<meta name="publisher" content="Franck Bourgeron">

<meta name="generator" content="HTML Creator 3.5.1">

</head>

<body>

<?php

while ($nb = "mysql_fetch_array($result)") {

echo "<br>".$nb['titre'];

echo "<br>".$nb['message'];

echo "<br>".$nb['ps'];

}

?>

<form type="submit" action="ok.php">

titre ========:<input type="text" name="titre" size="20" align="center"><br>

message ======:<textarea rows="20" name="message" cols="20"></textarea><br>

post-scriptum :<textarea rows="20" name="ps" cols="20"></textarea><br> <br> <br>

<input type="submit" value="envoyer" align="center">

</form>

</body>

</html>

Lien vers le commentaire
Partager sur d’autres sites

Enlèves les apostrophes "" entre les fonctions de php.

Ainsi,

while ($nb = "mysql_fetch_array($result)") {

devient :

while ($nb = mysql_fetch_array($result)) {

et

$result = "mysql_query($query)";

devient :

$result = mysql_query($query);

A+, Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Tu as aussi la solution php.net > documentation > fonctions mysql ... c'est tres bien explique, et tu peux faire un copier coller des exemples (qui fonctionnent tres bien!)

Lien vers le commentaire
Partager sur d’autres sites

oulalah ! ca m'enerve mais ca m'enerve ... :mad2: :mad2: :mad2: :mad2: :mad2:

maintenant, c'est la partie mysql du formulaire ...

pourtant, ca me semble correct !

:mad2:

:

<?php
include ("config.php");
$rate = "nonononon !";
$msg = "la connexion a echoue";
$db = mysql_connect($db_chemin,$db_user,$db_pass) or die ($msg);
$selectdb = "mysql_db_query(INSERT INTO bistrot('pseudo','titre','message','ps') VALUES ('$pseudo,$titre,$message,$ps')) or die ($rate)";
$mysql_titre = "mysql_db_query(INSERT INTO bistrot('titre') VALUES ('$titre')) or die ($rate)";
$mysql_mess = "mysql_db_query(INSERT INTO bistrot('message') VALUES ('$message')) or die ($rate)";
$date = "strftime('%d/%m/%y %H:%M:%S')";
$mysql_reste = "mysql_db_query(INSERT INTO bsitrot('pseudo','date',ps') VALUES ('$pseudo,$date,$ps')) or die ($rate)";

if($titre == "" )
{ echo " Vous devez mettre un titre ";
}
else
{
$mysql_titre;
}

if($message == "" )
{ echo " Vous devez mettre un message";
}
else
{
$mysql_mess;
}

$mysql_reste;
?>

Lien vers le commentaire
Partager sur d’autres sites

De plus, dans cette ligne, et les semblables :

$selectdb = "mysql_db_query(INSERT INTO bistrot('pseudo','titre','message','ps') VALUES ('$pseudo,$titre,$message,$ps')) or die ($rate)";

il te faut, comme expliqué plus haut :

- enlever les guillemets doubles qui entourent les fonctions, et en mettre autours des requètes sql.

Ca donnerait :

$selectdb = mysql_db_query("INSERT INTO bistrot('pseudo','titre','message','ps') VALUES ('$pseudo,$titre,$message,$ps')) or die ($rate);

Ensuite, la fonction mysql_db_query s'ecrit avec le nom de la db, comme paramètre. Mais...

Ensuite, la fonction mysql_db_query est obsolète depuis php 4.0.6, il faut la remplacer par mysql_query.

Hum... En fait, elle ne fait pas grand chose, ton code. Peux tu expliquer ce que tu veux faire, avec ? Et la structure de la table bistrot ? stp ? s'il y a un identifiant, par exemple comme id_bistrot, ou autre, et s'il est auto increment, etc .?

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

précise ta question, svp ...

ma structure : id, date, pseudo, titre, message, ps

ce petit code sert a ajouter ... ( dans le bistrot )

le bistrot est un mini-forum, déstiné a etre rapide ...

Lien vers le commentaire
Partager sur d’autres sites

ah !

modification faite !

maintenant, ca oscille entre parse error ( line, ca change en fonction des modifs : une ligne que je croyais reussie redevien en parse error ... !)

et entre or die ($msg)

....

Lien vers le commentaire
Partager sur d’autres sites

<?php

include ("config.php");

mysql_connect($db_chemin,$db_user,$db_pass);

mysql_select_db("bdbourgeron");

if($message == "")

{ echo " Vous devez mettre un message ou un titre";

}

else

{

mysql_query("INSERT INTO bistrot(message,titre,ps)

VALUES ('$message','$titre','$ps')") or die ("...");

}

?>

Lien vers le commentaire
Partager sur d’autres sites

Dans le code que tu donnes au dessus :

Tu fais 'INSERT INTO bistrot (-pseudo,titre,message)

puis

'INSERT INTO bistrot (message)

puis

...

A chaque fois, cela créé une ligne supplémentaire dans ta base de données, dans ta table bistrot. Concrètement, ta table ressemble à ceci :

id | ---- pseudo ---- | ---- titre ---- | ---- message ---- |

1 |.....Anonymus....|......untitre.....| .....un message....|

2 | .......................|.....................|.....un message....|

3 | ....... Dan .......| ....autre titre..|encore un message|

4 | .......................| ....................|encore un message|

5 | ....bigornot.......|encore.un.titre|...et un message...|

6 |........................|.....................|...et un message...|

"Les petits points sont juste faits pour assurmer l'alignement."

C'est à dire :

A chaque fois que tu fais appel à INSERT INTO, cela te créé une ligne supplémentaire dans la table. Or, si tu ne remplis pas les champs correctement, cela te donnera des champs vides, là où tu cherches à les remplir.

En fait : Faire une requète 'INSERT INTO (pseudo,titre,message)

te permet de remplir tous les champs d'un coup.

La requète pour modifier un enregistrement existant est UPDATE .... SET .... .

Pour ce qui est de ton problème de dernier message, il nous faut la boucle mysql_fetch_array.

Voilà.A+, Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...