par
toony74 » 05 juin 2011, 15:27
Salut à tous!
Une question de newbie... bien sûr.
L'idée est simple, j'ai un formulaire.html avec un formulaire_post.php qui contient le code suivant. Le problème, c'est que dans mon script, je souhaite, après avoir insérer dans la base de données les informations du formulaire, démarrer une session et rediriger vers la page d'acceuil, sur laquelle une session démarre avec avec des variables $_SESSION actives. Tout ceci fonctionnait bien en local mais voilà que, sur le web (planethoster est mon hébergeur), les erreurs classiques font surface. Sesion start et header doivent être placés en début de script... je sais, mais là je bloque. Je ne sais plus du tout comment m'en sortir... Please, help!
<?php
// si les valeurs ne sont pas vides
if(isset($_POST) && !empty($_POST['nom']) && !empty($_POST['prenom'])))
// On exécute çà:
{
try
{
// Connexion à la base de données
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=xx', 'xx', 'xx1', $pdo_options);
// test pour verification pseudo
$count = $bdd->prepare('SELECT COUNT(*) FROM formulaire WHERE pseudo = :pseudo ');
$count->bindValue('pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$count->execute();
if ($count->fetchColumn())
{
echo '<p>Ce pseudo est déjà utilisé</p>';
?><a href="javascript:history.back()">Retour</a> <!--// Bouton "retour"-->
<?
}
else
{
//test sur le mail utilisé (mail)
$count = $bdd->prepare('SELECT COUNT(*) FROM formulaire WHERE mail = :mail ');
$count->bindValue('mailfac', $_POST['mailfac'], PDO::PARAM_STR);
$count->execute();
if ($count->fetchColumn())
{
echo '<p> Ce mail a déjà été utilisé </p>';
?><a href="javascript:history.back()">Retour</a> <!--// Bouton "retour"-->
<?
}
else
// Si le pseudo n'est pas utilisé, on exécute:
{
// Insertion dans la base de données via une requête préparée
$req = $bdd->prepare('INSERT INTO formulaire (nom, prenom, etc...) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array($_POST['nom'], $_POST['prenom'], $_POST['mailperso'], etc...));
//+ log in avec début d'une session
session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
$_SESSION['nom'] = $_POST['nom'];
$_SESSION['prenom'] = $_POST['prenom'];
header('Location: ../accueil/accueil.php');
exit();
}
}
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
}
else
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Formulaire</title>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="../css/designform.css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?
echo '<p>Tous les champs sont obligatoires ! Reprécisez votre mot de passe également SVP !</p>'; ?>
<a href="javascript:history.back()">Retour</a> <!--// Bouton "retour"-->
<? exit;
}
?>
Voilà, j'ai volontairement omis quelques petites $_POST pour ne pas alourdir inutilement ce texte déjà bien lourd....
Merci de vos réponses d'avance!
Salut à tous!
Une question de newbie... bien sûr.
L'idée est simple, j'ai un formulaire.html avec un formulaire_post.php qui contient le code suivant. Le problème, c'est que dans mon script, je souhaite, après avoir insérer dans la base de données les informations du formulaire, démarrer une session et rediriger vers la page d'acceuil, sur laquelle une session démarre avec avec des variables $_SESSION actives. Tout ceci fonctionnait bien en local mais voilà que, sur le web (planethoster est mon hébergeur), les erreurs classiques font surface. Sesion start et header doivent être placés en début de script... je sais, mais là je bloque. Je ne sais plus du tout comment m'en sortir... Please, help!
[php]
<?php
// si les valeurs ne sont pas vides
if(isset($_POST) && !empty($_POST['nom']) && !empty($_POST['prenom'])))
// On exécute çà:
{
try
{
// Connexion à la base de données
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=xx', 'xx', 'xx1', $pdo_options);
// test pour verification pseudo
$count = $bdd->prepare('SELECT COUNT(*) FROM formulaire WHERE pseudo = :pseudo ');
$count->bindValue('pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$count->execute();
if ($count->fetchColumn())
{
echo '<p>Ce pseudo est déjà utilisé</p>';
?><a href="javascript:history.back()">Retour</a> <!--// Bouton "retour"-->
<?
}
else
{
//test sur le mail utilisé (mail)
$count = $bdd->prepare('SELECT COUNT(*) FROM formulaire WHERE mail = :mail ');
$count->bindValue('mailfac', $_POST['mailfac'], PDO::PARAM_STR);
$count->execute();
if ($count->fetchColumn())
{
echo '<p> Ce mail a déjà été utilisé </p>';
?><a href="javascript:history.back()">Retour</a> <!--// Bouton "retour"-->
<?
}
else
// Si le pseudo n'est pas utilisé, on exécute:
{
// Insertion dans la base de données via une requête préparée
$req = $bdd->prepare('INSERT INTO formulaire (nom, prenom, etc...) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array($_POST['nom'], $_POST['prenom'], $_POST['mailperso'], etc...));
//+ log in avec début d'une session
session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
$_SESSION['nom'] = $_POST['nom'];
$_SESSION['prenom'] = $_POST['prenom'];
header('Location: ../accueil/accueil.php');
exit();
}
}
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
}
else
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Formulaire</title>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="../css/designform.css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?
echo '<p>Tous les champs sont obligatoires ! Reprécisez votre mot de passe également SVP !</p>'; ?>
<a href="javascript:history.back()">Retour</a> <!--// Bouton "retour"-->
<? exit;
}
?>
[/php]
Voilà, j'ai volontairement omis quelques petites $_POST pour ne pas alourdir inutilement ce texte déjà bien lourd....
Merci de vos réponses d'avance!