problème de boucle

VaN
Mammouth du PHP | 1107 Messages

18 juil. 2005, 15:12

bonjour,

voila le résultat que je souhaiterai obtenir :

Toujours afficher 4 lignes de tableaux, à l'aide d'une boucle, avec un input file et un input text.
Remplir le champ text avec une valeur sortie de ma bdd, suivant une boucle.
Si par exemple je n'ai que 2 entrées dans ma bdd, seules les 2 premieres lignes du tableau seront remplies, les 2 suivantes seront vides.

Mais je n'arrive pas a afficher 4 lignes de tableau, je n'affiche que N lignes, où N est le nombres d'entrées dans ma bdd : /

mes différents essais :
<?php
$i=1;
				while ($result_media = mysql_fetch_array($query_media) && $i<=4) 
				{
				
				echo $i;
		  		?>
            	<tr>
              		<td width="46">#<?php echo $i ?> :</td>
              		<td><input type="file" name="pic<?php echo $i ?>" value="fsg" /></td>
            	</tr>
            	<tr>
              		<td width="46">alt #<?php echo $i ?> :</td>
             		 <td><input type="text" name="alt<?php echo $i ?>" <?php if (isset($result_media['alt'])) { echo $result_media['alt'];} ?> /></td>
            	</tr>
				<?php
				$i=$i+1;
			}
?>
<?php
for ($i=1;$i<=4;$i++) {
				while ($result_media = mysql_fetch_array($query_media)) 
				{
				
				echo $i;
		  		?>
            	<tr>
              		<td width="46">#<?php echo $i ?> :</td>
              		<td><input type="file" name="pic<?php echo $i ?>" value="fsg" /></td>
            	</tr>
            	<tr>
              		<td width="46">alt #<?php echo $i ?> :</td>
             		 <td><input type="text" name="alt<?php echo $i ?>" <?php if (isset($result_media['alt'])) { echo $result_media['alt'];} ?> /></td>
            	</tr>
				<?php
				}
			}?>
aucun des 2 ne marche

Eléphant du PHP | 396 Messages

18 juil. 2005, 15:15

Si tu es sous MySql, utilises la clause LIMIT pour limiter le nombre d'enregistrements que ta requête te renverras.

PS : oops j'ai mal lu ton problème, je te reponds dans qq instants

VaN
Mammouth du PHP | 1107 Messages

18 juil. 2005, 15:19

PS : oops j'ai mal lu ton problème
oui je pense. j'essaie d'etre un peu plus clair :

dans tous les cas, le nombre maximum d'entrées dans la bdd est de 4. j'aimerais donc afficher quoi qu'il arrive 4 ligne de tableaux avec les input sur chaque ligne. Si le nombre d'entrée ds la bdd est inférieur à 4 , les lignes du tableau en trop seront vide, les autre seront remplies par les données correspondantes.

Mammouth du PHP | 543 Messages

18 juil. 2005, 15:24

hello,

rajoute un deuxieme while apres le premier :

Code : Tout sélectionner

while ($i<=4) { // ici la ligne vide $i++; } ?> </table>

@++

PS : moi j'aurai plutot fait ca en me servant des tableaux multidimenssionnel, mais ca devrait marcher quand meme ;)

Mammouth du PHP | 1353 Messages

18 juil. 2005, 15:26

Salut,

Si tu fais un $nbr_lignes = mysql_num_rows($requete); tu connaitras le nombre de ligne et ensuite grace a un 4-$nbre_lignes tu sauras aussi combien de lignes sont vides...

Eléphant du PHP | 396 Messages

18 juil. 2005, 15:27

Dans un 1er temps, tu utilises la clause LIMIT pour n'avoir, au plus, que 4 resultats
Ensuite, tu peux faire comme ça :
<?php

$i=1;

while ($result_media = mysql_fetch_array($query_media))
{
	?>
	<tr>
		<td width="46">#<?php echo $result_media['le bon champs'];} ?> :</td>
		<td><input type="file" name="pic<?php echo $result_media['le bon champs'];} ?>" value="<?php echo $result_media['le bon champs?'];} ?>" /></td>
	</tr>
	<tr>
		<td width="46">alt #<?php echo $i ?> :</td>
		<td><input type="text" name="alt<?php echo $result_media['alt']; ?>" <?php echo $result_media['alt'];} ?> /></td>
	</tr>
	<?php
	$i++;
	?>
}

<?php
if($i <5) {
	while($i <5) {
	?>
	<tr>
		<td width="46">#<?php echo $i ?> :</td>
		<td><input type="file" name="pic<?php echo $i;} ?>" value="<?php echo $i;} ?>" /></td>
	</tr>
	<tr>
		<td width="46">alt #<?php echo $i ?> :</td>
		<td><input type="text" name="alt<?php echo $i; ?>" <?php echo $i;} ?> /></td>
	</tr>
<?php
$i++;
	}
}
?>
Si je peux te donner un conseil, quand tu es face à un pb de ce genre (un genre d'algoritmie), poses sur une feuille le problème avec des mots en francais simple.

Par ex :
si j'ai moins de 4 lignes
je fais ca
sinon
je fais ca
Modifié en dernier par Rei Itchido le 18 juil. 2005, 16:00, modifié 2 fois.

Mammouth du PHP | 543 Messages

18 juil. 2005, 15:30

if($i <4) {
<tr>
<td width="46">#<?php echo $i ?> :</td>
<td><input type="file" name="pic<?php echo $i;} ?>" value="<?php echo $i;} ?>" /></td>
</tr>
<tr>
<td width="46">alt #<?php echo $i ?> :</td>
<td><input type="text" name="alt<?php echo $i" <?php echo $i;} ?> /></td>
</tr>
$i++;
}

ptite erreur, un if ne bouclera pas, donc ceci fonctionnera unquement si on a $i qui vaut 2 en sortit du premier while, et on aura donc au final uniquement 3 lignes ;)

@+

Eléphant du PHP | 396 Messages

18 juil. 2005, 15:32

Vi, j'editais quand tu postais :)

Mammouth du PHP | 1353 Messages

18 juil. 2005, 15:33

dans tous les cas, le nombre maximum d'entrées dans la bdd est de 4.
Je pense donc que c'est pas la peine de blinder comme cela.

Eléphant du PHP | 396 Messages

18 juil. 2005, 15:35

Arf, j'avais pas vu...
Enfin le principe reste le même.
Si il faut que Van ne retienne qu'une seule chose de tout ça, c'est de poser son algo sur papier avec des mots simples et le reste devrait suivre. (dans des cas simples comme celui-ci en tout cas :) )

VaN
Mammouth du PHP | 1107 Messages

18 juil. 2005, 15:37

ok, bon ça ça marche bien.

Deuxieme probleme qui survient mtnt :

les données dans ma base sont les suivantes :

3 entrées :
alt1, alt2 et alt3
<?php
		  		$i=1;
				while ($result_media = mysql_fetch_array($query_media)) 
				{
				echo $result_media['alt'];
					while ($i<=4) 
					{
					
		  		?>
me renvoie alt1 alt2 alt3 impeccablement, mais
<?php
		  		$i=1;
				while ($result_media = mysql_fetch_array($query_media)) 
				{
				
					while ($i<=4) 
					{
					echo $result_media['alt'];
		  		?>
me renvoie :
alt1
alt1
alt1
alt1

Ce qui fait que au final, mes input texte ne se remplissent pas comme je le souhaite.

EDIT : ouh la, bcp de reply pendant que je postais. J'ai appliqué la methode donnée tout au début

Mammouth du PHP | 1353 Messages

18 juil. 2005, 15:56

me renvoie :
alt1
alt1
alt1
C'est normal puisque tu boucles sur la même entrée. Peux tu poster ta requete pliz et préciser ce qu il y a dans alt1 alt2 alt3 ?

Mammouth du PHP | 543 Messages

18 juil. 2005, 15:57

<?php

$i=1;

while ($result_media = mysql_fetch_array($query_media))
{
    ?>
    <tr>
        <td width="46">#<?php echo $result_media['le bon champs'];} ?> :</td>
        <td><input type="file" name="pic<?php echo $result_media['le bon champs'];} ?>" value="<?php echo $result_media['le bon champs?'];} ?>" /></td>
    </tr>
    <tr>
        <td width="46">alt #<?php echo $i ?> :</td>
        <td><input type="text" name="alt<?php echo $result_media['alt']; ?>" <?php echo $result_media['alt'];} ?> /></td>
    </tr>
    <?php
    $i++;
}
   while($i <5) {
    ?>
    <tr>
        <td width="46">#<?php echo $i ?> :</td>
        <td><input type="file" name="pic<?php echo $i;} ?>" value="<?php echo $i;} ?>" /></td>
    </tr>
    <tr>
        <td width="46">alt #<?php echo $i ?> :</td>
        <td><input type="text" name="alt<?php echo $i; ?>" <?php echo $i;} ?> /></td>
    </tr>
<?php
$i++;
}
?>
comme ca plutot ;)

++

VaN
Mammouth du PHP | 1107 Messages

18 juil. 2005, 16:02

C'est normal puisque tu boucles sur la même entrée. Peux tu poster ta requete pliz et préciser ce qu il y a dans alt1 alt2 alt3 ?
<?php
$sql_media = "SELECT * FROM media_pics WHERE id_media_article='$id_media_article'";
?>
alt1 alt2 et alt3 sont des données, contenues dans le champ 'alt' de la table media_pics.

VaN
Mammouth du PHP | 1107 Messages

18 juil. 2005, 16:08

<?php

$i=1;

while ($result_media = mysql_fetch_array($query_media))
{
    ?>
    <tr>
        <td width="46">#<?php echo $result_media['le bon champs'];} ?> :</td>
        <td><input type="file" name="pic<?php echo $result_media['le bon champs'];} ?>" value="<?php echo $result_media['le bon champs?'];} ?>" /></td>
    </tr>
    <tr>
        <td width="46">alt #<?php echo $i ?> :</td>
        <td><input type="text" name="alt<?php echo $result_media['alt']; ?>" <?php echo $result_media['alt'];} ?> /></td>
    </tr>
    <?php
    $i++;
}
   while($i <5) {
    ?>
    <tr>
        <td width="46">#<?php echo $i ?> :</td>
        <td><input type="file" name="pic<?php echo $i;} ?>" value="<?php echo $i;} ?>" /></td>
    </tr>
    <tr>
        <td width="46">alt #<?php echo $i ?> :</td>
        <td><input type="text" name="alt<?php echo $i; ?>" <?php echo $i;} ?> /></td>
    </tr>
<?php
$i++;
}
?>
comme ca plutot ;)

++
après quelques petites modifs, ça marche impec, merci bcp : )