Page 1 sur 1

$_POST et les espaces...

Posté : 01 avr. 2007, 19:38
par Raymond domenek
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 :)

Posté : 01 avr. 2007, 19:56
par Cyrano
Quelques éléments de code nous aideraient sans doute, je flaire à 100km des erreurs de guillemets manquants ou quelques chose du genre :-k

Posté : 01 avr. 2007, 20:12
par Invité
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...

Posté : 01 avr. 2007, 20:24
par Cyrano
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.

Posté : 01 avr. 2007, 20:31
par Invité
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+ :)

Posté : 01 avr. 2007, 20:38
par zeus
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 !!! ;)

Posté : 01 avr. 2007, 21:59
par DocType
et de 48 ! :lol: