Petit problème avec des boucles...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Petit problème avec des boucles...

par s3b54sk8 » 19 nov. 2005, 23:57

Merci pour ces précisions, c'est bien ce que je pensais.

Hop résolu :D

par rami » 19 nov. 2005, 23:36

Si mysql_query() n'arrive pas à exécuter la requête, il renvoie FALSE. Donc la première condition permet de s'assurer que la requête a été exécutée correctement. Car si ce n'est pas le cas et qu'on utilise mysql_num_rows() dessus, ca pètera.

par s3b54sk8 » 19 nov. 2005, 23:15

Déjà merci de la réponse, ca marche parfaitement.

En ce qui concerne la boucle, c'est que j'ai rajouté la condition LIMIT 1 après, sans penser que while me servait plus à grand chose en fait. :oops:

Par contre y'a une ligne du code que je comprends pas trop :
if($req_vign_1 and mysql_num_rows($req_vign_1) >0)
Pour "mysql_num_rows($req_vign_1) >0" ca renvoie le nombre de ligne correspondant à la requete $req_vign_1. Donc si dans la base ca trouve une image bass_id=$data[id] et nature=1, la condition est remplie. Ca je comprends, mais à quoi sert "$req_vign_1" tout seul ?

par rami » 19 nov. 2005, 22:49

D'une part, pourquoi faire une boucle sur le résultat de ta requete puisqu'il y a une clause LIMIT 1 (donc au maximum 1 résultat). D'autre part, s'il n y a pas de résultat, tu ne crée pas de cellule, d'où ton décalage.
Je te propose ca:
 $sql = "SELECT id,nserie,caract,type FROM kah_basses WHERE type='1'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

    while($data = mysql_fetch_array($req))
    {
        
        $mini_desc = substr($data['caract'], 0, 100);
        
        $ligne_galerie .= '<tr>';

        $sql_vign_1 = "SELECT pid,url,bass_id,comment,nature FROM kah_img WHERE bass_id='".$data['id']."' AND nature='1' LIMIT 1";
        $req_vign_1 = mysql_query($sql_vign_1) or die('Erreur SQL !<br>'.$sql_vign_1.'<br>'.mysql_error());

		// La boucle qui pose problème.
		if($req_vign_1 and mysql_num_rows($req_vign_1) >0)
		{
        	$data_vign_1 = mysql_fetch_array($req_vign_1);
            $vignette = '<img src="'.$chemin_dossier.''.$data_vign_1['bass_id'].'/'.$data_vign_1['url'].'" border="0" alt="">';
            $ligne_galerie .= '<td align="justify"><a href="?No='.$data['id'].'">'.$vignette.'</a><br><br><br></td>';
        }
        else
        {
        	$vignette = '<img src="'.$chemin_dossier.'/noimg.jpg" border="0" alt="">'; 
        	$ligne_galerie .= '<td align="justify">'.$vignette.'</td>';
        }
        $ligne_galerie .= '<td><font face="verdana" size="2" color="#E7CFB4">';
        $ligne_galerie .= $mini_desc;
        $ligne_galerie .= ' ... <i>(Lire la suite en cliquant sur l\'image)</i></font><br><br></td>';
        $ligne_galerie .= '</tr>';
    }

    $page = template("pages_".$rub."_in.html");
    eval("echo stripslashes(\"$page\");"); 

par s3b54sk8 » 19 nov. 2005, 22:36

Bon j'ai eu beau passer l'après midi sur mon bout de code, je vois vraiment. Vraiment personne pourrait me filer un coup de pouce ?

Petit problème avec des boucles...

par s3b54sk8 » 19 nov. 2005, 12:56

Salut, à tous.

J'ai un petit problème avec les boucles.. en fait c'est surtout une vérification que j'arrive pas trouver comment faire, qui me casse mon affichage. Je sens que c'est un truc tout bête mais je vois vraiment pas.

Voilà le code. J'ai anoté la partie qui pose problème.
else{

	$sql = "SELECT id,nserie,caract,type FROM kah_basses WHERE type='1'";
	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

	while($data = mysql_fetch_array($req)){
		
		$mini_desc = substr($data['caract'], 0, 100);
		
		$ligne_galerie .= '<tr>';

		$sql_vign_1 = "SELECT pid,url,bass_id,comment,nature FROM kah_img WHERE bass_id='".$data['id']."' AND nature='1' LIMIT 1";
		$req_vign_1 = mysql_query($sql_vign_1) or die('Erreur SQL !<br>'.$sql_vign_1.'<br>'.mysql_error());

// La boucle qui pose problème.

		while($data_vign_1 = mysql_fetch_array($req_vign_1)){

			$vignette = '<img src="'.$chemin_dossier.''.$data_vign_1['bass_id'].'/'.$data_vign_1['url'].'" border="0" alt="">';
			$ligne_galerie .= '<td align="justify"><a href="?No='.$data['id'].'">'.$vignette.'</a><br><br><br></td>';

		}

/*
Ce que je veux faire : 

Une vérification pour que, si il n'y a pas d'enregistrement retourné par la boucle (car pas d'entrée correspondante aux conditions) alors on a la balise vignette telle que :

$vignette = '<img src="'.$chemin_dossier.'/noimg.jpg" border="0" alt="">'; 

Le problème : peut importe ce que j'ai essayé j'ai deux résultats :

1. La variable ne retourne rien et ca me décalle mon tableau.
2. Affichage de l'enregistrement correspondant à "bass_id - 1" (exemple : si j'ai pas d'enregistrement en bass_id=3 avec type=1, ce qui s'affiche c'est les données correspondante à bass_id=2..)
*/

		
		$ligne_galerie .= '<td><font face="verdana" size="2" color="#E7CFB4">';
		$ligne_galerie .= $mini_desc;
		$ligne_galerie .= ' ... <i>(Lire la suite en cliquant sur l\'image)</i></font><br><br></td>';
		$ligne_galerie .= '</tr>';
	}

	$page = template("pages_".$rub."_in.html");
	eval("echo stripslashes(\"$page\");");

}
Je sais pas si j'ai été très clair..

Merci d'avance si quelqu'un a une idée de comment faire. :oops: