定制表和使用wpdb从html表单插入到数据库中

时间:2017-10-30 作者:Mg10

我使用自定义表让用户注册他们所做的事情的页面。我在理解wpdb以及如何使用它从html表单插入数据以及如何连接这些文件和函数方面遇到了问题。

发布我的数据时,我发现错误

wpdb->prepare缺少2个is行参数:

$redskabsID = $wpdb->get_row( $wpdb->prepare("SELECT redskabs_id FROM wp_redskaber WHERE redskabs_id = %d") );
和一个错误

mysql_real_escape_string() expects parameter 1 to be string 
使用我的插入

$registrering = $wpdb->insert( 
$wpdb->prefix . \'registreringer\',
array(
    \'dato\'              => new DateTime( \'now\' ),
    \'fiske_vægt\'        => apply_filters(\'pre_register_fiske_vægt\', $fiske_vægt ),
    \'fiske_længde\'      => apply_filters(\'pre_register_fiske_længde\', $fiske_længde ),
    \'reg_user_id\'       => $current_user->ID,
    \'reg_redskabs_id\'   => apply_filters(\'pre_register_reg_redskabs_id\', $redskabsID)
    )
); 
以下是相关信息:

表1

CREATE TABLE $table_registreringer 
    (
        reg_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        dato TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        fiske_vægt INT NOT NULL,
        fiske_længde INT NOT NULL,          
        reg_user_id BIGINT UNSIGNED NOT NULL,
        reg_redskabs_id INT UNSIGNED NOT NULL,
        PRIMARY KEY  (reg_id),
        FOREIGN KEY  (reg_user_id) REFERENCES wp_users(id),
        FOREIGN KEY  (reg_redskabs_id) REFERENCES $table_redskaber(redskabs_id)
表2

$table_redskaber 
    (
        redskabs_id INT UNSIGNED AUTO_INCREMENT NOT NULL,
        redskabs_navn CHAR (20),
        PRIMARY KEY  (redskabs_id)
    )
功能或形式背后的逻辑

<?php 
if ( ! is_user_logged_in() ) {
    return;
}
?>
<div class="wrapper">

<?php

global $wpdb;

if ( isset( $_POST[\'submit\'] ) ){

$current_user = wp_get_current_user();

$fiske_vægt = trim( $_POST[\'fiske_vægt\'] );
$fiske_længde = trim( $_POST[\'fiske_længde\'] );

$redskabsID = $wpdb->get_result ("SELECT redskabs_id FROM wp_redskaber");

$registrering = $wpdb->insert( 
$wpdb->prefix . \'registreringer\',
    array(
        \'dato\'              => new DateTime( \'now\' ),
        \'fiske_vægt\'        => apply_filters(\'pre_register_fiske_vægt\', $fiske_vægt ),
        \'fiske_længde\'      => apply_filters(\'pre_register_fiske_længde\', $fiske_længde ),
        \'reg_user_id\'       => $current_user->ID,
        \'reg_redskabs_id\'   => apply_filters(\'pre_register_reg_redskabs_id\', $redskabsID)
        )
    );
}
?>
和我的Html表单,用foreach将所有内容从wp\\u redskaber表中获取到我的表单中

<form method="post">
    <h3>Registering af din fangst</h3>
    <p><label>længden</label></p>
    <p><input type="number" value="" name="fiske_længde" id="fiske_længde" />cm</p>
    <p><label>vægten</label></p>
    <p><input type="number" value="" name="fiske_vægt" id="fiske_vægt" />kg</p>
    <p><label>Fangst udstyr</label></p>
    <?php 

    $results = $wpdb->get_row( "SELECT redskabs_navn FROM `wp_redskaber`" );

    echo "\\t<tr>\\n";

    foreach ( $results as $redskaber ) 
    {
        echo "\\t\\t<td>$redskaber->redskabs_navn</td>\\n";
    }

    echo "<td>"
        ."<label>Spin <input type=\'radio\' name=\'picks[$redskaber]\' value=\'spin\'></label><br>"
        ."<label>Flue <input type=\'radio\' name=\'picks[$redskaber]\' value=\'flue\'></label><br>"
        ."<label>Orm <input type=\'radio\' name=\'picks[$redskaber]\' value=\'orm\'></label><br>"
        ."</td>";

    echo "\\t</tr>\\n";


    $wpdb->show_errors(); 
    ?> 
    <button type="submit" name="btnregister" class="button" >Submit</button>
    <input type="hidden" name="submit" value="submit" />
</form>

1 个回复
最合适的回答,由SO网友:janh 整理而成

您在SQL中使用了一个占位符(“%s”)来进行prepare,但您没有向它传递一个值来代替该占位符,因此引发了投诉。

使用$wpdb->prepare("SELECT ... %s", $myvalue)

我敢肯定,您的另一个错误是由于您传入了DateTime对象$wpdb不会自动转换,它需要字符串,然后传递给mysql_real_escape_string() (或mysqli_real_escape_string() 取决于连接的设置)。

旁注:您可能想在变量名中使用特殊字符来过度思考。如果不使用你的语言键盘布局的人需要编辑该脚本,他将有一个有趣的复制粘贴时间æ 在变量中:)

结束

相关推荐

$wpdb->Insert()不再起作用

我从2016年底开始测试一些代码,发现$wpdb->insert()不再有效。Maybe something todo with php7? 我不知道。之前,以下代码工作正常。$\\u POST()中的数据填写正确。if(isset($_POST[\'add_new_banner\'])){ extract($_POST); // correct data $wpdb->insert( $wpdb->prefix.\'rdp_banners\', &#