Espace membre-Soucis de redirection personalisée

Répondre
le_bleu
le 03/05/2009 à 11:04
le_bleu
Bonjour,
tout d'abord merci pour ce cours sur l'espace membre, clair et fonctionnel. C'est exactement ce que je recherchais.

Mais voici mon problème :(je précise que j'ai garder par défaut les noms des variables, nom de la BDD, etc, du cours "Comment faire un espace membre en PHP")

j'essaye de créer une page personnelle pour chacun de mes clients à laquelle ils auront accès en fonction de leur login/mot de passe.
Pour être plus clair, quand le client entre ses informations de connexion dans la page"index.php", il est redirigé sur sa page personnelle.

J'ai donc ajouté un champ "destination" à la table "membre" et mainteant j'essaye de récupérer cette information pour m'en servir de redirection dans le "header ("Location: "");"
Mais malgré mes heures d'essais et de recherches ( et mes grandes lacunes -je commence à apprendre ce langage- ) je n'y arrive pas.
C'est donc avec un peu de honte que je demande votre aide étant donné que la réponse doit être assez évidente pour vous.

Voici le code :

<?php <?php

// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

$base = mysql_connect ('XXX', 'XXX', 'XXX');
mysql_select_db ('XXX', $base);

// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
//J'AI AJOUTE CETTE VARIABLE, PENSANT POUVOIR LA RECUPERER...
$destination = $data['destination'];

mysql_free_result($req);
mysql_close();

// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
header("Location: ".$destination.""); //-->Je suppose que c'est une erreur...
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?> ?>


Je remercie par avance ceux qui prendront le temps d'aider un newbi !
Le_bleu cherche à s'en sortir !
LA GLOBULE
le 03/05/2009 à 11:41
LA GLOBULE
Alors ton problème se situe au niveau de ta requete SQL : tu ne select pas le champs destination, donc tu ne peux pas le récupérer pour l'utiliser.

Voici une modification qui devrait fonctionner (je ne l'ai toutefois pas testé) :

<?php

// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
$base = mysql_connect ('XXX', 'XXX', 'XXX');
mysql_select_db ('XXX', $base);

// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT login, destination FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

$nb = mysql_num_rows($req);

if ($nb == 1) {
$data = mysql_fetch_array($req);

session_start();
$_SESSION['login'] = $data['login'];
header("Location: ".$data['destination']);
exit();
}
elseif ($nb == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
le_bleu
le 03/05/2009 à 11:51
le_bleu
Merci d'avoir pris le temps de répondre, malheureusement ca à l'air de bloqué au niveau des sessions.
le message d'erreur est le suivant :
<?php Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/web7/31/34/51963234/htdocs/NEW/login/index.php:2) in /mnt/web7/31/34/51963234/htdocs/NEW/login/index.php on line 21

Warning: Cannot modify header information - headers already sent by (output started at /mnt/web7/31/34/51963234/htdocs/NEW/login/index.php:2) in /mnt/web7/31/34/51963234/htdocs/NEW/login/index.php on line 23 ?>
Le_bleu cherche à s'en sortir !
LA GLOBULE
le 03/05/2009 à 11:53
LA GLOBULE
Dans ton fichier login/index.php, tu dois avoir des espaces ou des retours chariots avant le <?php.
Il faut les enlever.
le_bleu
le 03/05/2009 à 12:02
le_bleu
NIKEL !!

Ca fonctionne parfaitement.
Un grand merci à toi LA GLOBULE.
C'était la première fois que je postais un message sur un forum. Je m'attendais pas à avoir une réponse aussi rapide et efficace. Tu viens de me fidéliser à ce site.
Encore merci, et bon dimanche !
Le_bleu cherche à s'en sortir !
CreaYouz
le 21/07/2009 à 11:26
CreaYouz
Voila j'ai suivi la même demarches que le_bleu, mais mon prolbème se situe dans la page inscription.

En effet je pense que le faite d'avoir rajouter un champ pour la redirection pose problème pour l'enregistrement !

Enfin je ne sais pas.

Le code étant

# <?php
# // on teste si le visiteur a soumis le formulaire de connexion
# if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
# if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
#
# $base = mysql_connect ('serveur', 'login', 'password');
# mysql_select_db ('nom_base', $base);
#
# // on teste si une entrée de la base contient ce couple login / pass
# $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
# $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
# $data = mysql_fetch_array($req);
#
# mysql_free_result($req);
# mysql_close();
#
# // si on obtient une réponse, alors l'utilisateur est un membre
# if ($data[0] == 1) {
# session_start();
# $_SESSION['login'] = $_POST['login'];
# header('Location: membre.php');
# exit();
# }
# // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
# elseif ($data[0] == 0) {
# $erreur = 'Compte non reconnu.';
# }
# // sinon, alors la, il y a un gros problème :)
# else {
# $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
# }
# }
# else {
# $erreur = 'Au moins un des champs est vide.';
# }
# }
# ?>

2tant aussi un sale naab qui comment je galère. Manque t il seulement un bout de code pour declarer que cette parti n'est pas remplis dans la table ?


CreaYouz
Nothing to say
CreaYouz
le 21/07/2009 à 11:32
CreaYouz
Bon en faite j'ai reussi.

Le champ destination ne pouvais pas rester non declarer dans le php, et j'ai juste rajouter un petit bout de code pour passer de

$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'")';

pour en arriver à
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'","'.mysql_escape_string($_POST['']).'")';


Si jamais cela interesse quelqu'un derrière :)

CreaYouz
Nothing to say
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours