boucle for each.

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 : boucle for each.

Re: boucle for each.

par xTG » 19 juin 2012, 11:24

Si c'est un fichier externalisé on peut pas mettre de PHP dedans dans ce cas. ;)
Mais tu peux toujours mettre du JS pour renseigner la variable dans ton fichier principal.
En gros dans ton fichier externalisé :
[javascript]var monIndex = 0;[/javascript]
Dans ton fichier php :
echo '<script type="text/javascript">
  monIndex = ' . $monIndexPHP++ . '
</script>';

Re: boucle for each.

par piotrowski-s » 19 juin 2012, 09:27

j'ai procéder ainsi mais cela bloque:
[javascript]counter = 0;
var limit = 25;
var monIndexJs = <?php echo $i++; ?>
function addaction(divName){
if (counter == limit) {
alert("Vous avez atteint la limite de" + counter + " actions");
}
else {
var newtr = document.createElement('tr');
newtr.innerHTML = "<td><input name='data["+monIndexJs+"][id]' type='text' value='' size='5' readonly='readonly' placeholder='AUTOMATIQUE' /></td><td><input name='data["+monIndexJs+"][code_s]' type='text' value='' size='10' placeholder='CODE SCENARIO' /></td><td><input name='data["+monIndexJs+"][titre]' type='text' value='' size='50' placeholder='TITRE DU SCENARIO' /></td><td><input name='data["+monIndexJs+"][action]' type='text' value='' placeholder='ACTION' /></td><td><input name='data["+monIndexJs+"][libelle]' type='text' value='' size='50' placeholder='DESCRIPTION' /></td><td><input name='data["+monIndexJs+"][jour]' type='text' value='' size='5' placeholder='NOMBRE DE JOURS' /></td><td>&nbsp;<img src='images/delete.png' width='24' height='24' alt='supprimer' onClick='removeElement("+counter+");'></td> ";
boxa.appendChild(newtr).setAttribute('id', ""+counter+"");
counter++;
monIndexJs++;
}
}[/javascript]

en fait le soucis intervient a cause du javascript externalisé car j'ai un js/addinput.js
dans une balise type script langage javascript src=js/addinput.js

mais quand je le met sur la même page ça fonctionne pas,

Re: boucle for each.

par piotrowski-s » 19 juin 2012, 09:17

non en fait je rajoutes des champs, vierges, grâce à la fonction addinput de javascript.

mais ce n'est pas en ajax, je clic sur un bouton ca rajoute une ligne du tableau vierge.

Re: boucle for each.

par xTG » 19 juin 2012, 09:15

Ah oui non en fait c'est encore plus simple. Je croyais que tu rajoutais des champs, mais en fait tu les dupliques.
Dans ce cas il suffit de créer une variable JS et de l'initialiser avec la valeur $i après son affichage des éléments.
var monIndexJs = <?php echo $monIndexPHP++; ?>

Re: boucle for each.

par piotrowski-s » 19 juin 2012, 09:05

mais je ne sais pas comment faire pour qu'il le récupère.

J'ai donc fais <?php $i="0" ?>

et a chaque tour de boucle j'ai ça: <input type="hidden" value="<?php echo ++$i ?>

mais pour le javascript je ne sais pas comment procéder.

Re: boucle for each.

par xTG » 19 juin 2012, 09:03

Mets un input hidden avec l'index que tu utilises pour la série courante.
Ainsi ton script JS pourra aller récupérer l'index et l'utiliser.

Re: boucle for each.

par piotrowski-s » 19 juin 2012, 09:02

je pensais que c'était automatique,

le soucis c'est que j'ai ceux en php puis ceux générés grâce au javascript et forcément les deux commencent de zero donc je vais avoir des conflits...

Re: boucle for each.

par xTG » 19 juin 2012, 09:01

C'est ce que je pensais, il te génère un nouvel index pour chaque input.
Et toi il te faut un index par groupe d'input.

Il faut donc que tu génères une variable que tu incrémenteras pour avoir des noms de ce type : data[tonIndexIncremente][id]

Re: boucle for each.

par piotrowski-s » 19 juin 2012, 08:59

BOnjour , merci pour ta réponse rapide,

je reçois tout cela:

array
'data' =>
array
0 =>
array
'id' => string '12' (length=2)
1 =>
array
'code_s' => string '01' (length=2)
2 =>
array
'titre' => string 'VISITES DOM REGION PARISIENNE POUR CONFRERES' (length=44)
3 =>
array
'action' => string 'TRANSCOR' (length=8)
4 =>
array
'libelle' => string '' (length=0)
5 =>
array
'jour' => string '0' (length=1)
6 =>
array
'id' => string '13' (length=2)
7 =>
array
'code_s' => string '01' (length=2)
8 =>
array
'titre' => string 'VISITES DOM REGION PARISIENNE POUR CONFRERES' (length=44)
9 =>
array
'action' => string 'FINACTIO' (length=8)
10 =>
array
'libelle' => string '' (length=0)
11 =>
array
'jour' => string '60' (length=2)
12 =>
array
'id' => string '' (length=0)
13 =>
array
'code_s' => string '01' (length=2)
14 =>
array
'titre' => string 'VISITES DOM REGION PARISIENNE POUR CONFRERES' (length=44)
15 =>
array
'action' => string 'JUDACTIO' (length=8)
16 =>
array
'libelle' => string '' (length=0)
17 =>
array
'jour' => string '30' (length=2)

Re: boucle for each.

par xTG » 19 juin 2012, 08:57

Je n'ai jeté qu'un rapide coup d'oeil mais oui le nom de tes inputs correspond à la structure que tu traites.
Debug avec un var_dump($_POST); pour voir la tête de l'array que tu reçois.

boucle for each.

par piotrowski-s » 19 juin 2012, 08:12

Bonjour à tous,

j'ai un soucis de code, a vrai dire j'ai toujours eu du mal avec ce genre de boucles.

En fait j'ai pour commencer plusieurs liasses dans ma bdd, ces dernières ont toutes un dénominateurs commun,

donc quand je les affiche, j'y accèdes par un while et comme ces liasses ont vocations à être modifiée, je les affiches directement dans des input,

cela me donne le code suivant:
<form action="#" method="post">
<?php $sql="SELECT * FROM `scenarii` WHERE `code_s`='".mysql_real_escape_string($_GET['code_s'])."'";
$result= mysql_query($sql) or die(__LINE__.mysql_error().$sql);
echo "<table width='100%' id='boxa' align='center' >";
echo "<thead><tr><th scope='col' width='5%'><strong>ID</strong></th><th scope='col' width='5%'><strong>CODE</strong></th><th scope='col' width='20%'><strong>TITRE</strong></th><th scope='col' width='15%'><strong>ACTION</strong></th><th scope='col' width='30%'><strong>DESCRIPTION</strong></th><th scope='col' width='5%'><strong>JOURS</strong></th><th scope='col' width='25%'><strong>ACTIONS</strong></th></tr></thead><tbody>";
$i=0;
while($donnees= mysql_fetch_assoc($result)) {
?>
	<tr>
    	<td><input name="data[][id]" type="text" value="<?php echo strtoupper($donnees['id']) ; ?>" size="5" readonly="readonly" /></td>
        <td><input name="data[][code_s]" type="text" value="<?php echo strtoupper($donnees['code_s']) ; ?>" size="10" readonly="readonly"  /></td>
        <td><input name="data[][titre]" type="text" value="<?php echo strtoupper($donnees['titre']) ; ?>" size="50" readonly="readonly" /></td>
        <td><input name="data[][action]" type="text" value="<?php echo strtoupper($donnees['action']) ; ?>" /></td>
        <td><input name="data[][libelle]" type="text" value="<?php echo strtoupper($donnees['libelle']) ; ?>" size="50" /></td>
        <td><input name="data[][jour]" type="text" value="<?php echo strtoupper($donnees['jour']) ; ?>" size="5" /></td>
		<td><a href="javascript:confirmDelete('delete-action-relance.php?id=<?php echo $donnees['id'] ; ?>')"><img src="images/list-delete.png" width="24" height="24" border="0" /></a> <a href="#" onClick="addaction('dynamicInput');"><img src="images/list2-add.png" width="24" height="24" border="0" /></a> <a href="duplicate-action-scenario.php?id=<?php echo $donnees['id'] ; ?>" ><img src="images/copy.png" width="24" height="24" border="0" /></a></td></tr>
     <?php } ?>   <script src="js/addInput.js" language="Javascript" type="text/javascript"></script>
   </tbody>
</table>
j'ai donc dans le code javascript suivant qui peut me rajouter a la volée d'autres champs pour le formulaire:[javascript]counter = 0;
var limit = 25;
function addaction(divName){
if (counter == limit) {
alert("Vous avez atteint la limite de" + counter + " actions");
}
else {
var newtr = document.createElement('tr');
newtr.innerHTML = "<td><input name='data[][id]' type='text' value='' size='5' readonly='readonly' placeholder='AUTOMATIQUE' /></td><td><input name='data[][code_s]' type='text' value='' size='10' placeholder='CODE SCENARIO' /></td><td><input name='data[][titre]' type='text' value='' size='50' placeholder='TITRE DU SCENARIO' /></td><td><input name='data[][action]' type='text' value='' placeholder='ACTION' /></td><td><input name='data[][libelle]' type='text' value='' size='50' placeholder='DESCRIPTION' /></td><td><input name='data[][jour]' type='text' value='' size='5' placeholder='NOMBRE DE JOURS' /></td><td>&nbsp;<img src='images/delete.png' width='24' height='24' alt='supprimer' onClick='removeElement("+counter+");'></td> ";
boxa.appendChild(newtr).setAttribute('id', ""+counter+"");
counter++;
}
}
[/javascript]

Donc en dépit de cela j'essaie d'enregistrer les éléments dans ma base de donnée j'ai donc fair un for each:
<?php if(isset($_POST['go']))
{
foreach($_POST['data'] as $data){
    if (!empty($data['code_s'])){
$sql2="DELETE FROM scenarii WHERE code_s='".mysql_real_escape_string($_GET['code_s'])."'";
mysql_query($sql2) or die(__LINE__.mysql_error().$sql2); 		
$sql7 = '
INSERT INTO  scenarii SET 
code_s				= "'.mysql_real_escape_string($data['code_s']).'", 
titre				= "'.mysql_real_escape_string($data['titre']).'",
action 				= "'.mysql_real_escape_string($data['action']).'", 
libelle             = "'.mysql_real_escape_string($data['libelle']).'",
jour 				= "'.mysql_real_escape_string($data['jour'])."'" ;    
mysql_query($sql7) or die(__LINE__.mysql_error().$sql7);
echo "TERMINE" ;
    } 
  }	
}
?>
donc il me dit que j'ai plusieurs erreurs, à priori les variables ne seraient pas définies, je ne comprends pas pourquoi,
car j'ai bien fais en suivant la structure, c'est à dire que la il me dit que mes variables $date['var'] ne sont pas définies.


Par avance merci pour votre aide.