$_POST et les espaces...

Raymond domenek
Invité n'ayant pas de compte PHPfrance

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 :)

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

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...

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

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+ :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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 !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1776 Messages

01 avr. 2007, 21:59

et de 48 ! :lol: