Problème PHP

Résolu
mat78800 Messages postés 57 Statut Membre -  
mat78800 Messages postés 57 Statut Membre -
Bonjour,

Je suis entrain d'essayer de creer une base de donnée mais je n'arrive pas a ajouter des donnée et je sais pas pourquoi...

Je vous laisse si dessous mon code :

<html>
<body>

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

<p>

Pseudo : <input type ="text" name="Pseudo" /> <br><br>

Mot de passe : <input type ="text" name="Motdepasse" /> <br><br>

Adresse mail : <input type ="text" name="Adresse" /> <br><br>

Dans quel pays habitez-vous? : <select name="Dans quelpayshabitez-vous?" name="Pays">
<option value="France">France </option>
<option value="Canada">Canada </option>
<option value="Royaume-Uni">Royaume-Uni </option>
<option value="Espagne">Espagne</option>
<option value="Italie">Italie</option>
<option value="Allemagne">Allemagne</option>
</select><br>

<input type="submit" name="bt" value="Valider" /><br>

<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=nomdelabase', 'root', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());

//recuperation des name
$Pseudo=$_POST['Pseudo'];
$Motdepasse=$_POST['Motdepasse'];
$Adresse=$_POST['Adresse'];
$Pays=$_POST['Pays'];

if ('$bt')
{
$ok=mysql_db_query("nomdelabase","INSERT INTO membres (Pseudo,Motdepasse,Adresse,Pays) VALUES
('$Pseudo','$Motdepasse','$Adresse', '$Pays)");

echo"<div align='center'>";
echo"<font face='Verdana' size='3' >L'élément a bien été inséré !</font>";
echo"</div>";
}
?>

</p>

</form>
</body>
</html>

5 réponses

Résumé de la discussion

Plusieurs erreurs empêchent l’insertion des données dans la base de données : le code mélange PDO et mysql_db_query et repose sur des appels incompatibles, ce qui empêche l’exécution correcte des requêtes d’insertion. Il faut choisir une seule approche d’accès à la base et privilégier PDO avec des requêtes préparées pour insérer les données, afin d’éviter les injections et les erreurs de syntaxe. Corriger le formulaire : n’utiliser qu’un seul name pour le champ Pays, et récupérer les valeurs via $_POST['Pseudo'], $_POST['Motdepasse'], $_POST['Adresse'] et $_POST['Pays'], en testant isset et non vide. D’autre part, il est recommandé d’appliquer une validation du format d’adresse mail et des messages d’erreur clairs pour guider l’utilisateur, afin d’éviter l’insertion de données incorrectes ou incomplètes.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. jeremy.s Messages postés 1248 Statut Membre 79
     
    Salut !

    Tu déclares un PDO, et tu utilises un mysql_db_query. Petit probème à ce niveau là :)
    Ensuite, deuxieme ptit soucis : <select name="Dans quelpayshabitez-vous?" name="Pays">, tu as deux name.

    Sinon, fais un test de sécurité pour vérifier que tes input ont bien été rempli :
    if(isset($_POST) && !empty($_POST['Pseudo']) && !empty($_POST['Motdepasse']) && !empty($_POST['Pays']))

    Pour t'éviter cela :
    $Pseudo=$_POST['Pseudo'];
    $Motdepasse=$_POST['Motdepasse'];
    $Adresse=$_POST['Adresse'];
    $Pays=$_POST['Pays'];
    Tu peux faire un extract($_POST);
    Ca va automatique te créer les variables :)

    Et voici la doc de l'objet PDO pour executer une requete :
    http://www.php.net/manual/fr/pdostatement.execute.php

    Voilà :)

    1
    1. mat78800 Messages postés 57 Statut Membre
       
      Merci mais je comprend pas tres bien ce qu'il faut faire meme avec la doc que tu m'as donné...
      0
    2. mat78800 Messages postés 57 Statut Membre
       
      Up
      0
    3. jeremy.s Messages postés 1248 Statut Membre 79
       
      Regarde les exemples et adapte les à tes tables et à tes données ;-)
      0
    4. mat78800 Messages postés 57 Statut Membre
       
      Bah justement il utilisait que des requete preparer en faite... :/
      0
    5. jeremy.s Messages postés 1248 Statut Membre 79
       
      Et alors ? C'est ce qu'il faut faire de toute manière :) C'est plus propre et plus sécurisé ;-)
      0
  2. Neoxz Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bizarre...
    0
  3. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Tu as un message d'erreur ou non ?
    « je n'arrive pas à ajouter des données », c'est un peu léger comme description ^^'

    Sinon à tout hasard, tu as un soucis dans ton bloc catch() qui n'est pas fermé :

    catch (Exception $e)
    {
    die('Erreur : ' . $e->getMessage());

    il manque le
    }
    0
    1. mat78800 Messages postés 57 Statut Membre
       
      merci il vient de me changer le message d'erreur ; voila ce quil me met :



      Notice: Undefined variable: Pseudo in C:\wamp\www\Projet Isn\formulaire.php on line 47

      Notice: Undefined variable: Motdepasse in C:\wamp\www\Projet Isn\formulaire.php on line 47

      Notice: Undefined variable: Adresse in C:\wamp\www\Projet Isn\formulaire.php on line 47

      Notice: Undefined variable: Pays in C:\wamp\www\Projet Isn\formulaire.php on line 4

      Deprecated: Function mysql_db_query() is deprecated in C:\wamp\www\Projet Isn\formulaire.php on line 47

      Deprecated: mysql_db_query(): This function is deprecated; use mysql_query() instead in C:\wamp\www\Projet Isn\formulaire.php on line 47
      L'élément a bien été inséré !



      la ligne 47 est : ('$Pseudo','$Motdepasse','$Adresse', '$Pays)");
      0
  4. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Ta page, c'est bien "after.php" ?
    0
    1. mat78800 Messages postés 57 Statut Membre
       
      Ma page cible oui ...
      0
    2. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Alors tu as un soucis, parce que ton code d'insertion est dans ta page source !
      Il faut le mettre dans la page cible.
      0
    3. mat78800 Messages postés 57 Statut Membre
       
      Comment ca?? FAut que je mette le formulaire dans l'une et le code php dans l'autre??
      0
    4. ShayFmw Messages postés 121 Statut Membre 43
       
      Non, il est tout à fait possible d'utiliser la même page en tant que formulaire et insertion des données du formulaire. (donc normalement tu n'as qu'une seule page nommée "After.php")
      0
    5. mat78800 Messages postés 57 Statut Membre
       
      Ah ok ! Merci . Par contre je comprend pas tres bien ce que jeremy.s m'a dit sur le PDO tu peut m'aider?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. the_jb Messages postés 731 Statut Membre 58
     
    "<select name="Dans quelpayshabitez-vous?" name="Pays">"
    Le name de ton <select> va être ta variable à récupèrer. tu veux donc récupérer la valeur de ton option (<option value="...">)

    donc tu ne peux pas avoir 2 names dans un <select>, si tu veux tu peux mettre
    id="Dans quelpayshabitez-vous?" mais pour moi c'est inutile.

    Evites les majuscules dans tes variables ou donne toi des normes de codages du style "nomPersonne" ou "prenomPersonne". Pour la rapidité et simplicité de debug et compréhension du code. Idem pour tes noms de fichiers.

    j'vais corrigé rapidement ton code :

    <html>
    <body>

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

    <p>

    Pseudo : <input type ="text" name="Pseudo" /> <br><br>

    Mot de passe : <input type ="text" name="Motdepasse" /> <br><br>

    Adresse mail : <input type ="text" name="Adresse" /> <br><br>

    Dans quel pays habitez-vous? : <select name="Pays">
    <option value="France">France </option>
    <option value="Canada">Canada </option>
    <option value="Royaume-Uni">Royaume-Uni </option>
    <option value="Espagne">Espagne</option>
    <option value="Italie">Italie</option>
    <option value="Allemagne">Allemagne</option>
    </select><br>

    <input type="submit" name="bt" value="Valider" /><br>

    <?php
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=nomdelabase', 'root', '');
    }
    catch (Exception $e)
    {
    die('Erreur : ' . $e->getMessage());

    if ($_POST['bt'])
    {
    //recuperation des name
    $Pseudo=$_POST['Pseudo'];
    $Motdepasse=$_POST['Motdepasse'];
    $Adresse=$_POST['Adresse'];
    $Pays=$_POST['Pays'];

    $ok=$bdd->exec("INSERT INTO membres (Pseudo,Motdepasse,Adresse,Pays)VALUES ('$Pseudo','$Motdepasse','$Adresse', '$Pays')");

    echo"<div align='center'>";
    echo"<font face='Verdana' size='3' >L'élément a bien été inséré !</font>";
    echo"</div>";
    }
    ?>

    </p>

    </form>
    </body>
    </html>


    test ça s'il te plait et donne m'en des news.
    0
    1. mat78800 Messages postés 57 Statut Membre
       
      Sa marche tres bien Merci Bien !

      et une petite question encore : Comment peut t'on s'assurer que l'utilisateur te donne une adresse mail valide ( genre avec @hotmail.fr)??
      0
    2. the_jb Messages postés 731 Statut Membre 58
       
      Tu peux décomposer ta variable qui contient le mail.
      $domain = explode('@', $email);
      if (checkdnsrr($domain[1]))
      echo "Domaine de l'adresse valide";


      ou

      utilisé la fonction filter_var() de php

      if(filter_var($email, FILTER_VALIDATE_EMAIL)){
      echo "email valide";
      }

      ou

      Assurer une écriture correcte et valide
      function VerifierAdresseMail($adresse)
      {
      $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
      if(preg_match($Syntaxe,$adresse))
      return true;
      else
      return false;
      }

      $adresse=htmlentities($_POST['adresse']);
      if(VerifierAdresseMail($adresse))
      echo '<p>Votre adresse est valide.</p>';
      else
      echo '<p>Votre adresse e-mail n\'est pas valide.</p>';

      En espérant répondre à tes attentes. ( Ce post est-il résolu ? )
      0
    3. mat78800 Messages postés 57 Statut Membre
       
      Bah oui et non car je t'avoue que je suis toujours de plus en plus gourmand ;)

      Le dernier code que tu m'a donnez est tres bien mais meme si le mail est pas valide il me l'enregistre quand meme.

      Et comment peut t'on faire pour que quand on demande deux fois le mod de passe, à l'utilisateur, il lui disent s'il est identique??
      0
    4. the_jb Messages postés 731 Statut Membre 58
       
      Mot de passe : <input type ="text" name="Motdepasse" />
      Mot de passe de confirmation : <input type ="text" name="Motdepasse2" />

      if($_POST['motdepasse'] == $_POST['motdepasse2'])
      {
      echo "mot de passe identique";
      }
      else
      {
      echo "mot de passe de confirmation incorrecte";
      }


      Tout simplement, n'oubli pas de mettre les <input> dans un <form>
      0
    5. mat78800 Messages postés 57 Statut Membre
       
      Ok merci ! mais seulement je crois que je met ces truc au mauvais endroit vu que la personne peut comme accepter si les mod de passes sont différent...
      0