此代码应该检查发布输入时是否登录了用户,如果是,则检查表中是否已有ItemID和User ID,如果是,则更新该条目。而不是创建副本。

这是我需要的输出:

+--------+-------+----------+
| ItemID | Price | user     |
+--------+-------+----------+
| 1      | 20    | 27       |
+--------+-------+----------+


这就是我得到的:

+--------+-------+----------+
| ItemID | Price | user     |
+--------+-------+----------+
| 0      | 0     | 27       |
+--------+-------+----------+




如果需要,这是完整功能:http://pastebin.com/W0UM68UT

if ( is_user_logged_in() ) {

    $hf_user = get_current_user_id();
    $hf_username = $hf_user->user_login;
    global $quanid;
    $inputValue  = isset($_POST[$quanid]);
    global $newdb;
    $newdb = new wpdb( 'user', 'pass', 'db', 'localhost' );
    $retval = $newdb->get_results("SELECT * FROM $table WHERE ItemID = '$quanid' AND user = '$hf_username' ");

if($retval > 0)
{
    //If user exists, update
    $newdb->replace($table,array(
    'ItemID' => '$quanid',
    'Price' => $inputValue,
    'user' => $hf_username
        )
    );
}
else
{
        global $table;
        global $newdb;
        $newdb->insert(
            $table,
            array(
                'ItemID' => $quanid,
                'Price'  => $inputValue,
                'user'   => $hf_username
            )
        );
}



} else {
    global $error;
     $error = "Error: You must be logged in to submit prices";
     return;
}


}

最佳答案

请不要使用全局变量...


  How to avoid using PHP global objects?


将您的SELECT语句更改为一个计数以获得更好的性能:

SELECT count( 1 ) FROM $table WHERE ItemID = '$quanid' AND user = '$hf_username'


关于您的问题:

看来您的global $quanid;isset($_POST[$quanid]);返回意外值,所以您应该看到它们的设置位置。尝试使用:

这两行下方的var_dump:

global $quanid;
$inputValue  = isset($_POST[$quanid]);
var_dump( $quanid );
var_dump( $inputValue  );
var_dump( $_POST);
die;

10-06 00:16