[PHP] Problème de session() et de header()

Heliard Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
Heliard Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à vous tous,

Premier problème : Dans le cadre de l'implementation d'un formulaire je souhaite utiliser les propriété de session() afin de retenir les variable rentré par mon utilisateur dans le cas où tout le formulaire n'aurait pas été rempli.
Dans le première partie de mon code je tente d'intégrer les diverses valeurs des variables à session() puis dans la deuxième je m'emploie à mettre ces fameuses variables dans les champs adaptés dans le cas ou il y aurait un oubli de la part de l'utilisateur.
Problème : après des tests grâce à des echo, il n'y a, à priori, rien de stocker dans les variables de sessions...

Deuxième problème, il se situe au niveau de mon header, je sais que l header nécessite des condition spécifique, mais je pensait que dans mon cas ça fonctionnerait. et j'ai droit à l'erreur : Warning: Cannot modify header information - headers already sent ....

Voici mon code :

<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
</head>

<body>

<?php
$error = array("",0,0,0,0,0,0,0,0); //création d'un tableau qui situera les erreurs : 0 : pas d'erreurs, 1 : champ vide
$tab1 = array("surname", "name", "adress", "postcode", "city", "country", "email", "phone"); //tableau contenant le nom des variables
$tab2 = array("First name", "Last name", "Adress", "Postcode", "City", "Country", "eMail", "Phone"); //tableau contenant le nom des variables que l'on affichera à l'utilisateur


if(isset($_POST['ok'])) //si on clique sur le bouton submit : alors executer le code
{
for($i=0; $i<count($tab1); $i++) //boucle pour traiter les champs un à un
{
eval('$temp = $_POST["'.$tab1[$i].'"];'); //regle le prob de la variable globale
eval('$session = $_SESSION['.$tab1[$i].'];');

$session=$temp; //insertion dans la session des variables avec leur valeurs

if ($temp == "") //affichage des Champs non remplits
{
$error[$i+1]=1;
$error[0].=($error[0]!="")?', '.$tab2[$i].'':'Error with : '.$tab2[$i].'';
}
}


if($error[0]=="") //Si tout les champs sont remplis alors on va les insérer à la database
{
$connection = mysql_connect("*", "*", "*") or die('Erreur de connexion '.mysql_error());
mysql_select_db ("*", $connection);

$sql = "INSERT INTO user (id_user,surname,name,adress,postcode,city,country,email,phone)
VALUES('','$_POST[surname]','$_POST[name]','$_POST[adress]','$_POST[poscode]','$_POST[city]','$_POST[country]','$_POST[email]','$_POST[phone]')";
$req = mysql_query($sql);

$sql = "SELECT id_user FROM user WHERE name=".$_POST['name'].";"; //ici on récupère l'id_user afin de le transmettre à la page suivante
$req = mysql($sql);
$id = mysql_insert_id();
header('location: success.php?id='.$id); //on demande d'aller à la page suivante
}

}
?>

<form method="post" action="booking.php"> //creation du formulaire

<div id="error" style="color:red;visibility: <?php echo(($error[0]!="")?"visible":"hidden"); ?>">
<?php if($error[0]!="") echo $error[0]; ?>
</div> //ce div sert à caché le texte d'erreur, et de l'afficher qu'au refresh de la page lorsque l'on constate des champs vides

<?php
for($i=0; $i<count($tab1); $i++)
{
echo $tab2[$i];
echo " : ";
$tmp = isset($session)? $session : ''; //opérateur ternaire : si il y a eu une variable enregistré alors on va l'insérer dans $tmp sinon insérer du vide.
echo "<input type =\"text\" name=\"".$tab1[$i]."\" value=\"".$tmp."\"/>"; //affichage de l'imput avec à l'interieur ou rien, ou la variable enregistré dans la session (dépendant le l'opérateur ternaire précédent)

echo ($error[$i+1]==1)? "<font color=red>*</font>":""; //affichage d'un étoile rouge à droite du champ vide.
echo '<br/>';
}
echo "<input type=\"submit\" value=\"Send\" name=\"ok\"/>"; //bouton submit
?>

</form>

</body>

</html>

Merci de votre aide !
A voir également:

1 réponse

jeangilles Messages postés 816 Date d'inscription   Statut Membre Dernière intervention   186
 
Pour la 2nde question, il ne faut qu'aucun caractère ne soit envoyé au client avec un header, donc tous tes
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
et autres, ca en fait partie
0
Heliard Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
J'essaye de comprendre cette histoire de : ne pas avoir de droit d'envoyer une chaine de caractères, mais c'est pas gagné...
Surtout que pour ne pas me faciliter la tache il n'aime pas la requête mysql suivante :

$sql = "SELECT id_user FROM user WHERE name=".$_POST['name'].";";
$req = mysql($sql); //=> Warning: Wrong parameter count for mysql()
$id = mysql_insert_id();
header('location: success.php?id='.$id);
0