表单数据库连接问题

时间:2015-08-25 作者:prakash

很多人都问过同样的问题,我读过这些东西,而我的不同,

我试图从表单中在数据库中插入一些值,但没有插入

我在数据库中有一个表,有6列,只想在4列中插入一些值

表名称:wp_contactus

6列

id名字姓氏电子邮件

  • 查询
  • 注册日期
  • 这是仅在4列中插入的代码

    4列

    第一名第二名电子邮件查询代码:

      <div class="wrap">
          <form action="" method="post">
              FirstName <input type="text" name="firstNametxt" value="" /><br/>
              LastName   <input type="text" name="lastNametxt" value="" /><br/>
              email <input type="text" name="email" value="" /><br/>
              Query <input type="text" name="query" value="" /><br/>
              <input name="Submit" type="submit" value="Submit">
          </form>
          <form method="post">
              <?php   
              global $wpdb;
                      $firstName = $_POST["firstNametxt"];
                      $lastName = $_POST["lastNametxt"];
                      $email = $_POST["email"];
                      $query = $_POST["query"];
    
                      echo $firstName;
              $contactus_table = $wpdb->prefix."contactus";
    
              $sql = "INSERT INTO $contactus_table (id, firstname, lastname, email,                                               
    
                query, reg_date) VALUES (\'2\', $firstName, $lastName, $email, $query,
    
                CURRENT_TIMESTAMP);";                  
    
                $wpdb->query($sql)) 
    
         ?>
         </form>
         </div>
    
         <?php
              }
              add_shortcode( \'CONUS\', \'contactus_shortcode\' );
    
         ?>
     <?php
          }
          add_shortcode( \'CONUS\', \'contactus_shortcode\' );
    
     ?>
    

  • 2 个回复
    SO网友:TheDeadMedic

    You\'re inserting raw POST data straight into an SQL query - 消毒,消毒,消毒!下面的代码应该可以帮助您开始,但我建议您添加一些额外的检查(电子邮件是否有效?字符串是否过长?等等):

    <?php
    
    $errors =
    $values = array();
    
    if ( isset( $_POST[\'Submit\'] ) ) {
        $fields = array(
            \'firstNametxt\',
            \'lastNametxt\',
            \'email\',
            \'query\',
        );
    
        foreach ( $fields as $field ) {
            if ( isset( $_POST[ $field ] ) ) { // Never assume a POST field will be set
                // Ensure the value is a string, POST data can be an array if the user is meddling
                $value = ( string ) $_POST[ $field ];
    
                // Strip slashes that WordPress adds
                $value = wp_unslash( $value );
    
                // Remove trailing/preceding whitespace
                $value = trim( $value );
    
                // Core WordPress function to check for invalid UTF-8, strip tags, remove line breaks etc.
                $value = sanitize_text_field( $value );
            } else {
                $value = \'\';
            }
    
            if ( ! $value )
                $errors[ $field ] = \'This field is required.\';
            else
                $values[ $field ] = $value;
        }
    
        if ( ! $errors ) {
            $wpdb->insert(
                $wpdb->prefix . \'contactus\',
                $values,
                \'%s\'
            );
        }
    }
    
    ?>
    
    <?php if ( $errors ) : ?>
    
        <p>Please ensure all fields are completed.</p>
    
    <?php endif ?>
    
    <form method="post">
        FirstName <input type="text" name="firstNametxt" value="" /><br/>
        LastName   <input type="text" name="lastNametxt" value="" /><br/>
        email <input type="text" name="email" value="" /><br/>
        Query <input type="text" name="query" value="" /><br/>
        <input name="Submit" type="submit" value="Submit">
    </form>
    
    以及read up on the codex for safely inserting into tables using wpdb::insert()

    SO网友:Mat

    您似乎正在尝试在提交表单之前插入数据。上面的代码有两个表单,一个用于输入,另一个用于PHP。

    您需要检查表单是否已提交,然后执行PHP代码,如果未提交,则显示表单。

    $submitted_form = $_POST[\'submit\'];
    
    if(isset($submitted_form)) {
       //process and validate, then insert
    } else {
       // nothing submitted, so lets display the form
      <form action="" method="post">
          FirstName <input type="text" name="firstNametxt" value="" /><br/>
          LastName   <input type="text" name="lastNametxt" value="" /><br/>
          email <input type="text" name="email" value="" /><br/>
          Query <input type="text" name="query" value="" /><br/>
          <input name="Submit" type="submit" value="Submit">
      </form>
    }
    
    这将为您指明正确的方向。

    相关推荐

    Reducing Database Query Time

    在这里寻找一些建议。有一位客户已经在WooCommerce上工作了大约一年半。我们为他们建了一个新网站。他们开始增加一条新的家具生产线。每个项目有700-800个产品变体组合。由于从生产线中添加了大约8个新产品,当您在管理中查看产品列表时,加载需要花费很长时间。如果您快速编辑一个产品,并说将其添加到第二个类别,然后单击“更新”,则完成查询平均需要10.2-10.8秒(根据查询监视器)。意识到有700-800个变体需要迭代,如果可以理解的话,可能需要更长的时间。我已经恢复到2017主题,禁用了除woocom