pb echo de variable

vagrantin
Invité n'ayant pas de compte PHPfrance

19 déc. 2008, 22:31

Bonjour à tous,

Je début dans le php, actuelement je travail sur un formulaire et j'ai beau retourner dans tous les sens je ne comprend pas pourquoi mon echo ne me retourne que la 1er lettre: voici le code:
if (empty($_POST['user_firstname']))
  $message .= "Votre Prenom<br/>";
if (empty($_POST['user_lastname']))
  $message .= "Votre Nom<br/>";
if (empty($_POST['user_login']))
  $message .= "Votre Login<br/>";
if (empty($_POST['user_password']))
  $message .= "Votre mot de passe<br/>";
if (empty($_POST['user_email']))
  $message .= "Votre mail<br/>";
  
  // si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

  echo $message;
// sinon c'est ok
} else { 
  foreach($_POST as $index => $valeur) {
    $$index = mysql_real_escape_string(trim($valeur));
  }

	$sql = "INSERT INTO user VALUES('', '".$user_firstname."', '".$user_lastname."', '".$user_login."', '".$user_password."', '".$user_email."')"; 
	$res = mysql_query($sql);
	//echo $sql;
	var_dump ($user_firstname,$user_lastname,$user_login,$user_password,$user_email);
	echo var_dump;

  if (var_dump) {
   echo "
			</div>
			<div class=\"related\">  </div>
			</div>
			<div id=\"ContentBody\"> 
			<div class=\"mainContent\"> 
			<h2><strong>stock Management  </strong></h2>
			<p>&nbsp; </p>
			<h3>User registration</h3>
			<p>The following informations have been recorded successfully :</p>
			<p>	
		    <br/>first name : &nbsp; ".$user_firstname['user_firstname']."
			<br/>last name : &nbsp; ".$user_lastname['user_lastname']."
			<br/>login : &nbsp; ".$user_login['user_login']."
			<br/>password : &nbsp;".$user_password['user_password']."
			<br/>email : &nbsp; ".$user_email['user_email']."
			</p>
			<p>
			<a href=\"login.html\">Back Home</a> <br />
			</p>
			<p>&nbsp;</p>
			<p>&nbsp;</p>
			<p>&nbsp;</p>
			<p>&nbsp;</p>
			<p>&nbsp;</p>
			<p>&nbsp;</p>
			</div>
			</div>
			";
	} else {
    echo mysql_error();
  }
j'espère que vous en avez suffisamment pour comprendre, voici tous de même ce qu'il retourne:

Code : Tout sélectionner

<div id="ContentContainer"> <div id="Leftside"> <div class="leftnav"> <!-- InstanceBeginEditable name="products" --> string(6) "898799" string(5) "azeae" string(4) "n,;n" string(5) "qsqsd" string(5) "qqsdq" var_dump </div> <div class="related"> </div> </div> <div id="ContentBody"> <div class="mainContent"> <h2><strong>Avid stock Management </strong></h2> <p>&nbsp; </p> <h3>User registration</h3> <p>The following informations have been recorded successfully :</p> <p> <br />first name : &nbsp; 8 <br />last name : &nbsp; a <br />login : &nbsp; n <br />password : &nbsp;q <br />email : &nbsp; q </p> <p> <a href="login.html">Back Home</a> <br /> </p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> </div> </div>
Il est fort probable que ce ne soit pas du tous propre mais je fais des test dans tous les sens pour comprendre comment les info sont retourné dans le navigateur et la je suis bloqué !!

La parti "string " est là pour montrer je peux récupérer tous ce que j'ai rentrer mais après ça ne veux pas !!

Si quelqu'un à une idée elle est la bienvenu

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 déc. 2008, 10:57

Alors déjà quelques explications :

Lorsque tu envois des données à php, celles qui sont passées dans l'url sont automatiquement ajoutée dans le tableau associatif $_GET et celles qui sont soumises via la méthode "post" alimentent le tableau associatif $_POST. Ainsi, en faisant appel à la clé du tableau correpondant au nom du champ, tu vas pouvoir récupérer la valeur spécifiée :

Si ton champ se nomme "user_firstname" et qu'il est envoyé en post, alors $_POST['user_firstname'] sera égal à la valeur fournie par l'utilisateur (ici ce serait donc 898799) .

Lorsque tu fais la boucle foreach suivante :
  foreach($_POST as $index => $valeur) { 
    $$index = mysql_real_escape_string(trim($valeur)); 
  }

Tu demande à ce que chaque couple clé/valeur contenu dans le tableau $_POST soit utilisée de façon à créer la variable $"clé" et lui affecter la la valeur correspondante. Tu vas donc obtenir la varibale $user_firstname qui aura pour valeur "898799". Cette variable, comme l'indique ton var_dump est de type String, c'est une simple chaine de caractère.

Pour l'utiliser ou l'afficher il te faut donc simplement faire un :
echo $user_firstname;
Lorsque tu fais un
echo $user_firstname['user_firstname'];
au lieu d'afficher la chaine (898799) tu indiques avec les crochets [] que $user_firstname doit être considéré par php comme un tableau dont chaque élément correspond à un caractère de la chaine. Voilà pourquoi php ne te retourne qu'un seul caractère, puisque pour lui, tu lui demandes celui qui se trouve à la position ['user_firstname'].

C'est y plus clair ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
AB
ViPHP | 5818 Messages

21 déc. 2008, 16:11

Pour résumer sous un autre angle ce qu'à dit Ryle, on se demande bien pourquoi tu insères par exemple $user_firstname dans ta bdd alors que pour l'afficher tu fais $user_firstname['user_firstname'];

Sinon tu risques d'avoir un autre problème puisque tu sembles vouloir utiliser les mêmes variables traitées avec mysql_real_escape_string() pour l'insertion dans ta requête et pour l'affichage. Si mysql_real_escape_string() est très recommandée pour protéger tes requêtes cette fonction n'est pas destinée à autre chose et surtout pas l'affichage. En clair l'affichage posera problème si la chaine de caractères comprend des apostrophes ' par exemple.