0

在被困在试图掌握它的工作原理之后,我决定寻求一些关于如何做到这一点的提示。

首先让我说我几乎没有类似的经验。我刚刚通过查看代码收集了一些逻辑,我的项目几乎完成了,除了我遇到的这个问题。

这是原始代码(我仍在代码中使用另一个位置,这似乎工作得很好)。

function showCart() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
    $items = explode(',',$cart);
    $contents = array();
    foreach ($items as $item) {
        $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
    }
    $output[] = '<form action="kurv.php?action=update" method="post" id="cart">';
    $output[] = '<table>';
    foreach ($contents as $id=>$qty) {
        $sql = 'SELECT * FROM varetabel WHERE varenr = '.$id;
        $result = $db->query($sql);
        $row = $result->fetch();
        extract($row);
        $output[] = '<tr>';
        $output[] = '<td><a href="kurv.php?action=delete&varenr='.$id.'" class="r">Slet</a></td>';
        $output[] = '<td>'.$varenavn.'</td>';
        $output[] = '<td>DKK '.$pris.'</td>';
        $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
        $output[] = '<td>DKK '.($pris * $qty).'</td>';
        $total += $pris * $qty;
        $output[] = '</tr>';
        $_SESSION['items'] = $contents; // Antal forskellige varer.
        $_SESSION['qty'] = $qty;
    }
    $output[] = '</table>';
    $output[] = '<p>Pris total: <strong>DKK '.$total.'</strong></p>';
    $output[] = '<div><button type="submit">Opdatér kurv</button></div>';
    $output[] = '</form>';
} else {
    $output[] = '<p>Kurven er tom.</p>';
}
return join('',$output);

}

global $db 正在连接到数据库等,没什么大不了的,然后包含以下功能:

    function fetch () {
    if ( $row=mysql_fetch_array($this->query,MYSQL_ASSOC) ) {
        return $row;
    } else if ( $this->size() > 0 ) {
        mysql_data_seek($this->query,0);
        return false;
    } else {
        return false;
    }
}

现在,我尝试使用相同的方法从这段代码中获取数组,并使用这段代码将它们放入我的数据库中:

session_start();
global $db;
$items = $_SESSION['items'];
$cart = $_SESSION['cart'];
$qty = $_SESSION['qty'];

if(isset($_SESSION['email'])) { // IF LOGGED IN

$sql = mysql_query("SELECT * FROM antalstabel ORDER BY ordrenr DESC LIMIT 1") or die(mysql_error());
$row = mysql_fetch_assoc($sql);
$maxordrenr = $row['ordrenr'];
$nextnumber = $maxordrenr + 1;
$antal = count($items); // COUNTS DIFFERENT ITEMS IN CART.
$maxplusantal = $maxordrenr + $antal;
$varenrplaceholder = 0;

for ($i = $maxordrenr; $i <= $maxplusantal; $i++) {

$sql = mysql_query("INSERT INTO antalstabel (ordrenr, varenr) VALUES ('$nextnumber','$varenrplaceholder')") or die(mysql_error());
$nextnumber--;
$varenrplaceholder++;

}

$varenrplaceholder = 0;

if ($cart) {
$items = explode(',',$cart);
$contents = array();

foreach ($items as $item) {

$contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;

}

foreach ($contents as $id=>$qty) {

$sql = 'UPDATE antalstabel SET varenr = '.$id.' and antal = '.$qty.' WHERE ordrenr = '.$nextnumber.' and varenr = '.$varenrplaceholder.'';
$result = $db->query($sql);
$row = $result->fetch();
extract($row);
$varenrplaceholder++;

}
}

但它似乎不能正常工作,代码确实运行,但它没有用数组的值更新表格。

我完全错了还是有人可以帮助我解决这个问题,我知道有很多问题要问。

我自己的代码根据购物车中有多少不同的项目创建具有相同 ID 的 X 行,我正在尝试使用我认为仍然在数组中的值更新我刚刚创建的那些现有行showCart()函数数组中的值更新我刚刚创建的那些现有行。

先感谢您

4

3 回答 3

1
    $sql = 'SELECT * FROM varetabel WHERE varenr = '.$id;
    $result = $db->query($sql);

您没有检查 query() 返回的成功/失败状态。false如果出现错误,例如拼写错误的表名或 WHERE 子句中的无效表达式,大多数 MySQL 函数都会返回。

我不知道 $id 是什么,但您应该检查 $sql 字符串以查看它是否有效(将其复制并粘贴到 mysql 客户端会话中进行测试)。

而且您应该始终检查 $result 不是false. 见http://php.net/mysql_error

于 2013-05-01T12:13:50.943 回答
0

您似乎正在创建很多虚拟记录,然后对其进行更新。我希望您只需要进行插入,但想知道这是否与您在更新后执行的获取有关。

但是,我怀疑阻止您查询工作的主要事情是您在将 $items 设置为爆炸的 $cart 之前计算 $items 的数量。

我已经完成了以下操作,使用您的 db 类中的方法的假定名称

<?php
session_start();
global $db;
$items = $_SESSION['items'];
$cart = $_SESSION['cart'];
$qty = $_SESSION['qty'];

if(isset($_SESSION['email'])) 
{ // IF LOGGED IN

    if ($cart) 
    {
        $sql = "SELECT MAX(ordrenr) AS ordrenr FROM antalstabel";
        $result = $db->query($sql) or die($db->error());
        if ($row = $result->fetch())
        {
            $maxordrenr = $row['ordrenr'];
            $nextnumber = $maxordrenr + 1;
            $items = explode(',',$cart);
            $antal = count($items); // COUNTS DIFFERENT ITEMS IN CART.
            $maxplusantal = $maxordrenr + $antal;
            $varenrplaceholder = 0;

            for ($i = $maxordrenr; $i <= $maxplusantal; $i++) 
            {
                $sql = "INSERT INTO antalstabel (ordrenr, varenr) VALUES ('$nextnumber','$varenrplaceholder')";
                $db->query($sql) or die($db->error());
                $varenrplaceholder++;
            }

            $varenrplaceholder = 0;
            $contents = array();

            foreach ($items as $item) 
            {
                $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
            }

            foreach ($contents as $id=>$qty) 
            {
                $sql = "UPDATE antalstabel SET varenr = $id and antal = $qty WHERE ordrenr = $nextnumber and varenr = $varenrplaceholder";
                $result = $db->query($sql) or die($db->error());
                $row = $result->fetch();
                extract($row);
                $varenrplaceholder++;
            }
        }
    }
}
?>
于 2013-05-01T13:03:36.903 回答
0

您的代码行有错误

foreach ($contents as $id=>$qty) {

$sql = 'UPDATE antalstabel SET varenr = '.$id.',antal = '.$qty.' WHERE ordrenr = '.$nextnumber.' and varenr = '.$varenrplaceholder.'';
$varenrplaceholder++;

}

$select_query='SELECT * FROM varetabel WHERE varenr = '.$id;
$result = $db->query($select_query);
$row = $result->fetch();
extract($row);
于 2013-05-01T12:17:16.433 回答