[RESOLU] fiche inscription n'envois rien a la bd ???

Raphael
Invité n'ayant pas de compte PHPfrance

17 mars 2016, 15:18

bonjours a vous, donc voila mon probleme je fait une page d'inscription pour enregistrer des clients sur un site pour un projet de cours, et le truc c'est que quand je clic su rle bouton , mon message de confirmation de fonctionne pas et rien n'es envoyer la BD.
voici le code
<?php
      $pdo = new PDO('mysql:dbname=b_carchan;host=localhost', 'root', '');
?>
<?php           
            
                if(!empty($_POST)){
                    $errors = array();  
            
                    //VERIFICATION nom
                    if(empty($_POST['nom']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['nom'])){
                        $errors['nom'] = "Votre nom n'est pas valide (alphanumérique)";
                    }
                    else{
                        $req = $pdo->prepare('SELECT * FROM t_client WHERE nom = ?');
                        $req->execute([$_POST['nom']]);
                        $user = $req->fetch();
                    
                        if($user){
                            $errors['nom'] = 'Ce nom est déjà pris';
                        }
                    }   
                    
                    //VERIFICATION email
                    if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
                        $errors['email'] = "Votre email n'est psa valide";
                    }
                    else{
                        $req = $pdo->prepare('SELECT * FROM t_client WHERE email = ?');
                        $req->execute([$_POST['email']]);
                        $user = $req->fetch();
                        
                        if($user){
                            $errors['email'] = 'Cet email est déjà utilisé pour un autre compte';
                        }
                    }
                    
                    //VERIFIACTION MOT DE PASSE
                    if(empty($_POST['mdp']) || $_POST['mdp'] != $_POST['password_confirm']){
                        $errors['mdp'] = "Vous devez rentrer un mot de passe valide";
                    }   

                        // VERIFICATION TEL
                   if(empty($_POST['tel']) || !preg_match('/^[0-9]+$/', $_POST['tel'])){
                        $errors['tel'] = "Votre tel n'est pas valide (alphanumérique)";
                    }
                    else{
                        $req = $pdo->prepare('SELECT * FROM t_client WHERE tel = ?');
                        $req->execute([$_POST['tel']]);
                        $user = $req->fetch();
                    
                        if($user){
                            $errors['tel'] = 'Ce tel est déjà pris';
                        }
                    }
                    
                    if(empty($errors)){                 
                    $req = $pdo->prepare("INSERT INTO t_client SET  civilite = ?, nom_cli = ?, prenom_cli = ?, telephone = ?, email = ?, mdp = ?, type_cb = ?, num_cb = ?, date_expire = ?, crypto = ?");
                    $password = password_hash($_POST['mdp'], PASSWORD_BCRYPT);                 
                    $req->execute([$_POST['civilite'], $_POST['nom_cli'], $_POST['prenom_cli'], $_POST['telephone'],$_POST['email'],$password,$_POST['type_cb'],$_POST['num_cb'],$_POST['date_expire'],$_POST['crypto'] ]);
                    die ("Le compte a bien été crée");
                    }
                    
                    
                }                       


?>
<html>
  
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css"
    rel="stylesheet" type="text/css">
    <link href="http://pingendo.github.io/pingendo-bootstrap/themes/default/bootstrap.css"
    rel="stylesheet" type="text/css">
    <link href="https://bootswatch.com/yeti/bootstrap.min.css" rel="stylesheet"
    type="text/css">
  </head>
  
  <body>
    <div class="section">
      <div class="container">
        <div class="row">
          <div class="col-md-12">
            <form class="form-horizontal" role="form">
              <div >
                <div class="col-sm-2">
                  <label for="inputEmail3" class="control-label">Civilité</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" id="inputEmail3" placeholder="Civilité" name="civilite">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label for="inputPassword3" class="control-label">Nom</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" id="inputPassword3" placeholder="Nom" name="nom_cli">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Prénom</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="Prénom" name="prenom_cli">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Tél</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="Tél" name="telephone">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Email</label>
                </div>
                <div class="col-sm-10">
                  <input type="email" class="form-control" placeholder="[email protected]" name="email">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Mot de passe</label>
                </div>
                <div class="col-sm-10">
                  <input type="password" class="form-control" placeholder="Mot de passe" name="mdp">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Confirmation</label>
                </div>
                <div class="col-sm-10">
                  <input type="password" class="form-control" placeholder="Confirmation mot de passe" name="password_confirm">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Identification bancaire</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="Visa / Master / American Express" name="type_cb">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Numéros de carte</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="1234567891234567" name="num_cb">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Date d'expiraion</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="05-1996" name="date_expire">
                </div>
              </div>
              <div >
                <div class="col-sm-2">
                  <label class="control-label">Cryptograme</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="012345" name="crypto">
                </div>
              </div>
              <button type="submit" class="btn btn-primary">Valdier</button>
            </form>
          </div>
        </div>
      </div>
    </div>
  </body>

</html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2016, 15:33

Bonjour,

Si tu ne précises pas la méthode d'envoi des données de ton formulaire (attribut method=""), celles-ci sont envoyées en GET par défaut, tu ne récupéreras donc rien dans $_POST ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Raphael
Invité n'ayant pas de compte PHPfrance

17 mars 2016, 15:54

la modification a été effectue mais je n'ais toujours rien qui viens dans la bd :/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2016, 16:15

Il faut avancer pas à pas... tu n'as rien en base, mais as-tu le message "Le compte a bien été crée" a l'écran ? si oui le problème vient de la requête, sinon c'est que php n'arrive pas jusqu'à cette portion de code.

Vérifies le retour de l'exécution de la requête... en cas d'erreur, affiche le message ... (perso j'ai plus l'habitude d'utiliser la syntaxe "INSERT INTO .. VALUES" que "INSERT INTO ... SET ...". Normalement MySQL accepte cette syntaxe, mais le problème peut également venir de là)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Raphael
Invité n'ayant pas de compte PHPfrance

17 mars 2016, 16:28

je pense que vous avez raisons , ma requête ne doit pas être bonne, du tout. je viens de faire quelque teste et j'utilise pdo avec mysql, j'ai plusieurs petit bug, auriez vous une portion de code dont je pourrez m'inspirer ? je débute vraiment en php et je ne trouve pas de tuto myslq php pour les formulaire comme je fait . merci encore

Mammouth du PHP | 1029 Messages

17 mars 2016, 16:40

@Ryle à raison il y a une erreur dans le requête cela devrais être ceci :

Code : Tout sélectionner

$req = $pdo->prepare("INSERT INTO t_client (civilite, nom_cli , prenom_cli, telephone, email , mdp , type_cb , num_cb , date_expire , crypto ) VALUES (?,?,?,?,?,?,?,?,?,?)");
L'expérience est la somme de toutes nos erreurs.

Raphael
Invité n'ayant pas de compte PHPfrance

17 mars 2016, 17:12

bon voila j'ai fait des changement pour faire plus claire et avec mysql mais quand je clic sur le bouton valider le formualire ce vide et ça me dit que les champ sont vide
voila le nouveau code
<?php

    $connect=mysql_connect("localhost","root","") or die("erreur de connexion");
    mysql_select_db("b_carchan",$connect);
    mysql_set_charset('utf8',$connect);
?>
<?php 
// On commence par récupérer les champs 
 
if(isset($_POST['civilite']))      $civilite=$_POST['civilite'];
else      $civilite="";


if(isset($_POST['nom_cli']))      $nom_cli=$_POST['nom_cli'];
else      $nom_cli="";

if(isset($_POST['prenom_cli']))      $prenom_cli=$_POST['prenom_cli'];
else      $prenom_cli="";

if(isset($_POST['telephone']))      $telephone=$_POST['telephone'];
else      $telephone="";

if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";


if(isset($_POST['mdp']))      $mdp=$_POST['mdp'];
else      $mdp="";

if(isset($_POST['type_cb']))      $type_cb=$_POST['type_cb'];
else      $type_cb="";

if(isset($_POST['num_cb']))      $num_cb=$_POST['num_cb'];
else      $num_cb="";

if(isset($_POST['date_expire']))      $date_expire=$_POST['date_expire'];
else      $date_expire="";

if(isset($_POST['crypto']))      $crypto=$_POST['crypto'];
else      $crypto="";

// On vérifie si les champs sont vides 
if(empty($civilite) OR empty($nom_cli) OR empty($prenom_cli) OR empty($email) OR empty($telephone) OR empty($mdp) OR empty($type_cb) OR empty($num_cb) OR empty($date_expire) OR empty($crypto)  ) 
   { 
    echo '<font color="red">Attention, les chanmp sont vide'; 
    } 

// Aucun champ n'est vide, on peut enregistrer dans la table 
else      
    { 
       // connexion à la base
$connect=mysql_connect("localhost","root","") or die("erreur de connexion");
// sélection de la base  

    mysql_select_db("b_carchan",$connect);
     
    // on écrit la requête sql 
    $sql = "INSERT INTO t_client ( civilite , nom_cli , prenom_cli , telephone , email , mdp , type_cb , num_cb , date_expire , crypto )                
                    VALUES('$civilite', '$nom_cli', '$prenom_cli', '$telephone','$email','$mdp','$type_cb','$num_cb','$date_expire','$crypto' )"; 
     
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    // on affiche le résultat pour le visiteur 
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();  // on ferme la connexion 
    }  
?>
<html>
  
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css"
    rel="stylesheet" type="text/css">
    <link href="http://pingendo.github.io/pingendo-bootstrap/themes/default/bootstrap.css"
    rel="stylesheet" type="text/css">
    <link href="https://bootswatch.com/yeti/bootstrap.min.css" rel="stylesheet"
    type="text/css">
  </head>
  
  <body>
    <div class="section">
      <div class="container">
        <div class="row">
          <div class="col-md-12">
            <form class="form-horizontal" role="form">
              <div class="form-group">
                <div class="col-sm-2">
                  <label for="inputEmail3" class="control-label">Civilité</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" id="inputEmail3" placeholder="Civilité" name="civilite">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label for="inputPassword3" class="control-label">Nom</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" id="inputPassword3" placeholder="Nom" name="nom_cli">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Prénom</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="Prénom" name="prenom_cli">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Tél</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="Tél" name="telephone">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Email</label>
                </div>
                <div class="col-sm-10">
                  <input type="email" class="form-control" placeholder="[email protected]" name="email">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Mot de passe</label>
                </div>
                <div class="col-sm-10">
                  <input type="password" class="form-control" placeholder="Mot de passe" name="mdp">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Confirmation</label>
                </div>
                <div class="col-sm-10">
                  <input type="password" class="form-control" placeholder="Confirmation mot de passe" name="password_confirm">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Identification bancaire</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="Visa / Master / American Express" name="type_cb">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Numéros de carte</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="1234567891234567" name="num_cb">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Date d'expiraion</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="05-1996" name="date_expire">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-2">
                  <label class="control-label">Cryptograme</label>
                </div>
                <div class="col-sm-10">
                  <input type="text" class="form-control" placeholder="012345" name="crypto">
                </div>
              </div>
              <button type="submit" class="btn btn-primary">Valdier</button>
            </form>
          </div>
        </div>
      </div>
    </div>
  </body>

</html>

Mammouth du PHP | 1029 Messages

17 mars 2016, 17:33

Bon alors, ton premier code est mieux que celui que tu nous présente ici, surtout que tu utilise des fonctions mysql_ qui sont déprécié et supprimé en PHP7.

Par contre en regardant ton dernier code, tu ne tiens pas compte des remarques de @Ryle, qui me semble à été clair :

Code : Tout sélectionner

<form class="form-horizontal" role="form">
Cette ligne est imcomplète, il manque l'action et la méthode, cela doit ressembler à ceci :

Code : Tout sélectionner

<form action="MonFichier.php" method="post">
Modifié en dernier par Maitrepylos le 17 mars 2016, 17:50, modifié 1 fois.
L'expérience est la somme de toutes nos erreurs.

Raphael
Invité n'ayant pas de compte PHPfrance

17 mars 2016, 17:49

haaa voila , tout a été envoyer , il me manquer juste method="POST", ça fonctionne enfin , il ne me faut juste que modifier certaine ligne pour avoir une confirmation de password

merci a vous !

Mammouth du PHP | 1029 Messages

17 mars 2016, 17:51

Oui et je conseille de reprendre le code avec le PDO
L'expérience est la somme de toutes nos erreurs.