Salut !

Je voulais savoir s'il était possible de mettre plusieurs conditions dans une boucle Do - While :

par exemple :

do{
echo $a" - ".$b;
}
while($a > 0 ET $b > 1);

Cela est-il possible ? si oui avec quelle syntaxe ?

Merci ;)

6 réponses


tottosche
Réponse acceptée

Je vais essayé de répondre au fur et a mesure des problème que je trouve
(Petit problème je n'ai pas bcp d'afinité avec PDO)

1) Premièrement tu devrais sortir la premier "$data = $req->fetch();" du do car il fait te l'executer une foi ensuite a la fin du while il va te l'executé (vu qu'il est dans la condition) puis te le réexécuté vu qu'il est au debut du do donc met la premiere $data = $req->fetch(); juste avant le " do {"

2) J'aimerai savoir ou et comment est initialiser les variables: $numPage et $perPage

Bien sure, dans chaque condition tu peux en mettre plus d'une (que ce soit pour les boucles ou les if/else

pour ET logique, utilise && ou AND
pour le ou logique, utilise || ou OR

C'est valable pour la plupars des langage

EDIT:
chaque condition retourne 1 si elle est confirmé ou 0 si elle ne l'est pas
Ensuite avec des opérateur logique (AND ou OR) une nouvelle valeur est retourné:

1 AND 1 = 1
1 AND 0 = 0
0 AND 0 = 0
0 AND 1 = 0

1 OR 1 = 1
1 OR 0 = 1
0 OR 0 = 0
0 OR 1 = 1

il existe aussi l'operateur inverse: ! :

!1 = 0
!0 = 1

Si a la fin de toute ses oppération, ne nombre (binair) 1 est retourné, alors ce qui suivra l'accolate sera exécuté sinon ça passera a la procédure suivante

Je n'ai pas tout compris mais bon. Sauf que cela ne fonctionne pas sur mon script, a moins que le problème ne vienne d'autre part ..

Grossièrement : j'ai une page qui affiche mes articles, (requête SQL, et parcourue dans un Do - While pour les afficher) et en bas de chaque article il y a "Commenter ($nbComm)" $nbComm étant variable selon le nombre de commentaires de l'article en question.

Mon problème est que seule le dernier article posté s'affiche, ensuite PDO m'affiche une erreur :

Fatal error :

Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:
Syntax error or access violation:
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY date DESC' at line 1' in C:\Program Files\wamp\www\boutique\index.php:156 Stack trace:

0 C:\Program Files\wamp\www\boutique\index.php(156): PDO->query(' SELECT COUNT(i...') #1 {main} thrown in C:\Program Files\wamp\www\boutique\index.php on line 156

Le problème vient de ta requète

Es tu sure d'avoir bien incrémenté chaque variable de la bonne façon?
(parce que dans l'exemple que tu a montré soit tu ne rentre jamais dans la boucle soit tu fait une boucle infinie)
A mon avis ta requete SQL doit utiliser une des variable utiliser dans la condition qui doit etre mal utiliser

Peux tu montrer ton code?

Attention code assez long ^^ [code]<?php do{
$data = $req->fetch(); $id = $data['id']; $sqlnbc = " SELECT COUNT(comm) AS nbComm FROM comments WHERE news_id = $id"; $reqnbc = $DB->query ($sqlnbc); $datanbc = $reqnbc->fetch(); $nbComm = $datanbc['nbComm']; $contenu = stripslashes($data["contenu"]); $contenu = htmlentities($contenu, ENT_NOQUOTES, 'UTF-8'); $conv = array( '[b](.*?)[\/b]' => ' $1', '[i](.*?)[\/i]' => '$1', '[u](.*?)[\/u]' => '<u>$1</u>', '[img](.*?)[\/img ]' => ' ', '[url=([^]]*)](.*)[\/url]' => ' $2' ); foreach($conv as $k=>$v) { $contenu = preg_replace('/'.$k.'/',$v, $contenu); } $contenu = nl2br($contenu); echo "

"; echo "

{$data["titre"]}

Posté le ".date("d/m/Y - G:i",strtotime($data["date"]))."

"; echo "

{$contenu}

Voir l'article Commenter ({$datanbc['nbComm']})

"; echo "
"; } while($data = $req->fetch()); ?> [/code] ma requête : [code] $req_news = $DB->prepare ("SELECT * FROM news ORDER BY date DESC LIMIT ".(($numPage-1)*$perPage).",$perPage") or die (print_r($DB->errorInfo())); $req_news->execute(); [/code] Voila, si tu résous mon problème tu sauve ma journée ;)

J'ai tr'ouver par mes propres moyens, après des tests, effectivement il fallait sortir le fetch du do.

Merci en tout cas :)