Bonjour,

Voila je rencontre un petit problème avec mon code.

<?php

    define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');

try {
    $bdd = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME, DB_PASSWORD);
    echo "connexion reussie.<br> ";
} catch (PDOException $e) {
    echo 'Echec de la connexion : ' . $e->getMessage();
    exit;
}

    $username = $_POST['username'];
  $password = $_POST['password'];
  $rpassword = $_POST['rpassword'];
  $email = $_POST['email'];

    $req = $bdd->prepare("INSERT INTO 'test' VALUES(null, :username, :password, ;email)");
$req->execute(array(
    ":username"=>$username,
    ":password"=>$password,
    ":email"=>$email));

$res = $req->execute(array(
    ":username"=>$username,
    ":password"=>$password,
    ":email"=>$email));

 if (!$res) {
   echo "\nPDO::errorInfo():\n";
   print_r($bdd->errorInfo());
}
else {
echo "ok";
}
die();

print_r($bdd->errorInfo());

   var_dump ($req);

  ?>

   <form role="form" method="POST">
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-user"></i></span>
                <input type="text" class="form-control"  placeholder="Pseudo" name="username">
              </div>
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
                <input type="email" class="form-control"  placeholder="Email" name="email">
              </div>
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-key"></i></span>
                <input type="password" class="form-control"  placeholder="Mot de passe" name="password">
              </div>
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-key"></i></span>
                <input type="password" class="form-control"  placeholder="Repeter mot de passe" name="rpassword">
              </div>

            <button type="submit" class="btn btn-purple btn-block" name="registerBtn">Créer un compte</button>
            </form>
            <?php 
 $test=$bdd->query("SELECT * FROM test");

$donee=$test->fetch();

while ($donee=$test->fetch()) {
    echo $donee["id"] ."<br>";
    }
     ?>

Ce que je veux

je cherche juste a avoir un bonne conexion avec ma base de donee et inscrire mes utilisateurs

Ce que j'obtiens

quand je l execute sa me dit que sa cree bien le compte mais rien dans la base de donee

23 réponses


Bonjour,

Il y a un ; devant email dans la requête.
De plus en, je suis pose que le null correspond à Id qui est en auto-incremente ?
Et pour finir, vous faites 2 execute de suite avec les mêmes valeurs donc cela va engendrer des doublons.

zulamed
Auteur

oui j ai corriger le ; et oui le null est pour l id qui s auto-incremente.
mais cela ne s insere pas dans la db :s

Dans ce cas, enlever le null.
Et enlever le 1er execute pour éviter les doublons

zulamed
Auteur

et non toujours rien j ai fait un echo des mes variables du $_post ce la mes les affiches bien mais rien dans la db...

Il y a combien de champs dans la table 'test' ?

zulamed
Auteur

ce que j ai maintenant:

    $username = $_POST['username'];
  $password = $_POST['password'];
  $rpassword = $_POST['rpassword'];
  $email = $_POST['email'];

    $req = $bdd->prepare("INSERT INTO test VALUES(:username, :password, :email)");

$res = $req->execute(array(
    ":username"=>$username,
    ":password"=>$password,
    ":email"=>$email));

echo $username.'<br>';
echo $password.'<br>';
echo $email.'<br>';

?>
zulamed
Auteur

il y as 4 champs id , username, password et email

Sans préciser les champs dans le 'insert into' il faut tous les remplir :

$req = $bdd->prepare("INSERT INTO test VALUES ('', :username, :password, :email)");
zulamed
Auteur

je vien d essayer mais sa ne m inscrit rien dans la db sa peux venire de la db ? vu que elle s appelle test et la table s appelle aussi test ?

oui cela se peut. Essayer avec un nom différent et différent de test. Comme 'utilisateurs'

zulamed
Auteur

je n ai toujours rien meme en changeant le nom de la table sa fait 2 jours que je suis dessus ....
je peux les cree dans ma table avec mysql et les resortire pour voir que il sont la mais cela ne veux pas s inserer :s

Que dises les logs de Wamp ou du serveur ?

zulamed
Auteur

rien a part des erreur que j coriger dans l apres midi
24-Jun-2016 17:38:59 UTC] PHP 1. {main}() C:\wamp64\www\test\users\index.php:0

[24-Jun-2016 17:42:22 UTC] PHP Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW) in C:\wamp64\www\test\users\index.php on line 66

[24-Jun-2016 17:42:37 UTC] PHP Fatal error: Call to a member function fetch() on boolean in C:\wamp64\www\test\users\index.php on line 66

[24-Jun-2016 17:42:37 UTC] PHP Stack trace:

[24-Jun-2016 17:42:37 UTC] PHP 1. {main}() C:\wamp64\www\test\users\index.php:0

[24-Jun-2016 17:43:02 UTC] PHP Fatal error: Call to a member function fetch() on boolean in C:\wamp64\www\test\users\index.php on line 66

[24-Jun-2016 17:43:02 UTC] PHP Stack trace:

[24-Jun-2016 17:43:02 UTC] PHP 1. {main}() C:\wamp64\www\test\users\index.php:0

zulamed
Auteur

j ai incorporer ```
if (!$res) {
echo "\nPDO::errorInfo():\n";
print_r($bdd->errorInfo());
}
else {
echo "ok";
}
die();
et cela me renvoye :

PDO::errorInfo(): Array ( [0] => 00000 [1] => [2] => )```

Essayer de faire le errorInfo sur $res

Bonsoir.
Pour commencer, tu devrais vérifier si le formulaire a été soumis, car dans l'état actuel, le code d'insertion en base de données s'effectue sans même que des données soient postées.
Ensuite dans le bas de ta page, après ta requête de sélection, tu utilises deux fois $donee = $test->fetch(), tu devrais éviter de faire du doublon de code, soit tu fais :

$donee = $test->fetch();
while ($donee) {

Ou alors :

while ($donee->fetch()) {

Mais pas en double.
Pour terminer, tu ne fais aucun traitement sur les données postées, alors qu'il est conseillé de le faire, même si le fait d'utiliser une requête préparée permet d'éviter les injections SQL, rien ne t'empèche par exemple d'échaper certaines valeurs qui sont soumises par l'utilisateur, surtout qu'étant donné que tu ne vérifies pas si certains champs soumis ne sont pas vides ou d'autre chose, tu ne pourras pas renseigner l'utilisateur des champs qui peuvent poser problèmes.

zulamed
Auteur

bon je doit avoir un probleme avec ma db car j ai beau refaire des tutos rien ne s affiche dans la base de donnee

bon je doit avoir un probleme avec ma db car j ai beau refaire des tutos rien ne s affiche dans la base de donnee

Ce serait bien que tu nous dises si tu as essayé avec des modifications que nous t'avons proposés, car actuellement nous ne savons pas où tu en est exactement et par conséquent nous ne pouvons pas te proposer de solution ou du moins te donner des pistes.

zulamed
Auteur

comme sa ne fonctionnait pas j ai refair cette apres midi le tutos https://www.youtube.com/watch?v=S1-T4MLnUj4&list=PLjwdMgw5TTLX9UU3k2-zX0cWNgO6K-Q02&index=8 et cela ne fonctionne pas sur ma base de donee donc je doit avoir un probleme directement qui vien de la

zulamed
Auteur

je suis toujours sur un truc simple qui ne marche pas ...

<?php

    define('DB_HOST', 'localhost');
define('DB_NAME', 'zulamed');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');

try {
    $bdd = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME, DB_PASSWORD);
    echo "connexion reussie.<br> ";
} catch (PDOException $e) {
    echo 'Echec de la connexion : ' . $e->getMessage();
    exit;
}

    $username = $_POST['username'];
  $password = $_POST['password'];
  $rpassword = $_POST['rpassword'];
  $email = $_POST['email'];

 $d = array( 

    'username'=>$_POST['username'] ,
    'password'=> $_POST['password'],
    'email'=> $_POST['email']);

    $req = $bdd->prepare("INSERT INTO users('username', 'password','email') VALUES ( :username, :password, :email)");
    $req->execute($d);

print_r ($req).'<br>';

echo $username.'<br>';
echo $password.'<br>';
echo $email.'<br>';

    ?>

   <form role="form" method="POST">
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-user"></i></span>
                <input type="text" class="form-control"  placeholder="Pseudo" name="username">
              </div>
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
                <input type="email" class="form-control"  placeholder="Email" name="email">
              </div>
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-key"></i></span>
                <input type="password" class="form-control"  placeholder="Mot de passe" name="password">
              </div>
              <div class="form-group input-group">
                <span class="input-group-addon"><i class="fa fa-key"></i></span>
                <input type="password" class="form-control"  placeholder="Repeter mot de passe" name="rpassword">
              </div>

            <button type="submit" class="btn btn-purple btn-block" name="registerBtn">Créer un compte</button>
            </form>

Il faudrait tester qu'il y est des éléments dans $_POST car là, quoiqu'il arrive, on fait une requête.

zulamed
Auteur

j ai refait encore tout refait et rien ne change au niveau de la db ```
<?php

define('DB_HOST', 'localhost');

define('DB_NAME', 'zulamed');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');

try {
$odb = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME, DB_PASSWORD);
echo "connexion reussie.<br> ";
} catch (PDOException $e) {
echo 'Echec de la connexion : ' . $e->getMessage();
exit;
}

?>

<div class="container">
  <div class="row">
  <div class="">
      <h3 class="text-center">Créer un compte</h3>
        <p class="text-center">Veillez utiliser le meme pseudo ingame</p>
        <hr class="clean">
        <?php

if (isset($_POST['registerBtn']))
{
$username = $_POST['username'];
$password = $_POST['password'];
$rpassword = $_POST['rpassword'];
$email = $_POST['email'];
$checkUsername = $odb -> prepare("SELECT COUNT(*) FROM users WHERE username = :username");
$checkUsername -> execute(array(':username' => $username));
$countUsername = $checkUsername -> fetchColumn(0);
if (empty($username) || empty($password) || empty($rpassword) || empty($email))
{
echo 'vuiellez tous remplir';
}
else
{
if (!ctype_alnum($username) || strlen($username) < 4 || strlen($username) > 15)
{
echo 'peudo entre 5et 14 caractere';
}
else
{
if (!($countUsername == 0))
{
echo 'peudo deja pris';
}
else
{
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo 'email invalide';
}
else
{
if ($password != $rpassword)
{
echo 'pas le meme mot de pass';
}
else
{

        try {
        $d = array( 

        'username'=>$_POST['username'] ,
        'password'=> $_POST['password'],
        'email'=> $_POST['email']);

        $req = $odb->prepare("INSERT INTO users(username, password,email) VALUES ( :username, :password, :email)");
        $req->execute($d);
        } catch (Exception $e) {

        echo "rien ne c est executer";

        }}

        echo 'compte a ete cree';
        }
        }
        }
        }
        }

?>
<form role="form" method="POST">
<div class="form-group input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
<input type="text" class="form-control" placeholder="Pseudo" name="username">
</div>
<div class="form-group input-group">
<span class="input-group-addon"><i class="fa fa-envelope"></i></span>
<input type="email" class="form-control" placeholder="Email" name="email">
</div>
<div class="form-group input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" class="form-control" placeholder="Mot de passe" name="password">
</div>
<div class="form-group input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" class="form-control" placeholder="Repeter mot de passe" name="rpassword">
</div>

        <button type="submit" class="btn btn-purple btn-block" name="registerBtn">Créer un compte</button>
        </form>
        <hr>
        <p class="text-center text-gray">Vous avez deja un compte ?</p>
        <a href="signin.php" class="btn btn-default btn-block">Se connecter</a>
    </div>
    </div>
</div>

```
zulamed
Auteur

voila ce code fonctionne mis en ligne mais pas en local