很遗憾,我收到了一个空的查询警告,我似乎找不到问题所在,希望您能帮助我。
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>
最合适的回答,由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\' );
注意以下事项:
我将处理表单的函数放在挂钩中,而不是放在模板中。您的代码不清楚您是如何完成的,但这将是正确的方法由于您在代码中使用了当前用户的ID,如果用户未登录,我不会继续处理表单
我确保使用wp_get_current_user()
.我不使用$wpdb->escape()
, 原因有二:第一,它已被弃用,不应使用;第二,$wpdb->insert()
会帮你逃走的我没有使用表单提交的日期,因为服务器可以在插入时设置日期。如果更改表格以设置dato
列到当前时间,您甚至不需要这样做我用过$wpdb->prefix
以确保表名正确。如果您是在代码中创建表,那么在创建表时也需要这样做但仍有一些事情您可能需要研究:
使用比$_POST[\'submit\']
查看您的表单是否已提交。甚至可能是nonce.更多验证或消毒。例如,确保所有字段都存在,并确保它们是预期的值类型,例如数字就是数字