[RESOLU] récupérer correctement variable depuis 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 correctement variable depuis formulaire

Re: [RESOLU] récupérer correctement variable depuis formulaire

par two3d » 31 oct. 2023, 16:51

Ne jamais faire confiance à ce que l'utilisateur envoi. Toujours vérifier les données reçues !

https://www.youtube.com/watch?v=sIsjlfBZVzo

Re: [RESOLU] récupérer correctement variable depuis formulaire

par nestor94 » 31 oct. 2023, 16:40

Aucun soucis, ce ne sont que des chiffres...

Re: [RESOLU] récupérer correctement variable depuis formulaire

par two3d » 31 oct. 2023, 13:18

Super, penses à vérifier que les valeurs sont bien des numéros pour éviter les injections SQL.

Re: récupérer correctement variable depuis formulaire

par nestor94 » 31 oct. 2023, 13:02

Merci les gars, ça fonctionne tel que je le souhaitais.
J'ai pris la solution de two3d

Re: récupérer correctement variable depuis formulaire

par ynx » 30 oct. 2023, 15:21

Bonjour,

Il faudrait parcourir le tableau $_POST['n'] pour construire dynamiquement la requête sql en fonction des cases cochées.

Pour exemple (code non testé) ;
if ($_POST['n'] && is_iterable($_POST['n'])) {
	$columns = [];
	$values = [];
	$i = 1;
	
	foreach($_POST['n'] as $checked) {
		$columns[] = 'n' . $i;
		$values[] = intval($checked);
		$i++;
	}
	
	$query = 'INSERT INTO xxx (' . implode(', ', $columns) . ') VALUES (' . implode(',', array_fill(0, count($values), '?')) . ')';
	
	$stmt = $pdo->prepare($query);
	$stmt->execute($values);
}

Re: récupérer correctement variable depuis formulaire

par two3d » 30 oct. 2023, 15:11

Il faut savoir qu'une checkbox non cochée n'existe pas dans $_POST.

Ta logique n'est bonne : tu enregistre une entrée pour chaque case coché, il te faut plutôt enregistrer une seule fois toutes les valeurs.

Enregistre dans un array tes 3 cases cochées, puis insère une seule entrée dans ta BDD.
<?php
if(isset($_POST['jouer'])){
	if(isset($_POST['n'])){
		$cases_cochees = [];
		foreach( $_POST['n'] as $valeur){
			$cases_cochees[] = $valeur;
		}
		
		echo "INSERT INTO xxxx (n1,n2,n3) VALUES ('{$cases_cochees[0]}','{$cases_cochees[1]}','{$cases_cochees[2]}');";
	}
}
?>
Ici, une idée de comment supprimer des entrées d'une table SQL via des cases à cocher : Suppression et Édition Multiples avec Cases à Cocher (checkbox - PHP)

récupérer correctement variable depuis formulaire

par nestor94 » 30 oct. 2023, 10:44

Bonjour,
Les variables cochées dans le formulaire suivant ne s'enregistrent pas convenablement en table.
if( isset($_POST['jouer']) )
{
if(isset($_POST['n']))	
{
foreach( $_POST['n'] as $valeur )
   {
$n=$valeur;	
$sql = "INSERT INTO xxxx (n1,n2,n3) VALUES ('$n','$n','$n')";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
    }
}
}
?>
<form method='POST' action=''>
<center>
<br><b>COCHEZ 3 NUMÉROS</b>
<br><br>
<input type="checkbox" name="n[]" value="1" id="1">1<input type="checkbox" name="n[]" value="2" >2<input type="checkbox" name="n[]" value="3" >3
<input type="checkbox" name="n[]" value="4" >4<input type="checkbox" name="n[]" value="5" >5<input type="checkbox" name="n[]" value="6" >6
<br>
<input type="submit" name="jouer" value="jouer">
</form>
le résultat enregistré en table:
Image

au lieu de (par exemple) n1 = 3 n2= 4 n3= 5 sur la meme ligne