[php] utilisation du "if" en temps que compteur

utilisation du "if" en temps que compteur [php] - PHP - Programmation

Marsh Posté le 12-03-2006 à 20:10:50    

Bonjour à toutes et tous.
Apres avoir étudié python et mapple en cours je me suis dit que j'allais me mettre au php désormais et c un peu chaud pour le début... je pense avoir la logique, aquise avec python et mapple mais l'adaptation du php au html est un peu brutale. Je sais qu'il y a plein de parasites sur le forum demandant des scripts tout fait ce n'est pas mon cas je vous demande plutot quelle est la direction à suivre.
 
Alors venons en au fait.
j'envoie un formulaire à quelqu'un constitué d'un tableau de n lignes et 4 colonnes. dans chaque ligne il y a des champs à remplir.
seulement je ne sais pas combien de ligne utilisera la personne. Plutot que de créer un tableau avec 1000 lignes et 4 colonnes (vous comprendrez aisément que c'est aussi inintéressant que long...) je souhaite faire 10 lignes. Une fois ces 5 lignes faites je mets un petit bouton "+" qui rajoute automatiquement 10 lignes de plus.
 
Jusque là tout va bien. Mais ensuite ça se complique.
je souhaite que juste avant la première case (donc toute la première colonne) s'affiche un numéro (=j'incrémente)
 
        titre 1      titre 2      titre 3        titre 4
 1
 2
 2
 4
 ..
 ..
 ..
 n
 
comme chaque ligne du tableau commence par <tr> je me suis dit qu'il fallait que je crée une variable et que chaque fois que qqc (et un de mes problemes est que je ne sais pas ce qu'est ce qqc..., pb de logique je sais...) voit <tr> il incrémente la variable $i créée au préalable (mais dans ce cas, comment la définir... $i="?????" et la place dans la colonne 1... du genre if ($var1="<tr>" ) {echo $i++ ;}
 
 
Si tout cela n'est pas tres clair c'est que c'est un peu le flou dans mon esprit également. Je vous remercie en tout cas pour toute suggestion!
Bien cordialement,
Pierre.

Reply

Marsh Posté le 12-03-2006 à 20:10:50   

Reply

Marsh Posté le 12-03-2006 à 20:17:41    

Pour le rajout de ligne, je te conseillerai d'utiliser du javascript, j'ai vu ce genre de chose faite en javascript et cela marchai trés bien.
Je vois où est ton pb au niveau du compteur?

Reply

Marsh Posté le 12-03-2006 à 20:19:49    

kaiser_schum a écrit :

Bonjour à toutes et tous.
Apres avoir étudié python et mapple en cours je me suis dit que j'allais me mettre au php désormais et c un peu chaud pour le début... je pense avoir la logique, aquise avec python et mapple mais l'adaptation du php au html est un peu brutale. Je sais qu'il y a plein de parasites sur le forum demandant des scripts tout fait ce n'est pas mon cas je vous demande plutot quelle est la direction à suivre.
 
Alors venons en au fait.
j'envoie un formulaire à quelqu'un constitué d'un tableau de n lignes et 4 colonnes. dans chaque ligne il y a des champs à remplir.
seulement je ne sais pas combien de ligne utilisera la personne. Plutot que de créer un tableau avec 1000 lignes et 4 colonnes (vous comprendrez aisément que c'est aussi inintéressant que long...) je souhaite faire 10 lignes. Une fois ces 5 lignes faites je mets un petit bouton "+" qui rajoute automatiquement 10 lignes de plus.
 
Jusque là tout va bien. Mais ensuite ça se complique.
je souhaite que juste avant la première case (donc toute la première colonne) s'affiche un numéro (=j'incrémente)
 
        titre 1      titre 2      titre 3        titre 4
 1
 2
 2
 4
 ..
 ..
 ..
 n
 
comme chaque ligne du tableau commence par <tr> je me suis dit qu'il fallait que je crée une variable et que chaque fois que qqc (et un de mes problemes est que je ne sais pas ce qu'est ce qqc..., pb de logique je sais...) voit <tr> il incrémente la variable $i créée au préalable (mais dans ce cas, comment la définir... $i="?????" et la place dans la colonne 1... du genre if ($var1="<tr>" ) {echo $i++ ;}
 
 
Si tout cela n'est pas tres clair c'est que c'est un peu le flou dans mon esprit également. Je vous remercie en tout cas pour toute suggestion!
Bien cordialement,
Pierre.


 
Bon, ta question est effectivement un peu flou. Mais je pense que si tu construits ton tableau en php, rien ne t'empêche d'y mettre une colonne contenant ton compteur.
Style

Code :
  1. <HTML><HEAD></HEAD>
  2. <BODY>
  3. <TABLE>
  4. <?
  5. for ($i=1; $i <= 10; $i++)
  6.       printf("<TR><TD>%d</TD><TD>xxx</TD><TD>yyy</TD><TD>zzz</TD></TR>\n", $i);
  7. ?>
  8. </TABLE>
  9. </BODY></HTML>


Message édité par Sve@r le 12-03-2006 à 20:20:38

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 12-03-2006 à 20:39:52    

merci pour vos 2 réponses rapides!
 
->Swe@r: dans votre code, ligne 6,entre <TD> et </TD>, ne voulant pas à chq ligne xxx, yyy, zzz et voulant que la personne remplisse les champs elle meme, je met cela entre les :
 
 
<TD><input type="text" name="reference1_1" size="20" value="reference" onFocus="this.value=''" maxlength="35"></TD>
 
<TD><input type="text" name="prix1_2" size="20" value="prix" onFocus="this.value=''" maxlength="70"</TD>
 
<TD><input type="checkbox" name="checkbox1_3" value="checkbox"></TD>
 
Savez vous pourquoi il m'indique ERROR: parse error, unexpected T_STRING
 
pourtant le html ne me pose pas de problème d'ordinaire et je ne vois pas conceptuellement pourquoi dans chq ligne et chaque colonne je ne peux pas mettre un input et une checkbox...

Reply

Marsh Posté le 12-03-2006 à 22:09:33    

kaiser_schum a écrit :

merci pour vos 2 réponses rapides!
 
->Swe@r: dans votre code, ligne 6,entre <TD> et </TD>, ne voulant pas à chq ligne xxx, yyy, zzz et voulant que la personne remplisse les champs elle meme, je met cela entre les :
 
 
<TD><input type="text" name="reference1_1" size="20" value="reference" onFocus="this.value=''" maxlength="35"></TD>
 
<TD><input type="text" name="prix1_2" size="20" value="prix" onFocus="this.value=''" maxlength="70"</TD>
 
<TD><input type="checkbox" name="checkbox1_3" value="checkbox"></TD>
 
Savez vous pourquoi il m'indique ERROR: parse error, unexpected T_STRING
 
pourtant le html ne me pose pas de problème d'ordinaire et je ne vois pas conceptuellement pourquoi dans chq ligne et chaque colonne je ne peux pas mettre un input et une checkbox...


 
Bon, déjà on peut se tutoyer entre programmeurs qui s'entraident...
 
Sinon, il n'y a aucun problème pour mettre du "input"... mais faut faire gaffe aux guillemets double car il y a déjà des guillemets double au printf.
 
Donc soit tu protèges tes guillemets double par des backslashes, soit tu mets des guillemets simples
printf("<TD><input type=\"text\" name=\"reference1_1\" size=\"20\" value=\"reference\" onFocus=\"this.value=''\" maxlength=\"35\"></TD>\n" );
 
printf("<TD><input type='text' name='prix1_2' size='20' value='prix' onFocus='this.value=\'\'' maxlength='70'</TD>\" );


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 12-03-2006 à 22:45:51    

perso je ferais plutot :
 
printf('<TD><input type="text" name="prix1_2" size="20" value="prix" onFocus="this.value=\'\'" maxlength="70"</TD>');


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 13-03-2006 à 00:51:28    

Merci à tous, je progresse... je viens encore de franchir une étape! c'est vraiment sympa les algos, je suis comme un gamin devant son nouveau joujou... mais bon parfois ça prend un peu la tête. là je bloque et ça m'énerve... j'essaie de résoudre tout seul d'abord et j'espère ne pas avoir à refaire à vous (lol, ne le prenez pas mal, c'est juste que j'aurais réussi :d)
 
Merci et bonne soirée,
Pierre.

Reply

Marsh Posté le 13-03-2006 à 02:01:56    

Last but not least. Vous avez tout suivi jusque là...
 
désormais je me retrouve avec un tableau du type:
 
                      référence                                                      prix
a1        input... name='reference1_$i'                            input... name='prix2_$i'
a2
a3
..
..
..
a10
 
 
NB:
-la colonne de gauche est gérée avec incrémentation.
-les éléments de la colonne "référence" et de la colonne "prix" ont un nom qui se met automatiquement grace à l'incrementation également (par exemple sur la ligne "a3", j'obtiens quand je mets "afficher le code source" : name='reference1_$3'      name='prix2_$3'  
 
Jusque là tout est PARFAIT!
 
mais ensuite cela se complique... je veux envoyer cela sur ma base de donnée que je gère avec phpmyadmin.
je précise que le formulaire complété, la personne clique sur le bouton "envoyer" <form method="POST" action="ad.php">
 
voilà ce que j'ai eu l'idée de mettre (je suis parti d'un script trouvé que j'ai étudié et modifié: mis en rouge)que j'ai appelé ad.php
 

Citation :

<?php
// On commence par récupérer les champs
for ($i = 1; $i <= 10; $i++)
if(isset($_POST['reference1_$i'])) $reference1_$i=$_POST['reference1_$i'];    <------------ LIGNE 4    
else      $reference1_$i="";
 
if(isset($_POST['prix2_$i']))      $prix2_$i=$_POST['prix2_$i'];
else      $prix2_$i="";
 
 
 
// On vérifie si les champs sont vides
if(empty($reference1_$i) AND empty($prix2_$i)
    {
    echo '<font color="red">Attention</font>';
    }
 
// Aucun champ n'est vide, on peut enregistrer dans la table
else
    {
       // connexion à la base
$db = mysql_connect('sql.free.fr', 'monlogin', 'monpassword')  or die('Erreur de connexion '.mysql_error());
// sélection de la base
 
    mysql_select_db('test_tbl',$db)  or die('Erreur de selection '.mysql_error());
 
    // on écrit la requête sql
    $sql = "INSERT INTO test_tbl(id, reference, prix) VALUES('','$reference1_$i','$prix2_$i')";
 
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
 
    // on affiche le résultat pour le visiteur
    echo 'Vos infos on été ajoutées.';
 
    mysql_close();  // on ferme la connexion
    }
 
?>


 
et  j'ai l'erreur parse error, unexpected T_VARIABLE on line 4 sur ad.php
 
Je sais ça parait compliqué... je soupsonne un conflit de notations avec ma variable à qui je donne un nom+une autre variable... mais comment faire autrement?? le principe me semble pourtant correct...

Message cité 1 fois
Message édité par kaiser_schum le 13-03-2006 à 02:26:04
Reply

Marsh Posté le 13-03-2006 à 09:57:03    

kaiser_schum a écrit :

Je sais ça parait compliqué... je soupsonne un conflit de notations avec ma variable à qui je donne un nom+une autre variable... mais comment faire autrement?? le principe me semble pourtant correct...


Tu as probablement raison. Utiliser "$reference_$i" comme variable de variale est probablement pas génial. En Bourne Again Shell, cela pourrait peut-être marcher en faisant "${reference_$i}" mais en PHP, je suis pas certain.
 
Pourquoi ne pas utiliser un tableau ? Tu sais ? Les trucs qui ont été inventés pour gérer "x" fois la même chose ??? :D  
 
En faisant un truc de ce type

$reference[$i]=$_POST["reference_$i"]

tu devrais arriver à obtenir un résultat plus convainquant...
 

anapajari a écrit :

c'est ça qui va pas:

Code :
  1. $reference1_$i


tu ne peux pas faire ça en php... et de toute façon cela me semble inutile de "créer" une nouvelle variable a chaque itération de la boucle!!!
Utilise plutot les tableaux:

Code :
  1. $reference[$i] = $_POST['reference1_$i'];


 
edit:[:benou_grilled]


 
Héhé grilled de qq secondes  :bounce:  


Message édité par Sve@r le 13-03-2006 à 10:01:40

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-03-2006 à 09:59:34    

c'est ça qui va pas:

Code :
  1. $reference1_$i


tu ne peux pas faire ça en php... et de toute façon cela me semble inutile de "créer" une nouvelle variable a chaque itération de la boucle!!!
Utilise plutot les tableaux:

Code :
  1. $reference[$i] = $_POST['reference1_$i'];


 
Enfin un conseil 'perso', avant de "vraiment" te mettre au php, je te conseille de vraiment maitriser l'html ( voir l'xhtml). Tu n'en as pas pour longtemps et ça t'évitera bien des problèmes plus tard...
 
edit:[:benou_grilled]

Message cité 2 fois
Message édité par anapajari le 13-03-2006 à 10:00:19
Reply

Marsh Posté le 13-03-2006 à 09:59:34   

Reply

Marsh Posté le 13-03-2006 à 10:02:55    


 
Héhé...  :bounce:  :bounce:  :bounce:


Message édité par Sve@r le 13-03-2006 à 10:03:21

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed