[RESOLU] Récupérer plusieurs valeurs de champs d'un formulaire

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 : [RESOLU] Récupérer plusieurs valeurs de champs d'un formulaire

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 19 nov. 2012, 11:57

Bon bah je sais pas comment te remercier !
C'est nickel ! J'avais compris le principe et la logique, mais il me manquait l'ordre des "ponctuations" :x

Un énorme merci pour toute votre aide =D>

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Saian » 19 nov. 2012, 11:48

J'ai pas regarder tout en détail donc j'assure pas que ça fonctionne, mais c'est déjà plus proche de la bonne solution.
// Adresse qui va recevoir la réservation
$sendTo = "[email protected]";

// En-têtes
$subject = "SUJET DE TEST";
$message = '';
foreach($_POST['nvo'] as $i => $value) {
  $message.= " NUMERO DE VO: ".$_POST['nvo'][$i]." \r \n MARQUE/MODELE:  ".$_POST['description'][$i]." \r \n PRIX:  ".$_POST['prix'][$i]." \r \n ";
}
$headers = '';

// Champs From
mail($sendTo, $subject, $message, "From: [email protected]");

// Message de confirmation
echo "La demande de réservation a bien été envoyée.";
EDIT : j'avais oublié l'opérateur de concaténation dans le foreach pour $message.

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 19 nov. 2012, 11:27

Elle commence bien au dessus du tableau pour finir sous le bouton submit ?
:oops:
C'est rectifié ! Maintenant ça me retourne :
Array
(
    [nvo] => Array
        (
            [0] => 25966
            [1] => 23771
        )

)
La demande de réservation a bien été envoyée.
Mais dans le mail reçu j'ai juste:
NUMERO DE VO: Array 

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Saian » 19 nov. 2012, 11:18

Elle commence bien au dessus du tableau pour finir sous le bouton submit ?

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 19 nov. 2012, 11:17

La balise <form> doit englober tous tes input car seuls les input dans la balise form sont transmis.
Bonjour et merci.
J'ai rajouté la balise <form> mais toujours pareil ... :oops:

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Saian » 19 nov. 2012, 11:12

La balise <form> doit englober tous tes input car seuls les input dans la balise form sont transmis.

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 19 nov. 2012, 10:55

Avec le print_r, j'ai rien du tout :
Array
(
)

Warning: Invalid argument supplied for foreach() in /homepages/29/d438175483/htdocs/occasions/envoi-selection.php on line 8
La demande de réservation a bien été envoyée.
Je désespère ... :mrgreen:

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par AB » 16 nov. 2012, 18:28

Dans ta page de traitement vérifies ton $_POST cela te permettra de voir si tu reçois les données
<?php
echo '<pre>';
print_r($_POST);
echo '</pre>';

//suite
foreach($_POST['nvo'] as $i=>$bidon) {
//..
?>
Ensuite si c'est ok il faut que tu puisse ajouter des données dans tes variables, plutôt que de les remplacer par un nouveau contenu à chaque fois (qu'as tu fais de ma remarque ?).
Une solution est de concaténer (avec un point)
$chaine = '';
foreach ($toto as $value)
{
$chaine .= $value;
}
echo $chaine;

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 16 nov. 2012, 16:49

P'tit up ;-)

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 16 nov. 2012, 09:57

C'est triste mais je n'y arrive vraiment pas ... :oops:

Actuellement, j'ai :
<?php
			$i = 0;
			$j = 0;
			foreach($vehicles as $vehicle) { 
					$url = '/occasions/details.php?nvo='.$vehicle['nvo'];
					?>
					<tr class="row<?php echo $i ?><?=($j == 0 ? ' first' : '')?>">
						<td class="lisaTdPhoto">
                                                    <?php if($vehicle['photo_1']) {?>
                                                        <a href="<?php echo $url ?>"><img src="<?php echo getUrlPhoto($vehicle['id_ext'],$vehicle['photo_1'],1); ?>" alt="<?php echo strtoupper($vehicle['marque']).' '.$vehicle['modele']?> occasion" class="prevPhoto" /></a>
                                                    <?php } ?>
                      </td>
						<td class="lisaTdMain">
							<a href="<?php echo $url ?>"><b><?php echo $vehicle['marque'].' '.$vehicle['modele']?></b></a><br />
						<?php echo $vehicle['version']; ?></td>
						<td class="motor"><?php echo $vehicle['motorisation'] ?></td>
						<td class="km"><?php echo number_format($vehicle['km'], 0, '', ' ') ?> kms</td>
						<td class="annee"><?php echo $vehicle['millesime'] ? $vehicle['millesime'] : 'NC' ?></td>
						<td class="prix"><span><?php echo $vehicle['prix'] ? number_format($vehicle['prix'], 0, '', ' ') : 'NC' ?> €</span></td>
                        <td class="prix"><a style="color:#000;" href="<?=getSelectionUrl('delete', $vehicle['id_voiture'])?>">Retirer de ma réservation</a></td>
					</tr>
                    
                    <input type="hidden" name="nvo[]" value="<?php echo $vehicle['nvo'] ;?>">
					<input type="hidden" name="description[]" value="<?php echo $vehicle['marque'].' '.$vehicle['modele']?>">
					<input type="hidden" name="prix[]" value="<?php echo $vehicle['prix'] ;?>">        
            <?php
			($i == 0) ? $i++ : $i=0;
			$j++;
			}
			?>
			<tr class="lisaFoot">
				<td colspan="7">
				</td>
			</tr>
	  </table>
<?php
			}
			?>
            
					<form id="contactForm" method="post" action="../occasions/envoi-selection.php">
					<input type="submit" value="Reserver ces véhicules"/>
					</form>  
<!-- FIN AFFICHAGE DU STOCK -->
Et dans la page de traitement :
<?php

foreach($_POST['nvo'] as $i=>$bidon) {
// On récupère les valeurs cachées
$vo = $_POST['nvo'];
$description = $_POST['description'];
$prix = $_POST['prix'];
}



// Adresse qui va recevoir la réservation
$sendTo = "[email protected]";

// En-têtes
$subject = "SUJET DE TEST";
$message = " NUMERO DE VO: $vo \r \n MARQUE/MODELE: $description \r \n PRIX: $prix \r \n ";
$headers = '';

// Champs From
mail($sendTo, $subject, $message, "From: [email protected]");

// Message de confirmation
echo "La demande de réservation a bien été envoyée.";

?>

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par AB » 15 nov. 2012, 20:00

Le code que je vous ai communiqué se trouve sur la page qui présente les véhicules déjà sélectionnés par le client, un genre de panier quoi.
Et c'est le contenu de ce panier que je veux récupérer par mail.
Oui ben alors y'a pas de souci, t'es sur la bonne voix. Montre nous ton nouveau formulaire (en utilisant la balise de code php pour entourer ton code, c'est plus lisible).
Sinon aussi fait attention quand tu récupère ton $_POST. Actuellement dans ta boucle
foreach($_POST['nvo'] as $i=>$bidon) {

// On récupère les valeurs cachées
$vo = $_POST['nvo'][$i];
$description = $_POST['description'][$i];
$prix = $_POST['prix'][$i];
}
les variables $vo, $description et $prix sont écrasées par leur dernière valeur rencontrée dans la boucle. Pas étonnant que tu n'en récupère qu'une :wink:

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 15 nov. 2012, 17:53

Les lignes
<input type="hidden" name="nvo[]" value="<?php echo $vehicle['nvo'] ;?>">
<input type="hidden" name="description[]" value="<?php echo $vehicle['marque'].' '.$vehicle['modele']?>">
doivent se trouver dans la boucle, pas à l'extérieur.
L'inconvénient de ton système c'est tu en envoies toutes les valeurs affichée et que le visiteur ne pourra pas faire une sélection dans la liste. C'est bien cela que tu veux ? Sinon tu devras faire un système de panier ou alors si tu n'as qu'une page de sélection tu pourrais implémenter des checkbox dans ton formulaire. Il est important que tu aie bien défini le système avant de coder.
Le code que je vous ai communiqué se trouve sur la page qui présente les véhicules déjà sélectionnés par le client, un genre de panier quoi.
Et c'est le contenu de ce panier que je veux récupérer par mail.

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 15 nov. 2012, 17:40

Bah le but du jeu, c'est qu'une fois que le visiteur a fait sa sélection (et que donc les véhicules sont affichés sur la page), il m'envoi cette sélection de véhicules par mail ...

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par AB » 15 nov. 2012, 17:28

Les lignes
<input type="hidden" name="nvo[]" value="<?php echo $vehicle['nvo'] ;?>">
<input type="hidden" name="description[]" value="<?php echo $vehicle['marque'].' '.$vehicle['modele']?>">
doivent se trouver dans la boucle, pas à l'extérieur.
L'inconvénient de ton système c'est tu en envoies toutes les valeurs affichée et que le visiteur ne pourra pas faire une sélection dans la liste. C'est bien cela que tu veux ? Sinon tu devras faire un système de panier ou alors si tu n'as qu'une page de sélection tu pourrais implémenter des checkbox dans ton formulaire. Il est important que tu aie bien défini le système avant de coder.

Re: Récupérer plusieurs valeurs de champs d'un formulaire

par Lilou000 » 15 nov. 2012, 17:16

La première chose à comprendre, c'est qu'actuellement tu as un formulaire avec un bouton par annonce (regarde le code html de la page dans le navigateur). Donc tu envoies uniquement les données du formulaire dont tu utilise le bouton.

Si tu veux envoyer toutes les annonces, il faut donc créer qu'un seul formulaire : sortir <form...> et </form> de la boucle de construction de la liste des annonces.

Ensuite comme tu ne peux pas avoir plusieurs <input...> avec le même nom dans un formulaire, il faut remplacer le nom en ajoutant [] à la fin. C'est à dire nvo devient nvo[], prix[]...

Dans le script de récupération $_POST['nvo'] devient un tableau avec $_POST['nvo'][0], $_POST['nvo'][1]... à toi d'adapter le script.

Remarque, je n'ai pas regardé le script à fond, mais tu pourrais refaire le select dans le script d'envoi de mail pour récupérer les données et constituer le mail.
Oui, je comprends la démarche, et c'est ce que j'essaye de faire avec le code suivant :

------Formulaire sorti de la boucle------

Code : Tout sélectionner

<form id="contactForm" method="post" action="../occasions/envoi-selection.php"> <input type="hidden" name="nvo[]" value="<?php echo $vehicle['nvo'] ;?>"> <input type="hidden" name="description[]" value="<?php echo $vehicle['marque'].' '.$vehicle['modele']?>"> <input type="hidden" name="prix[]" value="<?php echo $vehicle['prix'] ;?>"> <input type="submit" value="Reserver ces véhicules"/> </form>
-------Et le traitement envoi-selection.php------

Code : Tout sélectionner

<?php foreach($_POST['nvo'] as $i=>$bidon) { // On récupère les valeurs cachées $vo = $_POST['nvo'][$i]; $description = $_POST['description'][$i]; $prix = $_POST['prix'][$i]; } // Adresse qui va recevoir la réservation $sendTo = "[email protected]"; // En-têtes $subject = "SUJET DE TEST"; $message = " NUMERO DE VO: $vo \r \n MARQUE/MODELE: $description \r \n PRIX: $prix \r \n "; $headers = ''; // Champs From mail($sendTo, $subject, $message, "From: [email protected]"); // Message de confirmation echo "La demande de réservation a bien été envoyée."; ?>
Mais ça continue à ne m'envoyer qu'une annonce ... :(