数据库不更新(集成在woocommerce)


Database not updating (integration in woocommerce)

我使用Wordpress/WooCommerce。我的客户不希望用户必须创建一个帐户来购买东西,但仍然希望存储客户地址,以便当用户回到网站时自动填充。

我有一个学校项目,我把一个笔记保存到数据库(文本框中的纯文本)。它获取数据库中已经存在的"笔记",并显示给您,并提供更新笔记的选项。这将更新数据库条目。

我正试图适应这个代码与woocommerce工作。除了表的名称,我没有改变太多。

数据库连接良好,并按要求从表中提取内容。我的问题是:当我点击"更新"时,数据库没有更新条目。我不确定这是否因为我试图在woocommerce中使用它,而购物车正在引起问题?但是它实际上和我的工作学校项目是一样的代码。


您可以看到它在这里工作(一旦您添加到购物车中): http://www.onelifehealthycuisine.com/mobile/checkout/

目前,我只是试图让它更新地址,一旦工作,我将添加在其他单元格的更新。


名称:tbl_stored_address

| ID | ip_address |地址|城市|省|邮政|

测试入口: 2,96.48.1.29, 123 fake street, vancouver, bc, v3c 5r6


function dbConnect(){
    $db_host = 'xxx.xxx.com';
    $db_un = 'xxxx';
    $db_pass = 'xxxx';
    $db_name = 'xxxx';
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8",$db_un,$db_pass);
    mysql_connect($db_host, $db_un, $db_pass) or die(mysql_error());
    mysql_select_db($db_name) or die(mysql_error());    
}
dbConnect();
function getAddys(){
    $user_id = '96.48.1.29'; //get user IP
    $query = "SELECT tbl_stored_address.address, tbl_stored_address.id FROM tbl_stored_address WHERE tbl_stored_address.ip_address ='".$user_id."';";
    $result = mysql_query($query) or die(mysql_error());
    //saves number of rows returned
    $rowCount = mysql_num_rows($result);
    echo "<form enctype='multipart/form-data' action='form-checkout.php' method='post'>";
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        echo "<textarea name='address".$row['id']."' id='address".$row['id']."'>".$row['address']."</textarea><br/>";
    }
    echo "<br/><input type='submit' value='Update Note(s)' name='updateNote'/><br/>";
    echo "</form>";
}
//this will check if the user clicked on "update" for a note, and then update the correct notes using the ID
if(isset($_POST['updateNote']))
{
    $user_id = '96.48.1.29'; //get user IP
    $query = "SELECT tbl_stored_address.id FROM tbl_stored_address WHERE tbl_stored_address.ip_address ='".$user_id."';";
    $result = mysql_query($query) or die(mysql_error());
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        if((isset($_POST['address'.$row['id'].'']))){
            $value = $_POST['address'.$row['id'].''];
            $theID = $row['id'];
            $query2 = "UPDATE tbl_stored_address SET tbl_stored_address.address='".mysql_real_escape_string($value)."' WHERE tbl_stored_address.id ='".$theID."';";
            $result2 = mysql_query($query2) or die(mysql_error());
        }
    }
}
?>      
<h2>Delivery Address</h2><br/><br/>
<?php getAddys(); ?>

* * * * * * * *更新

我试过将代码添加到没有woocommerce的页面并直接访问PHP页面,它更新了数据库:http://www.onelifehealthycuisine.com/mobile/wp-content/themes/onelife/page-test.php

所以这是事实,URL不以。php文件结束吗?或者在woocommerce模板不允许我正确运行表单的东西?我似乎想不明白。

假设tbl_stored_address.idint,则:

WHERE tbl_stored_address.id ='".$theID."'

将不匹配任何内容。使用

WHERE tbl_stored_address.id =".$theID."

也就是说,你不应该使用mysql_函数,并且绝对不应该使用字符串连接来构建查询。也就是说,这是你的脚本更新使用MySQLi扩展:

<?php
    function dbConnect() 
    {
        $db_host = 'xxx.xxx.com';
        $db_un = 'xxxx';
        $db_pass = 'xxxx';
        $db_name = 'xxxx';
        $conn = mysqli_connect($db_host, $db_un, $db_pass, $db_name) or die(mysqli_error());       
    }
    dbConnect();
    function getAddys() 
    {
        $user_id = '96.48.1.29'; //get user IP
        $query = "SELECT tbl_stored_address.address, tbl_stored_address.id FROM tbl_stored_address WHERE tbl_stored_address.ip_address = '" . $user_id . "';";
        $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
        //saves number of rows returned
        $rowCount = mysqli_num_rows($conn, $result);
        echo "<form enctype='multipart/form-data' action='form-checkout.php' method='post'>";
        while ($row = mysqli_fetch_assoc($conn, $result))
        {
            echo "<textarea name='address".$row['id']."' id='address" . $row['id'] . "'>" . $row['address'] . "</textarea><br/>";
        }
        echo "<br/><input type='submit' value='Update Note(s)' name='updateNote'/><br/>";
        echo "</form>";
    }
    //this will check if the user clicked on "update" for a note, and then update the correct notes using the ID
    if(isset($_POST['updateNote']))
    {
        $user_id = '96.48.1.29'; //get user IP
        $query = "SELECT tbl_stored_address.id FROM tbl_stored_address WHERE tbl_stored_address.ip_address = '" . $user_id . "';";
        $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
        while ($row = mysqli_fetch_assoc($conn, $result))
        {
            if((isset($_POST['address' . $row['id']])))
            {
                $value = $_POST['address' . $row['id']];
                $theID = $row['id'];
                $query2 = "UPDATE tbl_stored_address SET tbl_stored_address.address = '" . mysqli_real_escape_string($conn, $value) . "' WHERE tbl_stored_address.id = " . $theID . ";";
                $result2 = mysqli_query($conn, $query2) or die(mysqli_error($conn));
            }
        }
    }  
?>
<h2>Delivery Address</h2><br /><br />
<?php getAddys(); ?>

MySQLi扩展将参数的顺序与您可能习惯的顺序相反,连接是第一个参数。与MySQL扩展一样,如果省略connection对象,扩展函数将尝试重用现有的打开连接。

因为我们真的不想在SQL中使用字符串连接,你需要熟悉使用准备语句,这是mysql扩展支持的。下面是你的代码和准备好的语句:

<?php
    function dbConnect() 
    {
        $db_host = 'xxx.xxx.com';
        $db_un = 'xxxx';
        $db_pass = 'xxxx';
        $db_name = 'xxxx';
        $conn = mysqli_connect($db_host, $db_un, $db_pass, $db_name) or die(mysqli_error());  
    }
    dbConnect();
    function getAddys() 
    {
        $user_id = '96.48.1.29'; //get user IP
        if ($query = mysqli_prepare($conn, "SELECT tbl_stored_address.address, tbl_stored_address.id FROM tbl_stored_address WHERE tbl_stored_address.ip_address = ?;")) 
        {
            mysqli_stmt_bind_param($query, "s", $user_id); # 's' indicates that this parameter is a string
            mysqli_stmt_execute($query);
            mysqli_stmt_bind_result($query, $row);
            echo "<form enctype='multipart/form-data' action='form-checkout.php' method='post'>";
            while (mysqli_stmt_fetch(($query))
            {
                echo "<textarea name='address" . $row['id'] . "' id='address" . $row['id'] . "'>" . $row['address'] . "</textarea><br/>";
            }
            echo "<br/><input type='submit' value='Update Note(s)' name='updateNote'/><br/>";
            echo "</form>";
            mysqli_stmt_close($query); 
        }
    }
    //this will check if the user clicked on "update" for a note, and then update the correct notes using the ID
    if(isset($_POST['updateNote']))
    {
        $user_id = '96.48.1.29'; //get user IP
        if ($query = mysqli_prepare($conn, "SELECT tbl_stored_address.address, tbl_stored_address.id FROM tbl_stored_address WHERE tbl_stored_address.ip_address = ?;")) 
        {
            mysqli_stmt_bind_param($query, "s", $user_id); # 's' indicates that this parameter is a string
            mysqli_stmt_execute($query);
            mysqli_stmt_bind_result($query, $row);
            while (mysqli_stmt_fetch(($query))
            {
                if((isset($_POST['address' . $row['id']])))
                {
                    $value = $_POST['address' . $row['id']];
                    $theID = $row['id'];
                    if ($updateQuery = mysqli_prepare($conn, "UPDATE tbl_stored_address SET tbl_stored_address.address = ? WHERE tbl_stored_address.id = ?;")) 
                    {
                        $updateQuery = "UPDATE tbl_stored_address SET tbl_stored_address.address = ? WHERE tbl_stored_address.id = ?;";
                        mysqli_stmt_bind_param($updateQuery, "s", $value); # 's' indicates that this parameter is a string
                        mysqli_stmt_bind_param($updateQuery, "i", $theID); # 'i' indicates that this parameter is an integer
                        mysqli_stmt_execute($updateQuery);
                    }
                }
            }
            mysqli_stmt_close($query); 
        }
    }  
?>
<h2>Delivery Address</h2><br /><br />
<?php getAddys(); ?>

上面的代码可能有错误,因此请谨慎使用

你可以在PHP.net网站上找到学习MySQLi扩展所需的一切:http://php.net/manual/en/book.mysqli.php。您还可以找到PDO的文档,这是我在PHP中编写代码时使用的最后一个扩展名。