【问题标题】:Unable to insert datas in the database using PDO无法使用 PDO 在数据库中插入数据
【发布时间】:2014-06-29 19:24:34
【问题描述】:

我想使用 PDO 创建一个注册表单,但由于未知原因,除了写入数据库之外,一切正常。

从星期五开始我就陷入了困境,而且我是 PDO 的初学者,我相信我没有看到什么,但我不知道是什么...... 有什么想法吗?

    <?php

include('bdd.php'); //Allows to connect to the db from an other file

?>


<form name="inscription" action="confirmation.php" method="POST">
  <label for 'prenom'>Prénom: </label>
  <input type="text" name="prenom" required placeholder="Prénom"/>
  <label for 'nom'>Nom: </label>
  <input type="text" name="nom" required placeholder="Nom"/>
  <label for 'passe'>Mot de passe : </label>
  <input type="password" name="passe" required/>
  <label for 'confirm_passe'>Confirmez le mot de passe : </label>
  <input type="password" name="passe" required/>
  <label for 'email'>Email: </label>
  <input type="email" name="email"/ required placeholder="Adresse e-mail">
  <label for 'telephone'>Téléphone: </label>
  <input type="telephone" name="telephone"/ required placeholder="ex: 0123456789">
  <select name="fonction" id="fonction" required="required">
    <option value="">Selectionnez votre fonction</option>
    <option value="choix1">Présiden(e)</option>       
    <option value="choix2">Vice-Président(e)</option>
    <option value="choix3">Administrateur</option>
    <option value="choix4">Directeur/trice</option>
    <option value="choix5">Travailleur social</option>
    <option value="choix6">Secrétaire</option>
</select>
<input type="submit" value="send">
</form>



<?php


if(!empty($_POST['inscription'])){

if ( $_POST['confirm_passe'] != $_POST['passe'] ){
    echo "Passowords don't match";
}

$req = $db->prepare('INSERT INTO inscrits (prenom, nom, passe, telephone, email, fonction, droits) VALUES(:prenom, :nom, :passe, :telephone, :email, :fonction, 0)');
          $req->execute(array(
          'prenom' => $_POST['prenom'],
          'nom' => $_POST['nom'],
          'passe' => $_POST['passe'],
          'telephone' => $_POST['telephone'],      
          'email' => $_POST['email'],
          'fonction' => $_POST['fonction'],
          'droits' => $_POST['droits'],
          ));

}
?>

如您所见,我不是英语,所以如果您需要理解某些内容,请随时询问任何翻译:)

谢谢!

【问题讨论】:

  • 能否将PDO::ATTR_ERRMODE 改为PDO::ERRMODE_EXCEPTION,这将有助于显示sql 错误。
  • 您是否在数据库中存储未加密的密码?!请尽快查看phptherightway.com/#security

标签: php sql forms pdo insert


【解决方案1】:

您在 prepare() 函数中缺少 :droits(在 VALUES 内)。

$req = $db->prepare('INSERT INTO inscrits (prenom, nom, passe, telephone, email, fonction, droits) VALUES (:prenom, :nom, :passe, :telephone, :email, :fonction, :droits)');
          $req->execute(array(
          'prenom' => $_POST['prenom'],
          'nom' => $_POST['nom'],
          'passe' => $_POST['passe'],
          'telephone' => $_POST['telephone'],      
          'email' => $_POST['email'],
          'fonction' => $_POST['fonction'],
          'droits' => $_POST['droits'],
          ));
}

【讨论】:

    【解决方案2】:

    好的,所以我终于设法得到了一些实际工作的东西,这里有一个注册表单的代码,如果将来有人需要它,需要管理员验证:

    <?php
    
    include('bdd.php'); //File that allows you to get connected to the server
    
    
    if(!empty($_POST)){
    
      // Form has been submitted
      if ( $_POST['confirm_passe'] != $_POST['passe'] ) echo "Passwords don't match";
    
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
      try{
        //
        $req = $db->prepare('INSERT INTO your_table (table1, table2, table3, table4, rights) VALUES(:value1, :value2, :value3, :value4, :rights)');
    
        $req->execute(array(
          ':value1' => $_POST['table1'],
          ':value2' => $_POST['table2'],
          ':value3' => $_POST['table3'],
          ':value4' => $_POST['table4'],      
          ':rights' => 0
        ));
        header('location:confirmation.php'); //Redirects you in a page that informs you that you are now registered
      }
       catch (PDOException $e) {
          print $e->getMessage ();
      }
    }
    ?>
    <!--And here goes the form that you can adapt at will -->
    <form name="inscription" action="inscription.php" method="POST">
      <label for="prenom">Prénom: </label>
      <input type="text" name="prenom" required placeholder="Prénom"/>
      <label for 'nom'>Nom: </label>
      <input type="text" name="nom" required placeholder="Nom"/>
      <label for 'passe'>Mot de passe : </label>
      <input type="password" name="passe" required/>
      <label for="confirm_passe">Confirmez le mot de passe : </label>
      <input type="password" name="confirm_passe" required/>
      <label for 'email'>Email: </label>
      <input type="email" name="email"/ required placeholder="Adresse e-mail">
      <label for 'telephone'>Téléphone: </label>
      <input type="telephone" name="telephone"/ required placeholder="ex: 0123456789">
      <select name="fonction" id="fonction" required="required">
        <option value="">Selectionnez votre fonction</option>
        <option value="choix1">Présiden(e)</option>       
        <option value="choix2">Vice-Président(e)</option>
        <option value="choix3">Administrateur</option>
        <option value="choix4">Directeur/trice</option>
        <option value="choix5">Travailleur social</option>
        <option value="choix6">Secrétaire</option>
    </select>
    <input type="submit" value="send">
    </form>
    

    感谢您的帮助!

    【讨论】:

      【解决方案3】:

      input_parameters 中的键必须与 SQL 中声明的键匹配。

      see doc

      试试这个:

      编辑错误信息:

      设置:

      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      

      在您的 bdd.php 文件中进行 pdo 错误处理。

      然后

      try{
      
        $req = $db->prepare('INSERT INTO inscrits (prenom, nom, passe, telephone, email, fonction, droits) VALUES(:prenom, :nom, :passe, :telephone, :email, :fonction, 0)');
      
        $req->execute(array(
                    ':prenom' => $_POST['prenom'],
                    ':nom' => $_POST['nom'],
                    ':passe' => $_POST['passe'],
                    ':telephone' => $_POST['telephone'],      
                    ':email' => $_POST['email'],
                    ':fonction' => $_POST['fonction'],
                    ':droits' => $_POST['droits']
                    ));
      
      }
       catch (PDOException $e) {
          print $e->getMessage ();
          die;
      }
      

      【讨论】:

      • @user3628383:你检查了吗?
      • 感谢您的快速回答,但我的数据库中仍然没有此代码...事实是我没有收到任何错误,我被重定向到我想要的地方。有没有办法让我知道哪里出了问题?
      • 好的,所以我试了一下......没有错误。我的数据库中仍然没有任何内容。检查两个密码是否相同似乎也忽略了。
      • 你复制了我的代码吗?我又变了。现在试试吧
      • 是的,试了试了又试了一遍,还是一无所获……这段代码到底有什么问题??
      猜你喜欢
      • 1970-01-01
      • 2021-08-20
      • 2012-11-11
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多