从Form::Warning空查询mysqli::Query()插入数据

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

很遗憾,我收到了一个空的查询警告,我似乎找不到问题所在,希望您能帮助我。

mysqli->query()-->$result=$conn->query($sql);它告诉我我做错了什么。

<?php

global $wpdb;

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

$servername = "localhost";
$username = "root";
$password = "****";
$dbname = "***";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$user = $current_user->ID;
$time = new DateTime(\'now\');

$reg_id = $wpdb->escape(trim($_POST[\'reg_id\']));
$dato = $wpdb->escape(trim($_POST[\'$time\']));
$fiske_vægt = $wpdb->escape(trim($_POST[\'fiske_vægt\']));
$fiske_længde = $wpdb->escape(trim($_POST[\'fiske_længde\']));
$reg_user_id = $wpdb->escape(trim($_POST[\'$user\']));

$sql = $wpdb->insert( \'wp_registreringer\',
    array(
        \'dato\' => apply_filters(\'pre_register_dato\', $dato),
        \'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\' => apply_filters(\'pre_register_reg_user_id\', $user)
        )
    );

$result = $conn->query($sql);   
我的表单

<form method="post">
    <h3>Don\'t have an account?<br /> Create one now.</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>dato</label></p>
    <p><input type="datetime-local" name="dato" value="<?php echo date("Y-m-d\\TH:i:s",time()); ?>"/></p>
    <button type="submit" name="btnregister" class="button" >Submit</button>
    <input type="hidden" name="submit" value="submit" />
</form>

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

您的代码有很多错误:

在您要设置的查询中reg_user_id$user, 当你想用$reg_user_id, 这可能是个问题,因为您正在设置$user$current_user->ID 尽管$current_user 不存在

  • $_POST[\'reg_id\'] 不以你的形式存在,我不知道你想做什么$_POST[\'$user\']$_POST[\'$time\'].$wpdb->insert().
  • 您正在插入$wpdb, 但尝试从运行查询$conn 通过传递它$sql 尽管$wpdb->insert() 不返回SQL
  • 以下是执行相同功能而没有这些问题的代码:

    function wpse_283721_handle_form() {
        global $wpdb;
    
        if ( empty( $_POST[\'submit\'] ) ) {
            return;
        }
    
        if ( ! is_user_logged_in() ) {
            return;
        }
    
        $current_user = wp_get_current_user();
    
        $fiske_vægt = trim( $_POST[\'fiske_vægt\'] );
        $fiske_længde =  trim( $_POST[\'fiske_længde\'] );
    
        $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,
            )
        );
    }
    add_action( \'init\', \'wpse_283721_handle_form\' );
    
    注意以下事项:

    我将处理表单的函数放在挂钩中,而不是放在模板中。您的代码不清楚您是如何完成的,但这将是正确的方法

  • 我确保使用wp_get_current_user().$wpdb->escape(), 原因有二:第一,它已被弃用,不应使用;第二,$wpdb->insert() 会帮你逃走的dato 列到当前时间,您甚至不需要这样做$wpdb->prefix 以确保表名正确。如果您是在代码中创建表,那么在创建表时也需要这样做
  • 但仍有一些事情您可能需要研究:

    使用比$_POST[\'submit\'] 查看您的表单是否已提交。甚至可能是nonce.

    结束

    相关推荐

    creating new field on mysql

    我想在WordPress用户数据库中添加额外的部分,如“性别”。我想稍后从这些信息中提取信息。例如,假设我想吸引性别。我使用“ultimate member”扩展创建了自定义注册页面,但数据库中没有任何更改。仍然只有“用户名、昵称、电子邮件、注册数据”等信息。