JeuWeb - Crée ton jeu par navigateur
Redirection PHP - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Redirection PHP (/showthread.php?tid=6701)

Pages : 1 2


Redirection PHP - Dark-Slade - 10-03-2013

Bonjour alors je suis en train de coder un espace membre et j'en suis a l'inscription, seulement au niveau de la redirection il y a un problème, elle ne s'effectue pas , voici mon code :
Code :
<?php
$bdd = new PDO(mysql:host=localhost;dbname=monde, 'root', '');
// se connecte à la bdd
class Membre //création de la class membre
{
  private static $_id;
  private static $_pseudo;
  private static $_mot_de_passe;
  private static $_re_mot_de_passe;
  private static $_email;
  private static $_re_email;
  private static $_personnage;
  private static $_univers;
  private static $_actif;
  public static $_error = null;
  protected static $bdd;
    public function __construct($db,$pseudo,$mdp,$remdp,$email,$remail){
    self::$bdd = $db;
    self::$_pseudo = $pseudo;
    self::$_mot_de_passe = $mdp;
    self::$re_mot_de_passe = $remdp;
    self::$_email = $email;
    self::$_re_email = $remail;
    
      
    if(self::pseudo()){
    if(self::mdp()){
    if(self::email()){
     self::inscription();
    }
    else { echo self::$_error;}
    }
    else { echo self::$_error;}
    }
    else { echo self::$_error;}
      
      

      
    }
   static public function pseudo()
  {
    $pseudo = self::$_pseudo ; //signifie que la variable $pseudo pointe vers l'attribut $_pseudo
    $longueur = strlen($pseudo); // compte combien il y a de caractères dans le pseudo entré
    $pris = self::$bdd->query('SELECT id FROM `espace_membre` WHERE `pseudo`='$pseudo''); // vérifie dans la bdd si le pseudo entré est deja dans la bdd

    if ($longueur<= 20 AND $pris== false){
           return true;
    }
    else
    {
        self::$_error = " Votre pseudo comprends plus de 20 caractéres et/ou est déjà pris par un autre membre !" ;
          return false;
    }
      
   }
      
   static public function mdp()
   {
     $pass_hache = sha1($_POST['pass']);// hash du mdp
     $mdp = self::$_mot_de_passe;
     $mdp2 = self::_re_mot_de_passe;
        
     if ($mdp==$mdp2)// vérifie si les 2 mots de passes sont identiques
     {
    return true;
            
     }
     else
     {
         selff::$_error = "Vos mots de passes sont différent, veuillez les retapez à l\'indentique.";
         return false;
     }
        
    }
      
    static public function email()
    {
       $mail = self::$_email;
       $email = self::$_re_email;
          
  
    
    if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail) AND $mail==$email )
    {
return true;
    }
    else
    {
        selff::$_error = 'L\'adresse ' . $mail . ' n\'est pas valide, recommencez !';
      return false;
    }
    }
  
    static  public function envoyerEMail($titre, $message)
    {
        mail(self::$_email, $titre, $message);
    }
        
     static public function bannir()
    {
        self::$_actif = false;
        self::envoyerEMail('Vous avez été banni', 'Ne revenez plus !');
    }
        
     static public function monde()
    {
     $monde->_univers;
     $monde[] = 'Fairy Tail';
     $monde[] = 'One Piece';
     $monde[] = 'Naruto';
        
    }
      
    static public function personnage ()
    {
    $personnage = self::$_personnage;
    if ( $monde== $monde[1])
    {
      echo $personnage[] = 'Natsu';
     $personnage[] = 'Leon';
     $personnage[] = 'Lucy';
     $personnage[] = 'Wendy';
     $personnage[] = 'Erza';
     $personnage[] = 'Jubia';
     $personnage[] = 'alya';
     $personnage[] = 'mister sol';
     $personnage[] = 'totomaru';
     $personnage[] = 'jura';
     $personnage[] = 'kagura';
     $personnage[] = 'cobra';
     }
        
     elseif ($monde==$monde[2])
     {
     echo $personnage[] = 'Natsu';
     $personnage[] = 'Leon';
     $personnage[] = 'Lucy';
     }
        
     else
     {
     echo $personnage[] = 'Natsu';
     $personnage[] = 'Leon';
     $personnage[] = 'Lucy';
     }
     }
        
     public static function insription(){
self::$bdd->exec(INSERT INTO espace_membre(pseudo, mot de passe, email, univers, personnage, actif));
     $req->execute(array(
    'pseudo' =>self::$_pseudo,
    'mot de passe' =>self::$_mot_de_passe,
    'email' =>self::$_email,
    'univers' =>self::monde(),
    'personnage' =>self::personnage (),
    'actif' =>self::bannir()
    ));
    if self::inscription()
    {header('Location: inscription3.php');
    
     }
     else
     { echo 'Une erreur c\'\ est produite lors de votre insccription'
     }
     }
        
     }
      
      $membre = new Membre($bdd,$pseudo,$mdp,$remdp,$email,$remail);
?>



RE: Redirection PHP - srm - 10-03-2013

Met un exit après ton header("Location


RE: Redirection PHP - Dark-Slade - 10-03-2013

(10-03-2013, 04:37 PM)oxman a écrit : Met un exit après ton header("Location


je viens de le faire mais toujours le même résultat Confused


RE: Redirection PHP - Xenos - 10-03-2013

Code PHP :
<?php 
class xyz
{
//...
public static function inscription()
{
//...
if self::inscription()
{
header('Location: inscription3.php');
}
}
}

Déjà, vu l'indentation, c'est un miracle que j'ai pris le temps de lire... Indente ton code si tu veux y voir clair et le débogger.
Ensuite, "ca marche pas" n'est pas un symptôme, ce serait mieux de dire "je reste sur une page blanche", ou bien "j'ai une erreur d'affichée est: <citer l'erreur ici>"...

Enfin, je serait étonné qu'un tel code fonctionne. Déjà parce que je ne suis même pas certain que "if function()" soit valide (privilégie plutôt les parenthèsage: "if (function())" donc "if (self::inscription())"), mais surtout, je ne comprends pas ce que tu essaie de faire à ce niveau là... On est dans la méthode "inscription()", et tu appelles cette même méthode "inscription()"... Tu as donc des appels récursifs qui ne se finiront jamais...


RE: Redirection PHP - Dark-Slade - 10-03-2013

(10-03-2013, 05:23 PM)Xenos a écrit :
Code PHP :
<?php 
class xyz
{
//...
public static function inscription()
{
//...
if self::inscription()
{
header('Location: inscription3.php');
}
}
}

Déjà, vu l'indentation, c'est un miracle que j'ai pris le temps de lire... Indente ton code si tu veux y voir clair et le débogger.
Ensuite, "ca marche pas" n'est pas un symptôme, ce serait mieux de dire "je reste sur une page blanche", ou bien "j'ai une erreur d'affichée est: <citer l'erreur ici>"...

Enfin, je serait étonné qu'un tel code fonctionne. Déjà parce que je ne suis même pas certain que "if function()" soit valide (privilégie plutôt les parenthèsage: "if (function())" donc "if (self::inscription())"), mais surtout, je ne comprends pas ce que tu essaie de faire à ce niveau là... On est dans la méthode "inscription()", et tu appelles cette même méthode "inscription()"... Tu as donc des appels récursifs qui ne se finiront jamais...

Tous d'abord, l'erreur est que je reste sur une page blanche.
Ensuite, en francais, ce que j'essaie de faire donne :
si l'inscription a réussi , alors redirige vers la page ....
sinon afficher : une erreur est survenue lors de votre inscription


RE: Redirection PHP - Xenos - 10-03-2013

Alors il y a un problème plus haut:
Code PHP :
<?php 
self
::$bdd->exec(INSERT INTO espace_membre(pseudo, mot de passe, email, univers, personnage, actif));
$req->execute(array(
'pseudo' =>self::$_pseudo,
'mot de passe' =>self::$_mot_de_passe,
'email' =>self::$_email,
'univers' =>self::monde(),
'personnage' =>self::personnage (),
'actif' =>self::bannir()
));
D'où sort "$req"?
Il faut que tu vois, en fonction de l'objet "self::$bdd", ce qu'il te renvoie en cas d'échec ou de réussite de ta requête SQL, et c'est sur ce critère que tu pourras dire "inscription réussie" ou "inscription échouée".

Là, ton "if self::inscription() {header...}" signifie "exécuter self::inscription(), puis si la valeur de retour de cette exécution est assimilable à 'true', faire la redirection header".


RE: Redirection PHP - Dark-Slade - 10-03-2013

J'ai essayer de changer quelque truc comme cela :
<?php 
class Membre //création de la class membre
{
private static $_req;
private static $_id;
private static $_pseudo;
private static $_mot_de_passe;
private static $_re_mot_de_passe;
private static $_email;
private static $_re_email;
private static $_personnage;
private static $_univers;
private static $_actif;
public static $_error = null;
protected static $bdd;
public function __construct($db,$pseudo,$mdp,$remdp,$email,$remail,$req){
self::$bdd = $db;
self::$_pseudo = $pseudo;
self::$_mot_de_passe = $mdp;
self::$re_mot_de_passe = $remdp;
self::$_email = $email;
self::$_re_email = $remail;
self::$_req = $req;


if(self::pseudo()){
if(self::mdp()){
if(self::email()){
self::inscription();
}
else { echo self::$_error;}
}
else { echo self::$_error;}
}
else { echo self::$_error;}




}
static public function bdd()
{ self::$bdd = new PDO(mysql:host=localhost;dbname=monde, 'root', '');
// se connecte à la bdd
}
static public function setpseudo()
{
$pseudo = self::$_pseudo ; //signifie que la variable $pseudo pointe vers l'attribut $_pseudo
$longueur = strlen($pseudo); // compte combien il y a de caractères dans le pseudo entré
$pris = self::$bdd->query('SELECT id FROM `espace_membre` WHERE `pseudo`='$pseudo''); // vérifie dans la bdd si le pseudo entré est deja dans la bdd

if ($longueur<= 20 AND $pris== false){
return true;
}
else
{
self::$_error = " Votre pseudo comprends plus de 20 caractéres et/ou est déjà pris par un autre membre !" ;
return false;
}

}

static public function setmdp()
{
$pass_hache = sha1($_POST['pass']);// hash du mdp
$mdp = self::$_mot_de_passe;
$mdp2 = self::_re_mot_de_passe;

if ($mdp==$mdp2)// vérifie si les 2 mots de passes sont identiques
{
return true;

}
else
{
selff::$_error = "Vos mots de passes sont différent, veuillez les retapez à l\'indentique.";
return false;
}

}

static public function setemail()
{
$mail = self::$_email;
$email = self::$_re_email;



if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $mail) AND $mail==$email )
{
return true;
}
else
{
selff::$_error = 'L\'adresse ' . $mail . ' n\'est pas valide, recommencez !';
return false;
}
}

static public function setenvoyerEMail($titre, $message)
{
mail(self::$_email, $titre, $message);
}

static public function setbannir()
{
self::$_actif = false;
self::envoyerEMail('Vous avez été banni', 'Ne revenez plus !');
}

static public function monde()
{
$monde->_univers;
$monde[] = 'Fairy Tail';
$monde[] = 'One Piece';
$monde[] = 'Naruto';

}

static public function setpersonnage ()
{
$personnage = self::$_personnage;
if ( $monde== $monde[1])
{
echo $personnage[] = 'Natsu';
$personnage[] = 'Leon';
$personnage[] = 'Lucy';
$personnage[] = 'Wendy';
$personnage[] = 'Erza';
$personnage[] = 'Jubia';
$personnage[] = 'alya';
$personnage[] = 'mister sol';
$personnage[] = 'totomaru';
$personnage[] = 'jura';
$personnage[] = 'kagura';
$personnage[] = 'cobra';
}

elseif ($monde==$monde[2])
{
echo $personnage[] = 'Natsu';
$personnage[] = 'Leon';
$personnage[] = 'Lucy';
}

else
{
echo $personnage[] = 'Natsu';
$personnage[] = 'Leon';
$personnage[] = 'Lucy';
}
}

public static function insription(){
self::$bdd->exec(INSERT INTO espace_membre(pseudo, mot de passe, email, univers, personnage, actif));
self::$req->execute(array(
'pseudo' =>self::$_pseudo,
'mot de passe' =>self::$_mot_de_passe,
'email' =>self::$_email,
'univers' =>self::monde(),
'personnage' =>self::personnage (),
'actif' =>self::bannir()
));
if (self::$bdd=true )
{
header('Location: inscription3.php');
exit

}
else
{
echo 'Un problème est survenue lors de votre inscription';
}

}
}

$membre = new Membre($bdd,$pseudo,$mdp,$remdp,$email,$remail);
$membre->inscription()
?>

Mais toujours une page blanche ...


RE: Redirection PHP - xviniette - 10-03-2013

Je vois pas l'intérêt de définir tes attributs et méthodes en static. Explication ?


RE: Redirection PHP - Dark-Slade - 10-03-2013

(10-03-2013, 10:52 PM)xviniette a écrit : Je vois pas l'intérêt de définir tes attributs et méthodes en static. Explication ?

c'était juste par ce que je venais d'apprendre ça alors j'ai voulus l'utiliser ici sachant que ça ne change rien ^^'


RE: Redirection PHP - php_addict - 10-03-2013

oulalala, ok je ne fais pas de programmation objet, mais ta classe est totalement a refaire là! un beau bordel...

regarde:

Code :
class Membre

function bdd()
function setpseudo()
function setmdp()
function setemail()
function setenvoyerEMail
function setbannir()
function monde()
function setpersonnage ()
function insription()

le monde auquel appartient le joueur ne devrait t il pas etre un attribu plutot qu'une fonction?
la function bdd, faudrait voir du côté d'un singleton plutot, où bien d'un objet "connexion" à passer à ton __construct
Envoyer un email, ca ca peut deja faire une classe a part entiere
inscription() -> idem

je crois que comme moi tu as un gros probleme pour la comprehension du concept de programmation objet, je te sens un peu mal barré pour faire de l'objet...

un conseil debile? ne fais pas de POO si tu ne sais pas en faire, dans un premier temps fais toi des classes genre Inscription, ConnexionBdd, Session, Joueur, etc...

'fin j'y connais rien en OO je le redis, mais là ca me parait un peu tendu du slip que de partir sur de telles bases...autant faire du procedural, car au pire si tu fais n'imp, autant le faire en procedurale, tu pourra toujours rattraper le coup, mais sur de telles bases en OO ca me parait voué à l'echec...

désolé pour ce topic un peu noir, d'autres te rassurerons peut etre...