2012-04-24 5 views
0

私はオンラインショップを作成しています。私は誰かが私を助けてくれることを望んでいる機能について問題を見つけました。この機能は、製品が代替形式で存在し、サイドバーからのものにリンクしているかどうかを判断するように設計されています。たとえば、DVD、Blu-Ray、Digital Downloadなどの製品が存在する可能性があります。最初の値を使用しているPHP/MySQLクエリループ

これは私の機能コードです:私は、データベースからの形式のすべてを取得するコードの別の部分でループを書いた

function formatExists($format, $pid) { 

    global $conn; global $dbname; global $loginid; 
    mysql_select_db($dbname, $conn); 

    // Get author and description of the requested product 
    $query = "SELECT description, author FROM products WHERE productid = $pid"; 
    $result = mysql_query($query); 
    while($row = mysql_fetch_array($result)) { 
    $author = $row['author']; 
    $description = $row['description']; 
    } 

    // Find other products with the same description & author in requested format 
    $query = "SELECT productid FROM products WHERE format = $format AND description = '$description' AND author = '$author'"; 
    $result = mysql_query($query); 
    while($row = mysql_fetch_array($result)) { 
    $rpid = $row['productid']; 
    } 

    if($rpid) { 
    return $rpid; 
    } else { 
    return 0; 
    } 
} 

、その後にしようとする彼らの上に上記の機能を実行しますそれはこれが、データベース内のすべての形式のIDをエコー「;場合は「... STUFF ...」だった 『$ののBodyContent = $ IDを』

$query = "SELECT formatid, description, postage FROM formats"; 
    $result = mysql_query($query); 
    while($row = mysql_fetch_array($result)) { 
     $id = $row['formatid']; 
     $desc = $row['description']; 
     $post = $row['postage']; 
     ... STUFF ... 
    } 

:製品に利用可能であるフォーマットかを調べますしかし、私がそれを変更したとき:

$pid = formatExists($id, $productid); 
if($pid) { 
    $query = "SELECT price FROM products WHERE productid = $pid"; 
    $result = mysql_query($query); 
    $pricedata = mysql_fetch_array($result, MYSQL_ASSOC); 
    $pprice = $pricedata['price']; 
    $bodycontent .= "<span>"; 
    if($pid != $productid) { 
    $bodycontent .= "<a href='$siteroot/index.php?page=product&id=$pid'>"; 
    } 
    $bodycontent .= "$desc - &dollar;$pprice"; 
    if($postage) { 
    $bodycontent .= " + P&amp;P"; 
    } 
    if($pid != $productid) { 
    $bodycontent .= "</a>"; 
    } 
    $bodycontent .= "</span>"; 
} 

これは動作を停止し、最初のフォーマットIDの応答を返すようになりました。

「formatExists($ id、$ productid)」を「formatExists(2、$ productid)」に手動で変更すると、価格とリンクが更新されるため、関数が正しく動作しています。しかし、何らかの理由で、各カテゴリに対して一度だけ実行されているわけではなく、ループ内で一度だけ実行されています。

ご協力いただければ幸いです。

+0

新しいコードを書くのに 'mysql_ *'関数を使わないでください。それらはもはや維持されず、コミュニティは[非推奨プロセス](http://goo.gl/KJveJ)から始まった。 * [赤いボックス](http://goo.gl/GPmFd)*をご覧ください。代わりに、[準備完了声明](http://goo.gl/vn8zQ)について学び、[PDO](http://php.net/pdo)または[MySQLi](http://php.net/)を使用する必要があります。 mysqli)。どちらを決定できない場合は、[この記事](http://goo.gl/3gqF9)が役立ちます。 PDOを選択した場合は、[こちらは良いチュートリアルです](http://goo.gl/vFWnC)。 –

+0

グローバルとmysql_ *は私の目を傷つけます。 –

+0

また、製品が一意であるため、これは間に合う必要はありません(私はそれが一意であると思いますので、あなたはidと呼んでいます)。あなたは$ var = "mysql_fetch_array($ result)"を実行することができます。 $ author = $ var ["author"]; $ description = $ var ['description']; – MayTheSchwartzBeWithYou

答えて

-1

使用している機能が間違っています!私が意味する - >mysql_fetch_array

あなたは真の結果を見るためにmysql_fetch_assoc

mysql_fetch_arrayを変更する必要があります。

+0

実際、それはもっと愚かなものでした。私は$結果変数を上書きしていました。 -_- –

+0

@hamid mysql_fetch_array()は数値キーとassocキーの両方を設定するのがデフォルトの動作なので、これを使用しても問題ありません。 – lazyhammer

関連する問題