Aller au contenu

probleme while et table entiere


Sujets conseillés

Posté (modifié)

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
Posté

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

Posté

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 ?

Posté

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).

Posté

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.

Posté

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>

Posté

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.

Posté

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!)

Posté

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;
?>

Posté

Dans tes requètes, tu mets parfois : bistrot, parfois bsitrot...

L'abus d'alcool serait ...... ? :D

Posté

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.

Posté

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 ...

Posté

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)

....

Posté

Tu peux redonner le code, s'il te plait, je pense qu'il y a une autre erreur, dans l'ordre des INSERT ;)

Posté

<?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 ("...");

}

?>

Posté

ah !

tiens ?

j'ai un pitit probleme ...

ca ne montre pas le dernier messae ...

ca ne le montre que quand il y a un avant dernier ...

Posté

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.

Veuillez vous connecter pour commenter

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



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