$_POST et les espaces...

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 : $_POST et les espaces...

par DocType » 01 avr. 2007, 21:59

et de 48 ! :lol:

par zeus » 01 avr. 2007, 20:38

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

par Invité » 01 avr. 2007, 20:31

Cyrano : respect...

c'est effectivement ca.
J'essaye en ce moment d'apprendre à séparer le html du php, mais dans l'urgence les mauvaises habitudes reprennent le dessus et me font galérer.
Belle leçon...
Merci à toi,
peux-tu mettre "résolu"?
A+ :)

par Cyrano » 01 avr. 2007, 20:24

Bingo : tu as une ligne qui génère les options et envoie du HTML non conforme :
echo "<option value=".$concaten.">".$concaten."</option>";
Si la valeur de $concaten comporte des espaces, par exemple "une phrase quelconque", ça va générer ceci :

Code : Tout sélectionner

<option value=une phrase quelconque>une phrase quelconque</option>
La valeur devrait être encadrée de guillemets : comme il n'y en a pas, on passe au HTML 4 qui tolère l'absence des guillemets mais ne prendra en compte que la première valeur rencontrée après l'attribut.

Correction :
echo '<option value="'.$concaten .'">'.$concaten.'</option>';
va produire :

Code : Tout sélectionner

<option value="une phrase quelconque">une phrase quelconque</option>
Et là tu verras la valeur normale s'enregistrer.

par Invité » 01 avr. 2007, 20:12

1ère page
Le formulaire
echo '<table border="1" width="400" align="center">'
	.'<form method="post" action="AffectBrevUser2.php?val='.$Login.'">'
    		.'<tr>'
     			.'<td width="400" colspan="3" class="h2d">Brevets à affecter à l\'utilisateur</td>'
		.'</tr>'
    		.'<tr>'
     			.'<td width="400" colspan="3" class="h2"><select name="id">';
Remplissage de la liste déroulante
$quiq = "SELECT Brevets FROM brevets LEFT JOIN braffectation
	ON brevets.Brevets = braffectation.BrevUser WHERE braffectation.BrevUser Is Null ORDER BY Brevets";
$ceuxq = mysql_query($quiq,$db) or die('Erreur SQL !<br>'.mysql_error());

//Rajout des items selectionnés dans la liste déroulante
//----------------------------------------------------------

while ($vale=mysql_fetch_array($ceuxq))
   	{ 
		//$concaten = stripslashes($val[0]);//<<<==========
		//$concaten = $val[0];//<<<==========
		$concaten = $vale['Brevets'];
   		echo "<option value=".$concaten.">".$concaten."</option>";
   	} 

			echo "</select></td></tr></table>";

				echo '<table border="0" width="400" align="center">'  
				.'<tr>'
					.'<td width="150" class="h2"><a href="AffectBrevUser0.php">Retour</a></td>'
					.'<td width="100" class="h6"><input type="submit" name="Submit" value="Affecter"></td>'
					.'<td width="150" class="h2"><a href="../out.php">Déconnexion</td>'
				.'</tr>'
				.'</form></table>';
2ème page
<?php
//Démarrage session
session_start();
if(!isset($_SESSION['LogAdm']) or $_SESSION['LogAdm'] == "")
{	
echo '<font face="Arial" size="2">vous n\'avez pas le droit de visualiser cette page</font>';
}
else
{
//Recup Valeur du user
//---------------------------------
$uzer = ($_GET['val']);
$DateDujour = date("Y-m-d");

//Le traitement ne s'exécute qu'à la condition que 
// les informations aient été effectivement postées

if ( isset($_POST) && (!empty($_POST['id'])) )
{

extract($_POST);
$NouvAffect = $_POST['id'];
		//Connexion à la base
		require('../conf.php');
		$db = mysql_connect($host,$user,$password);
		mysql_select_db($database,$db);

		// On insère alors les nouvelles données dans la base

		$ReqCreq = "INSERT INTO droits_brevets(IdBr,LogCh,Brevet,DateAffect)
			VALUES('','$uzer','$NouvAffect','$DateDujour')";
		$reqcreerq = mysql_query($ReqCreq) or die('Erreur SQL : <br />'.$ReqCre);
//On renvoie l'admin vers un page de confirm
header("Location: AffectBrevUserOk.php");

mysql_close();
}
	else 
{header("Location: AffectBrevUserErr.php");}
}
?>
voila...

par Cyrano » 01 avr. 2007, 19:56

Quelques éléments de code nous aideraient sans doute, je flaire à 100km des erreurs de guillemets manquants ou quelques chose du genre :-k

$_POST et les espaces...

par Raymond domenek » 01 avr. 2007, 19:38

Bonsoir la communauté,
je vous explique mon pb :
dans un formulaire, j'ai mis en place une liste déroulante contenant des valeurs. Mon formulaire est en "Post". L'utilisateur choisi une valeur dans la liste déroulante, puis valide. Une seconde page récupère la valeur selectionnée par l'utilisateur, puis éxécute une requête d'insertion. Tout marche très très bien...SAUF que parmis les valeurs de la liste déroulante, je peux avoir des valeurs contenant des "espaces". Dans ce cas, la valeur récupérée sur la 2ème page n'est pas la valeur complète mais juste les caractères situés avant l'espace. C'est la première fois que je vois un truc pareil. Est-ce que certains d'entre vous ont déjà été confronté à ce genre de situation??
Merci d'avance pour vos réponses :)