Espace membre - Besoin d'aide

Fermé
zartas Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 6 février 2015 - 5 févr. 2015 à 20:52
zartas Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 6 février 2015 - 6 févr. 2015 à 14:37
Bonjour,

Je n'ai pas mis un titre précis car j'ai plusieurs "problèmes" et je compte les poser une par une pour que ce soit plus lisible ^^ (je n'ai pas l'habitude des forum, donc si c'est mieux de créer un sujet par question, dites le moi s'il vous plait).

Alors voilà mon premier problème :

Pour ma page d'inscription, j'ai fait un formulaire en html qui contient ces 2 lignes

<form method="post" action="connexion.php">

et
<input type="submit" value="S'inscrire" name="inscrire" />


pour dire que si on clique sur "inscrire", ça nous redirige sur la page "connexion.php".

Ensuite j'ai mis des conditions en php pour vérifier si le pseudo n'est pas déjà utiliser, le mot de passe et la confirmation du mot de passe sont identiques...etc.

C'est là qu'arrive mon soucis, quelques soit le résultat de mes conditions, ça me redirige sur ma page "connexion". Même si l'inscription a échoué.

J'aimerais savoir comment je peux faire pour que si l'inscription n'est pas bonne, je reste sur ma page inscription en affichant les erreurs. Et si elle est correct, ça m'envoi sur la page "connexion.php" s'il vous plait.

J'utilise PDO. Ma base est créée et j'arrive à m'inscrire et me connecter sur mon site uniquement si je redirige vers aucun autre page. (exemple : si connexion.php redirige sur connexion.php)

Merci :)
A voir également:

5 réponses

Lilly_SF Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 5 février 2015 6
5 févr. 2015 à 21:07
Salut,
tu dois tout faire sur la page inscription.php


<?php
// page inscription.php

if(isset($_POST['inscrire']))
{
// processus de vérification de mot de passe, etc...


// si c'est bon : on redirige vers la page de connexion
header("location:connexion.php");
exit;
}

// si c'est pas bon, on reste sur cette même page, et on va remplir le formulaire avec les données issus du POST

?>
<form action="inscription.php" method="post">
.../...
Nom : <input type="text" name="nom" value="<?php echo $_POST['nom']; ?>">


.../...
<input type="submit" value="S'inscrire" name="inscrire" />

</form>


0
zartas Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 6 février 2015
5 févr. 2015 à 21:40
Merci pour cette réponse :)

J'avais déjà essayer et je viens de réessayer avec

header("location:connexion.php");
exit;


mais ça ne fonctionne pas. Je reste sur ma page "inscription.php".

Voici mon code PHP de ma page "inscription.php". Je penses avoir des erreurs de placement ou autres. Je suis preneur pour toutes aides et organisations de mon code ^^ mais ma priorité reste mon problème ci dessus, pour le moment :)

<?php
			
if(isset($_POST['inscrire']))
{
  if(!empty($_POST['pseudo']) && !empty($_POST['mot_de_passe']) && 
!empty($_POST['mot_de_passe_confirme']) && 
!empty($_POST['adresse_email']) != "")
{
include("includes/identifiants.php");
$req_email = $connexion->prepare('SELECT * FROM membres WHERE 
adresse_email = :adresse_email');
$req_email->execute(array('adresse_email' => $_POST['adresse_email']));
$resultat_email=$req_email->fetch();
				
if(!$resultat_email)
{
				
include("includes/identifiants.php");
$req_pseudo = $connexion->prepare('SELECT * FROM membres WHERE 
pseudo = :pseudo');
$req_pseudo->execute(array('pseudo' => $_POST['pseudo']));
$resultat_pseudo=$req_pseudo->fetch();
				
if(!$resultat_pseudo)
{
				
if(!preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-
9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]
{2,}$#i',$_POST['adresse_email']))
{
echo "L'e-mail n'est pas valide.";
}
else
{
echo "";
}
					
if(strlen($_POST['mot_de_passe']) >= 8)
{
$pass_hache = sha1( $_POST['mot_de_passe'] );
						
include("includes/identifiants.php");
$requete = $connexion->prepare('INSERT INTO membres( pseudo, 
mot_de_passe, adresse_email) VALUES ( :pseudo, :mot_de_passe,
 :adresse_email)');
$requete->execute(array(
'pseudo' => $_POST ['pseudo'],
'mot_de_passe' => $pass_hache,
'adresse_email' => $_POST ['adresse_email']));
header("location:Login.php");
exit;
						
						
						
} 
elseif($_POST['mot_de_passe'] != $_POST['mot_de_passe_confirme'])
{
echo "Le mot de passe n'est pas identique à sa confirmation.";
}
else 
{
echo "Le mot de passe doit contenir au moins 8 caractères.";
					}
}
else
{
echo "Ce pseudo est déjà utilisé.";
}
			
}
else
{
echo "Cette adresse-email est déjà utilisé.";
}
			
}	
else
{
echo "Tous les champs doivent être remplis.";
}
} 
else 
{
echo "Remplissez le formulaire pour vous inscrire.";
}	
	 
?>



PS : La lisibilité du code n'est pas super. J'ai dû mettre tous mon code au même niveau pour pouvoir le faire rentrer. Normalement il n'y a aucune erreur de "{".
0
Lilly_SF Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 5 février 2015 6
5 févr. 2015 à 21:47
la fonctions header("location...") ne peux pas être utilisée si des caractères ont déjà été affichés (vu que c'est une fonction qui modifie l'entete de la réponse).

Or tu as un echo ""; et je pense que le problème vient de là, ou alors dans les fichiers que tu inclues, vérifie qu'il n'y ai pas d'affichages et qu'ils ne sont pas fermés en php (ne mets jamais je ?> à la fin d'un fichier php)
0
zartas Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 6 février 2015
Modifié par zartas le 5/02/2015 à 22:28
J'ai essayer comme ça :
if(!preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['adresse_email']))
{
echo "L'e-mail n'est pas valide.";
}
else
{     
if(strlen($_POST['mot_de_passe']) >= 8)
{
$pass_hache = sha1('' . $_POST['mot_de_passe'] . '');
       
include("includes/identifiants.php");
$requete = $connexion->prepare('INSERT INTO membres( pseudo, mot_de_passe,
 adresse_email) VALUES ( :pseudo, :mot_de_passe, :adresse_email)');
$requete->execute(array(
'pseudo' => $_POST ['pseudo'],
'mot_de_passe' => $pass_hache,
'adresse_email' => $_POST ['adresse_email']));
header("location:Login.php");
exit;
       
} 
elseif($_POST['mot_de_passe'] != $_POST['mot_de_passe_confirme'])
{
echo "Le mot de passe n'est pas identique à sa confirmation.";
}
else 
{
echo "Le mot de passe doit contenir au moins 8 caractères.";
}
}


ça fonctionne toujours pas.

Pour la suite de ce que tu me conseil, j'avais mis mon code PHP dans le <div> du formulaire pour que les "echo" s'affiche là où je le voulait. Du coup maintenant j'ai mis mon code PHP tout en bas et sans le fermer. Comment je peux faire pour afficher mes "echo" là où je le désir ?

J'ai également corriger l'emplacement mes codes PHP sans les fermer dans mes includes concerné et dans mon fichier connexion. Ça ne fonctionne toujours pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zartas Messages postés 6 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 6 février 2015
Modifié par zartas le 6/02/2015 à 15:13
Bonjour,

Je viens d'essayer en réduisant au maximum mon code PHP pour voir si le problème venait du code en lui même.
Maintenant mon code PHP fait juste ça :

<?php
   
 if(isset($_POST['inscrire']))
 {
  header("location:Login.php");
  exit;
 } 
 else 
 {
 echo "Remplissez le formulaire pour vous inscrire.";
 } 



ça ne fonctionne toujours pas. Lorsque je clique sur le bouton "inscrire", je reste sur la page "inscription.php".

Voici mon formulaire en entier, peut être que le problème viens de là :

<div id="inscription"><h1>S'inscrire</h1>
    
<form method="post" action="inscription.php">
    
<p>
<label for="pseudo">Choisissez un pseudo</label> : 
<input type="text" name="pseudo" id="pseudo" size="10" />
</p>
    
<p>
<label for="mot_de_passe">Choisissez un mot de passe</label> : 
<input type="password" name="mot_de_passe" id="mot_de_passe"  />
</p>
    
<p>
<label for="mot_de_passe_confirme">Confirmer votre mot de passe</label> : 
<input type="password" name="mot_de_passe_confirme" id="mot_de_passe_confirme"  />
</p>
    
<p>
<label for="adresse_email">Saisissez vôtre adresse e-mail</label> : 
<input type="email" name="adresse_email" id="adresse_email"  />
</p>
    
<p>
<input type="submit" value="S'inscrire" name="inscrire" />
</p>          
      
</div> 



Merci :)

édit 1 : Je viens de mettre mon code PHP tout en haut de ma page en supprimant le <?php session_start(); ?> que j'avais oublié et qui servait à rien. Et maintenant, ça fonctionne. Je vais tester en remettant tout le reste du code et je vous redis ça.

édit 2 : Avec tout le reste du code, ça fonctionne bien. Maintenant le problème est que mes echo ne s'affichent plus sur ma page.
0