Comment mettre dans une boucle?

Eléphanteau du PHP | 11 Messages

07 juin 2010, 08:03

Bonjour,
J'ai créé un formulaire en HTML.
Maintenant je voudrais accéder à la base de données, compléter les champs du formulaire en me servant de l'attribut "value" et afficher une ligne de formulaire par enregistrement dans une boucle.
La boucle avec "for" n'est pas acceptée et je ne sais pas pourquoi, je l'ai remplacée par While mais au lieu d'extraire 4 enregistrements je n'en ai qu'un et j'ai un warning:

Warning: extract() expects parameter 1 to be array, null given in C:\wamp\www\TESTPHP\MICHEL\Affichage_Client_Quart.php on line 253
Contrat :1
Nom: Type: Numéro: Assuré:

P.P: P.A: Frac: Date Effet: Date Terme: Règlement:
Mon bout de code correspondant:
<?php
/*for ($i=1; $i=4; $i++)*/

while ($ligne_contrat = mysqli_fetch_assoc($resultat_contrat));
{
extract($ligne_contrat);
$i=1;
echo "Contrat :<input name='No' type='text' id='No' value='$i' size='2' maxlength='2' />";

$i++;
}
?>
D'autre part je ne sais pas continuer à mettre les autres champs en provenance de deux tables de la base de données dans la boucle.
Voici par exemple les autres champs du formulaire à ajouter:
<form id="form12" name="form12" method="post" action="">
<label>Type:
<input name="Type_Produit" type="text" id="Type_Produit" size="30" maxlength="100" />
</label>
<label>Numéro:
<input name="No_Contrat" type="text" id="No_Contrat" size="15" maxlength="15" />
</label>

Merci si vous pouviez me donner un exemple et une explication.

Eléphant du PHP | 422 Messages

07 juin 2010, 11:13

hello


l'erreur dit qu'extract attend un tableau et que tu lui passe rien
tu doit avoir un problème avec ton fetch

exécute ta requet direct dans phpmyadmin pour voir

merci
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 11 Messages

07 juin 2010, 14:20

Merci mais ça ne vient pas de l'accès aux données.
Le problème vient du fait qu'on ne peut pas utiliser l'indice de la boucle $i comme variable dans la value de l'input.
Voilà ce que je fais et ça s'affiche bien, reste à mettre le nom des variables dans valeur et c'est gagné.
<?php
for ($i=0; $i<$Nblignes_contrat; $i++)
{
$ligne_contrat = mysqli_fetch_assoc($resultat_contrat);
$sn =$i + 1;
extract($ligne_contrat);

echo "Contrat :<input name='No' type='text' id='No' value='$sn' size='2' maxlength='2' /><br>";
echo "Nom:<input name='Nom_Produit' type='text' id='Nom_Produit' value=' ' size='30' maxlength='30' />";
echo "Type: <input name='Type_Produit' type='text' id='Type_Produit' value=' ' size='30' maxlength='100' />";
echo "Numéro: <input name='No_Contrat' type='text' id='No_Contrat' size='15' value=' ' maxlength='15' /><br>";
echo "Assuré: <input name=' Assure' type='text' id=' Assure' value=' ' size='15' maxlength='50' />";
echo "P.P: <input name='P.P' type='text' id='P.P' value=' ' size='10' maxlength='10' />";
echo "P.A: <input name='P.A' type='text' id='P.A' value=' ' size='10' maxlength='10' />";
echo "Frac: <input name='Frac' type='text' id='Frac' value=' ' size='5' maxlength='2' />";
echo "Date Effet: <input name='Date_Effet' type='text' id='Date_Effet' value=' ' size='10' maxlength='10' />";
echo "Date Terme: <input name='Date_Fin' type='text' id='Date_Fin' value=' ' size='10' maxlength='10' />";
echo "Règlement: <input name='Reglement' type='text' id='Reglement' value=' ' size='10' maxlength='10' /><br>";
Tu es d'accord avec ça?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

07 juin 2010, 17:21

Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 11 Messages

09 juin 2010, 03:50

Merci Mere-Teresa.
OK j'y penserai pour les prochains fois car je pense avoir comme tout débutant encore des problèmes à solutionner.
Mais je n'ai pas une réponse à mon problème de boucle et de réutilisation de la variable d'indice $si dans l'instruction "echo Input" et que j'ai du remplacer par une variable $sn pour valoriser l'attribut "value".

Code : Tout sélectionner

<?php for ($i=0; $i<$Nblignes_contrat; $i++) { $ligne_contrat = mysqli_fetch_assoc($resultat_contrat); [color=#FF0040]$sn =$i + 1;[/color] extract($ligne_contrat); echo "Contrat :<input name='No' type='text' id='No' [color=#FF0040]value='$sn'[/color] size='2' maxlength='2' /><br>";
Est-ce à dire que les variables d'indice sont des variables réservées?

Eléphanteau du PHP | 11 Messages

09 juin 2010, 04:05

Merci Mere-Teresa. (Je m'aperçois en lisant "la manière de mettre en forme vos messages" qu'il ne faut pas utiliser la balise Couleur dans le code).
OK j'y penserai pour les prochains fois car je pense avoir comme tout débutant encore des problèmes à solutionner.
Mais je n'ai pas une réponse à mon problème de boucle et de réutilisation de la variable d'indice $si dans l'instruction "echo Input" et que j'ai du remplacer par une variable $sn pour valoriser l'attribut "value".

Code : Tout sélectionner

<?php for ($i=0; $i<$Nblignes_contrat; $i++) { $ligne_contrat = mysqli_fetch_assoc($resultat_contrat); $sn =$i + 1; extract($ligne_contrat); echo "Contrat :<input name='No' type='text' id='No' value='$sn' size='2' maxlength='2' /><br>";
Est-ce à dire que les variables d'indice sont des variables réservées?

Eléphant du PHP | 422 Messages

09 juin 2010, 09:41

hello

non, tu peux utilisé $i mais dans ton cas la valeur sera toujours 1 ^^ (dans ton premier poste)
while ($ligne_contrat = mysqli_fetch_assoc($resultat_contrat));
{
extract($ligne_contrat);
$i=1; // <<<<<<<<<<<<<<<<< tu met $i à 1 à chaque itération  
echo "Contrat :<input name='No' type='text' id='No' value='$i' size='2' maxlength='2' />";

$i++;
}
fait
$i = 1; // on place avant le while
while ($ligne_contrat = mysqli_fetch_assoc($resultat_contrat));
{
extract($ligne_contrat);

echo "Contrat :<input name='No' type='text' id='No' value='$i' size='2' maxlength='2' />";

$i++;
}
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 11 Messages

09 juin 2010, 20:04

Merci, je suis d'accord sur l'erreur de logique pour le while , mais je parlais de $Si qui n'est pas reconnu dans une boucle for comme je l'explique:
J'ai une erreur : Notice: Undefined variable: si in C:\wamp\www\TESTPHP\MICHEL\Affichage_Client_5.php on line 268 c'est à dire sur la ligne
echo "Contrat :<input name='No' type='text' id='No' value='$si' size='2' maxlength='2' /><br>";
pour le code suivant :

Code : Tout sélectionner

<?php for ($i=0; $i<$Nblignes_contrat; $i++) { $ligne_contrat = mysqli_fetch_assoc($resultat_contrat); /* $sn =$i + 1; */ extract($ligne_contrat); echo "Contrat :<input name='No' type='text' id='No' value='$si' size='2' maxlength='2' /><br>"; } ?>
C'est la raison pour laquelle je pose la question.

Eléphant du PHP | 422 Messages

10 juin 2010, 10:00

et $si est définie ou ?
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 11 Messages

10 juin 2010, 10:18

OK merci, erreur entre $i et $si. :oops:
Comme quoi faut relire mais comme souvent il vaut mieux que ce soit quelqu'un d'autre que l'auteur qui relise car l'auteur ne voit pas ses fautes de frappe......
Merci à toi.

Eléphant du PHP | 422 Messages

10 juin 2010, 10:28

de rien

... mais peut etre qu'il faut mettre plus de rigueur dans le nom de tes variables :)
$si
$sn ... c'est pas parlant et meme toi tu t'y perd

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphanteau du PHP | 11 Messages

10 juin 2010, 12:00

Tu as raison c'est un bon conseil que j'essaierai de tenir en compte.
Je vais maintenant poursuivre ma formation en PHP et autre Mysql.
A+