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 は 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() によって返される成功/失敗ステータスをチェックしていません。ほとんどの MySQL 関数は、falseテーブル名のスペルミスや WHERE 句の無効な式などのエラーがある場合に戻ります。

$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 に答える