gpt4 book ai didi

php - While 循环中的 While 循环 - 我应该使用 Foreach 循环吗?

转载 作者:行者123 更新时间:2023-11-29 07:10:05 25 4
gpt4 key购买 nike

我正在尝试从 MySQL 中的多个表中获取数据(这些表包括可在我的电子商务网站上购买的每件商品的选项数据)。这些值是从购物车 session 中提取的,如下所示:

foreach($_SESSION['cart'] as $id => $data)
{

// Calulate total for each item
$subtotal = $data['quantity'] * $data['price'];
$total += $subtotal;

// This gets the Cart sessions unique ID, so I can get the options from the database using it!
$sessionidforoptions = $data['uniquesessid'];


//Out put shopping cart data
echo "TABLE ROWS WITH EACH ITEM GO HERE (Product, Qty, Price for item etc...";

然后我使用 $sessionidforoptions 值从数据库中获取选项:

// Get options IDs from Database
foreach($_SESSION['sessionoptions'][$sessionidforoptions] as $id2 => $data2) { $$id2 = $data2; }

if (isset($option1) && ($option1 != "")) { $list = $option1; }
if (isset($option2) && ($option2 != "")) { $list .= ",".$option2; }
if (isset($option3) && ($option2 != "")) { $list .= ",".$option3; }

// Query Database
$optionsquerysql = "SELECT * from productOptions WHERE productOptionsID IN ('". $list ."')";
$optionsresultsql= mysql_query($optionsquerysql) or die(mysql_error());

然后输出选项:

while   ($optionssql = mysql_fetch_array($optionsresultsql)) {

$optionNamesID = $optionssql["optionNamesID"];
$optionValue = $optionssql["optionValue"];

// Get option names from databsae
$optionsnamesquerysql = "SELECT * from optionNames WHERE optionNamesID = ".$optionNamesID."";
$optionsnamesresultsql= mysql_query($optionsnamesquerysql) or die(mysql_error());

//Output options names + options
while ($optionnamessql = mysql_fetch_array($optionsnamesresultsql)) {

$optionName = $optionnamessql['optionName'];
echo $optionName.': '.$optionValue.'<br />';
}

}

这几乎行得通!该 session 为购物车中的每个项目存储了 3 个选项(尺寸、颜色等)

我得到以下信息:

Item 1 - £20.00 Size: Small

Item 2 - £22.00 Size: Medium

Item 3 - £45.00 Size: Large

这是我应该得到的:

Item 1 - £20.00 - Size: Small - Colour: Black - Belt: Small

Item 2 - £22.00 - Size: Medium - Colour: Blue - Belt: Medium

Item 3 - £45.00 Size: Large - Colour: Pink - Belt: Large

如你所见,最后一个while循环每次只输出第一个选项

while   ($optionnamessql = mysql_fetch_array($optionsnamesresultsql)) { OPTION OUTPUT }

我应该在这里使用 foreach 而不是 while 循环吗?

非常感谢任何人可以提供的任何建议。我意识到我的代码不是很干净。我还在学习中……我对此感到抱歉。

感谢您提供的任何建议

最佳答案

在遍历数据时尝试打印 $optionsquerysql$optionsnamesquerysql 的值。然后确保 SQL 语句看起来像您期望的那样。最后,复制 SQL 并使用 PHPMyAdmin、SQLYog 或仅使用 mysql 命令行实用程序直接针对数据库运行它。确保您返回的结果符合您的预期。

从技术上讲,您使用的控制结构应该按照您的预期工作。

更新

我认为您的查询 SELECT * from productOptions WHERE productOptionsID IN ('". $list ."') 不会像您期望的那样工作。无论 $list 的值是什么,您都将它放在 SQL 字符串中的一组单引号内,因此 MySQL 会将其视为单个字符串值,然后尝试将其转换为整数.我怀疑这是你的问题。尝试删除单引号,以便查询只是 SELECT * from productOptions WHERE productOptionsID IN (". $list .")

附带说明一下,您应该阅读有关 SQL 注入(inject)攻击的内容,并确保在将数据用于 SQL 查询之前对数据进行清理。

关于php - While 循环中的 While 循环 - 我应该使用 Foreach 循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com