Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compter champs spécifique d'un formulaire

Sujet résolu
14 octobre 2018 à 0:05:07

Vassili Joffroy a écrit:

fait nous une boucle pour changer juste i :)


Dans le genre ? .....

for($a = 1; $a < 6; $a++){
if(
            !empty($_POST['salarie'][$a]['civilite']) &&
            !empty($_POST['salarie'][$a]['nom']) &&
            !empty($_POST['salarie'][$a]['prenom'])
        ){
            $cv[$a] = $_POST['salarie'][$a]['civilite'];
            $name[$a] = $_POST['salarie'][$a]['nom'];
            $firstname[$a] = $_POST['salarie'][$a]['prenom'];
        }
}

bon... déjà ca fonctionne pas, j'essaie d'afficher $cv1 (en pensant que $cv prend 1, 2, 3, ...etc à chaque tour de boucle), bref, je try je try et try encore et encore lol

Merci pour tes lumière car je suis encore dans la pénombre, si juste tu peux m’aiguiller en commentant ou expliquant le process pour extraire et manip ces tableau, un grand merci car c'est pas simple dans ce cas précis ....

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 0:10:09

Bonsoir,

Tu es sur la bonne voie sauf que quand tu veux afficher $cv, ce n'est pas une variable mais un tableau donc $cv[1]

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 0:32:57

Aurélien.C a écrit:

Bonsoir,

Tu es sur la bonne voie sauf que quand tu veux afficher $cv, ce n'est pas une variable mais un tableau donc $cv[1]

Testé et à moitié approuvé !

for($a = 1; $a < 6; $a++){
if(
            !empty($_POST['salarie'][$a]['civilite']) &&
            !empty($_POST['salarie'][$a]['nom']) &&
            !empty($_POST['salarie'][$a]['prenom'])
        ){
            $cv[$a] = $_POST['salarie'][$a]['civilite'];
            $name[$a] = $_POST['salarie'][$a]['nom'];
            $firstname[$a] = $_POST['salarie'][$a]['prenom'];
            $separateur[$a] = '. ';
        }
}
echo '<p>La liste de ouf : '.$cv[1].' '.$name[1].' '.$firstname[1].''.$separateur[1].' '.$cv[2].' '.$name[2].' '.$firstname[2].''.$separateur[2].'etc etc etc....</p>';

Le problème est que si les champs pour le salarié 1 ne sont pas remplis, ca me renvoie une erreur, un peu normal en fait vu que le valeur 1 existe pas... 

Si tu as suivi la discussion depuis le départ (je sais y à une tartine à lire mdr), J'ai 5 champs et je veux pas que ca provoque une erreur si un des champs est pas ou mal rempli...

Je vais voir sinon pour activer en javascript les champs salarié les un après les autres vu que c'est un "accordeon" de bootstrap... regardez...

bootstrap accordeon

Du coup, si "salarié 1" bien rempli, alors j'active le lien pour ouvrir "salarié 2" etc etc une idée/une piste peut-être faire faire une chose du style...

merci pour votre aide :)


-
Edité par Artof 14 octobre 2018 à 0:35:41

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 1:02:03

Pour faire simple tu peux refaire une boucle pour l'affichage et tester si le variable est vide
  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 1:29:13

Aurélien.C a écrit:

Pour faire simple tu peux refaire une boucle pour l'affichage et tester si le variable est vide

Je te suis pas ... je comprend pas ce que tu veux dire :/
  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 10:23:34

for($a = 1; $a < 6; $a++){
if(
            !empty($cv[$a]) &&
            !empty($nom[$a]))
        ){
            echo $cv[$a]. ' - '.$name[$a];
        }
}
Tu peux aussi sortir le séparateur de la boucle puisque c'est le même pour tous
  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 10:42:01

Aurélien.C a écrit:

for($a = 1; $a < 6; $a++){
if(
            !empty($cv[$a]) &&
            !empty($nom[$a]))
        ){
            echo $cv[$a]. ' - '.$name[$a];
        }
}

Je test de suite et te fais un retour, merci :)

for($a = 1; $a < 6; $a++){
if(
            !empty($_POST['salarie'][$a]['civilite']) &&
            !empty($_POST['salarie'][$a]['nom']) &&
            !empty($_POST['salarie'][$a]['prenom'])
        ){
            $cv[$a] = $_POST['salarie'][$a]['civilite'];
            $name[$a] = $_POST['salarie'][$a]['nom'];
            $firstname[$a] = $_POST['salarie'][$a]['prenom'];
            $separateur[$a] = '. ';
        }
}
for($a = 1; $a < 6; $a++){
if(
            !empty($cv[$a]) &&
            !empty($name[$a]) &&
            !empty($firstname[$a]) &&
            !empty($separateur[$a]))
        {
            echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];
        }
}
// echo ci-dessous me renvoie cette erreur :
//Notice: Undefined offset: 6 in C:\wamp64...
echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];


Après test, fonctionnel mais pas possible d'afficher les résultats où je veux :/

Pourquoi ?



-
Edité par Artof 14 octobre 2018 à 11:04:17

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 12:58:16

Si tu sors de la boucle pour afficher 
echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];
il faut parcourir le tableau, $a est défini seulement dans la boucle :D et ne prend qu'une place :D
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

14 octobre 2018 à 13:05:59

Vassili Joffroy a écrit:

Si tu sors de la boucle pour afficher 

echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];

il faut parcourir le tableau, $a est défini seulement dans la boucle :D et ne prend qu'une place :D

Là je suis " vielle chanson : so let's we go far " en gros paumé !!!

Je pense/suppose/ suis presque convaincu qu'il va y avoir du foreach dans l'air, mais là, comment ...?

-
Edité par Artof 14 octobre 2018 à 13:13:59

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 13:23:10

tiens regarde ça si sa peut t'aider 

<?php
if (isset($_POST)){
	for ($i=0; $i < 5; $i++) { 
		if (
			!empty($_POST['civilite'][$i]) &&
			!empty($_POST['nom'][$i]) &&
			!empty($_POST['prenom'][$i])
		){
			$salarie[] = [
				'cv' => $_POST['civilite'][$i],
				'name' => $_POST['nom'][$i],
				'firstname' => $_POST['prenom'][$i]
			];
		}
	}

	if (isset($salarie)){
	    foreach ($salarie as $s) {
	        echo $s['cv'] . '<br>';
	    }
	}

}
?>
<form action="" method="POST">
	<?php for ($i=0; $i < 5; $i++) { ?>
		<input type="text" name="civilite[]">
		<input type="text" name="nom[]">
		<input type="text" name="prenom[]"><br>
	<?php } ?>
	<input type="submit">
</form>

c'est ce que tu as fait avec le début de ta prochaine étape :D Tu me dis ce que tu en pense ? 


-
Edité par Vassili Joffroy 14 octobre 2018 à 14:27:49

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

14 octobre 2018 à 13:52:13

petit test de var_dump avec un exemple de la docPHP :

for($a = 1; $a < 6; $a++){
if(
            !empty($cv[$a]) &&
            !empty($name[$a]) &&
            !empty($firstname[$a]) &&
            !empty($separateur[$a]))
        {
            echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];
            $c = $cv[$a];
            $n = $name[$a];
            $f = $firstname[$a];
            $s = $separateur[$a];
            $testA = var_dump($c, $n, $f, $s);
        }
        
}
        
echo $testA;

ca me renvoie ça :

Mr Delorme Thomas.

<small>C:\wamp64\www\en_test\test_form</small><small>.php:35:</small><small>string</small>
 'Mr' (length=2)
<small>C:\wamp64\www\en_test</small><small>\test_form</small><small>.php:35:</small><small>string</small>
 'Delorme' (length=7)
<small>C:\wamp64\www\en_test</small><small>\test_form</small><small>.php:35:</small><small>string</small>
 'Thomas' (length=6)
<small>C:\wamp64\www\en_test</small><small>\test_form</small><small>.php:35:</small><small>string</small>
 '. ' (length=2)

Mme Delorme Bombasse.

<small>C:\wamp64\www\en_test</small><small>\test_form</small><small>.php:35:</small><small>string</small>
 'Mme' (length=3)
<small>C:\wamp64\www\en_test</small><small>\test_form</small><small>.php:35:</small><small>string</small>
 'Delorme' (length=7)
<small>C:\wamp64\www\en_test</small><small>\test_form.php:35:</small><small>st et etc etc.....</small>

Je regarde le doc là ....

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 13:54:01

regarde mon petit bout de code et essaye le :D
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

14 octobre 2018 à 14:02:23

<?php
if (isset($_POST)){
	for ($i=0; $i < 5; $i++) { 
		if (
			!empty($_POST['civilite'][$i]) &&
			!empty($_POST['nom'][$i]) &&
			!empty($_POST['prenom'][$i])
		){
			$salarie[] = [
				'cv' => $_POST['civilite'][$i],
				'name' => $_POST['nom'][$i],
				'firstname' => $_POST['prenom'][$i]
			];
		}
	}

	foreach ($salarie as $s) {
		echo $s['cv'] . '<br>';
	}

}
?>
<form action="" method="POST">
	<?php for ($i=0; $i < 5; $i++) { ?>
		<input type="text" name="civilite[]">
		<input type="text" name="nom[]">
		<input type="text" name="prenom[]"><br>
	<?php } ?>
	<input type="submit">
</form>


Ben disons que je suis perdus complet là, avec ton exemple là, je suis obligé de reprendre aussi la partie de comptage et cela me dis pas comment je faire pour afficher les info ou je veux dans ma page de traitement...

J'ai testé ton code, je peux le compléter je penses pour les autres info mais ton foreach est encore dans la boucle non ? du coup pour l'affichage ou je veux ???que faire ?...

pour le moment, ce qui est fonctionnel, sauf pour l'affichage ou je veux c'est ce code :

for($a = 1; $a < 6; $a++){
if(
            !empty($_POST['salarie'][$a]['civilite']) &&
            !empty($_POST['salarie'][$a]['nom']) &&
            !empty($_POST['salarie'][$a]['prenom'])
        ){
            $cv[$a] = $_POST['salarie'][$a]['civilite'];
            $name[$a] = $_POST['salarie'][$a]['nom'];
            $firstname[$a] = $_POST['salarie'][$a]['prenom'];
            $separateur[$a] = '. ';
        }
}
for($a = 1; $a < 6; $a++){
if(
            !empty($cv[$a]) &&
            !empty($name[$a]) &&
            !empty($firstname[$a]) &&
            !empty($separateur[$a]))
        {
            echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];
            /**$c = $cv[$a];
            $n = $name[$a];
            $f = $firstname[$a];
            $s = $separateur[$a];
            $testA = var_dump($c, $n, $f, $s);**/
        }
        
}
        
echo $testA;

Bref, je vais devoir chercher encore snifff



-
Edité par Artof 14 octobre 2018 à 14:08:46

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 14:07:38

tu as juste a bouger mon foreach ou tu veux afficher tes valeurs, va sur une nouvelle page et c/c mon code comprend le et teste le ! :D
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

14 octobre 2018 à 14:10:40

Vassili Joffroy a écrit:

tu as juste a bouger mon foreach ou tu veux afficher tes valeurs, va sur une nouvelle page et c/c mon code comprend le et teste le ! :D


Je testerai ce soir car je vais devoir partir :) merci pour ton aide
  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 23:24:13

Vassili Joffroy a écrit:

Si tu sors de la boucle pour afficher 

echo $cv[$a].' '.$name[$a].' '.$firstname[$a].''.$separateur[$a];

il faut parcourir le tableau, $a est défini seulement dans la boucle :D et ne prend qu'une place :D


Faux, $a n'est pas uniquement défini dans la boucle puisque l'erreur te dit que l'index 6 n'est pas défini et non que $a n'est pas défini.
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 2:57:50

Si tu veux afficher les différente chaines (civilité nom prénom) séparé d'une virgule, Ru peux utiliser la fonction php implode

si je reprend le programme que je t'avais proposé :

<?php
	if($_POST){
		$noms = array();
		foreach($_POST['salarie'] as $v){
			if(
				!empty($v['civilite']) &&
				!empty($v['nom']) &&
				!empty($v['prenom']) 
			){
				$noms[] = $v['civilite']." ".$v['nom']." ".$v['prenom'];
				
			}
		}
		echo implode( ", " , $noms );
	}
?>
<form method="POST" action="">
	<?php
		for($i = 1; $i < 6; $i++){
		?>
			<h3>Salarié <?=$i?></h3>
			<select name="salarie[<?=$i?>][civilite]">
				<option value="Mr">Mr</option>
				<option value="Mme">Mme</option>
			</select><br />
			<input name="salarie[<?=$i?>][nom]" placeholder="Nom" /><br />
			<input name="salarie[<?=$i?>][prenom]" placeholder="Prénom" /><br /><br />
			<hr>
		<?php
		}
	?>
	<input type="submit" />
</form>



  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 18:23:00

Merci, très propre et fonctionnel, tu me fait découvrir la fonction implode en plus, bref, c'est top :)

<?php
	if($_POST){
		$noms = array();
		foreach($_POST['salarie'] as $v){
			if(
				!empty($v['civilite']) &&
				!empty($v['nom']) &&
				!empty($v['prenom']) 
			){
				$noms[] = $v['civilite']." ".$v['nom']." ".$v['prenom'];
				
			}
		}
		echo implode( ", " , $noms );
	}
?>

Je suis en train de voir si il est possible de contrôler la boucle qui génère les champs. Dans l'idée, j'aimerai avoir le contrôle genre :

<form method="POST" action="">
<a href="champ_en_plus">Ajouter un salarié</a>
	<?php
		for($i = 1; $i < 6; $i++){
		?>
			<h3>Salarié <?=$i?></h3>
			<select name="salarie[<?=$i?>][civilite]">
				<option value="Mr">Mr</option>
				<option value="Mme">Mme</option>
			</select><br />
			<input name="salarie[<?=$i?>][nom]" placeholder="Nom" /><br />
			<input name="salarie[<?=$i?>][prenom]" placeholder="Prénom" /><br /><br />
			<hr>
		<?php
		}
	?>
	<input type="submit" />
</form>

Donc, le salarié 1 est déjà en place et il y à un lien, ou autre et quand je clic dessus, cela génère le salarié 2 etc etc jusqu'au salarié 5...

vous pensez que c'est possible à mettre en place ???

Merci pour toutes vos réponses, j'ai bien appris avec tout ca :)




-
Edité par Artof 15 octobre 2018 à 18:25:02

  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 19:42:31

Vassili Joffroy a écrit:

En js oui ! :)


Donc je pourrais coupler le code ci dessus avec du JS ?

du genre ça ?

<button onclick="myFunction()">New salarié +</button>

<script>
function myFunction() {
    var x = document.createElement("INPUT");
    x.setAttribute("type", "text");
    x.setAttribute("value", "Hello World!");
    document.body.appendChild(x);
}

J'ai déjà regardé mais je vois pas comment coupler cela ... fixer une limite de création de champs à 5 et que ça s'incrémente aussi mdr, que de réflexions lol ;p

Une piste que je bosse dessus ? merci d'avance :)

-
Edité par Artof 15 octobre 2018 à 19:44:04

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 5:20:33

Alors c'est relativement "simple" à faire, on peut le faire une petite requête ajax.

tu mets les champ du formulaire dans un autre fichier que tu vas inclure dans ton formulaire.

tu fait ton bouton qui a pour valeur 2

au clique sur le bouton tu lances ta requête Ajax en transmettant la valeur du bouton et tu mets le retour de la requête à la suite des champs et  tu incrémentes la valeur du bouton.

Je te conseille de lire des cours pour bien comprendre ce qu'est une variable, les boucles, les fonctions, etc ... Sinon t'as pas fini de poser des questions.

je te met le code mais c'est le dernier :p

Je précise que c'est UNE façon de faire un non LA façon de faire.

le fichier du formulaire : 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<?php
	if($_POST){
		$noms = array();
		foreach($_POST['salarie'] as $v){
			if(
				!empty($v['civilite']) &&
				!empty($v['nom']) &&
				!empty($v['prenom']) 
			){
				$noms[] = $v['civilite']." ".$v['nom']." ".$v['prenom'];
				
			}
		}
		echo implode( ", " , $noms );
	}
	$i = 1;
?>
<form method="POST" action="">
	<div class="champs">
		<?php include('champs.php'); ?>
	</div>
	<button value="<? echo $i+1; ?>">Ajouter un autre salarié</button><br /><br />
	<input type="submit" />
</form>

<script>
	$("form").on( "click" , "button" , function(e){
		e.preventDefault();
		var i = $("button").val();
		var a = parseInt(i,10);
		newvalue = a+1;
		$("button").val(newvalue);
		if( i == 5){
			$("button").remove();
		}
		if(i < 6){
			$.post("champs.php", { i : i } , function(data){
				$(".champs").append(data);
				
			},
			"text");
			
		}
	});
</script>

et le fichier champs.php : 

<?php
	if($_POST){
		extract($_POST);
	}
?>
<div id="salarie<?=$i?>">
	<h3>Salarié <?=$i?></h3>
	<select name="salarie[<?=$i?>][civilite]">
		<option value="Mr">Mr</option>
		<option value="Mme">Mme</option>
	</select><br />
	<input name="salarie[<?=$i?>][nom]" placeholder="Nom" /><br />
	<input name="salarie[<?=$i?>][prenom]" placeholder="Prénom" /><br /><br />
</div>



  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 16:18:51

Romuald44 a écrit:

<script>
	$("form").on( "click" , "button" , function(e){
		e.preventDefault();
		var i = $("button").val();
		var a = parseInt(i,10);
		newvalue = a+1;
		$("button").val(newvalue);
		if( i == 5){
			$("button").remove();
		}
		if(i < 6){
			$.post("champs.php", { i : i } , function(data){
				$(".champs").append(data);
				
			},
			"text");
			
		}
	});
</script>

Bonjour à toutes et tous,

Propre le code ;) je vais bosser dessus car sur l'appli que je développe pour mes besoins perso, il pose un problème sur un point, le bouton "ajouter" post et du coup créé une action et me renvoie sur une page de traitement du coup impossible de générer des champs en plus.

PETITE QUESTION ? sur ce code on charge jquery ou ajax :

https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js

Car j'ai déjà jquery.min.js de chargé sur mon template bootstrap 4 ... donc je n'avais pas intégré le script pour les tests ... ECT-CE DEUX CHOSES DISTINCTES ? dois-je intégrer l'url ci dessus en plus ?

Merci en tous les cas pour votre super travail :) ce topic m'a vraiment fait progresser sur pleins de points ;)

Take care every body ;)

-
Edité par Artof 16 octobre 2018 à 17:15:06

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2018 à 15:21:25

Bonjour à toutes et tous,

Bon je n'ai pas réussir à faire fonctionner le générateur de champs AJAX sur mon site (je reviendrai dessus plus tard) mais tout est ok pour mes besoins actuels :)

Je remercie grandement (le mot est faible) tous les contributeurs qui ont passé du temps pour m'aider, votre aide m'a été précieuse et je continue mon apprentissage de php (+ javascript du coup aussi) avec des idées pleins la tête :)

SUJET RÉSOLU ;) et j'espère qu'il pourra aider d'autres personnes.

Take care every body !

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2018 à 15:42:07

Derien et n'hésite pas si tu as la moindre question
  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump

19 octobre 2018 à 16:08:12

Vassili Joffroy a écrit:

Derien et n'hésite pas si tu as la moindre question


Tu gère ;) ( PS : propre ton site ;) ) et franchement vous m'avez vraiment motivé à progresser et apprendre, j'ai certes un peu (beaucoup) grillé les étapes en me lançant dans mon site mais au moins je vais avoir un coup ou deux d’avance pour le cours php d'OPC ;)

Au plaisir ! 

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2018 à 16:36:12

TomDelorme a écrit:

Vassili Joffroy a écrit:

Derien et n'hésite pas si tu as la moindre question


Tu gère ;) ( PS : propre ton site ;) ) et franchement vous m'avez vraiment motivé à progresser et apprendre, j'ai certes un peu (beaucoup) grillé les étapes en me lançant dans mon site mais au moins je vais avoir un coup ou deux d’avance pour le cours php d'OPC ;)

Au plaisir ! 

Merci ! Et tkt c'est comme ca qu'on apprend !

  • Partager sur Facebook
  • Partager sur Twitter

Jeune et ambitieux Htmlspecialschars  - Var_dump