所以我现在已经打了好几个月了,我希望能一劳永逸地找到解决方案。我使用phppwinty作为pwinty.com的php库。
在作者提供的默认示例中,像下面的示例一样创建images数组,并将所有变量硬编码为示例。
$photo1 = $pwinty->addPhoto($order, "4x6", "http://www.picisto.com/photos/picisto-20120608100135-925870.jpg", "1", "ShrinkToFit");
$photo2 = $pwinty->addPhoto($order, "6x6", "http://www.picisto.com/photos/picisto-20120601010631-895061.jpg", "4", "ShrinkToFit");
$photo3 = $pwinty->addPhoto($order, "5x7", "http://www.picisto.com/photos/picisto-20120626210525-763773.jpg", "3", "ShrinkToFit");
(注意:在培训中,我发现我们不一定需要在照片后添加整数。而不是:photo1
它可以只是photo
。)
现在$ order变量可以保留。接下来是尺寸,图像来源和数量。这是目前我担心的唯一3个变量。有了购物车,遗憾的是我将这些分为3个不同的表格。
-- order_options -- The table for the size variable
--option_value -- The column for the size variable
--order_id -- Relationship column
-- order_products -- The table for the product id's and qty in the order
-- product_id -- The column for the product id variable
-- product_quantity -- The column for the quantity variable
-- order_id -- Relationship column
-- products -- The table for the image source variable
-- product_image -- The column for the image source variable
-- product_id -- Relationship column
我使用get变量将order_id放入脚本:$order_id = $_GET['id'];
我试图JOIN
所有表格与关系一起除了错误之外什么都没有,虽然我不相信问题出现在JOIN
但我的方式{{1}设置。
我的foreach
和JOIN
现在看起来像这样:
foreach
我之所以说我相信问题在于如何设置foreach是因为我在运行脚本时在浏览器中遇到的错误如下:
foreach ($db->query("SELECT orderproducts.product_id, orderoptions.option_value, products.product_image FROM order_products as orderproducts INNER JOIN order_options as orderoptions ON orderproducts.order_id = orderoptions.order_id INNER JOIN products as products ON orderproducts.product_id = products.product_id WHERE orderproducts.order_id = $order_id AND orderproducts.product_id = $product_id") as $row)
$order_variables[] = $row;
if (count($order_variables) > 0):
foreach ($order_variables as $row):
$product_id = $row['product_id'];
$product_quantity = $row['product_quantity'];
$size = $row['option_value'];
$product_source = "https://www.alphahq.org/uploads/images/".$row['product_image']."";
$photo = $pwinty->addPhoto($order, $size, $product_source, $product_quantity, "ShrinkToFit");
endforeach;
endif;
根据我的代码编辑器第35行是上面的foreach声明。
Warning: Invalid argument supplied for foreach() in /home/www/alphahq.org/libraries/phppwinty/print.php on line 35
我希望我已经足够描述,最终能够为所有人解决这个问题。感谢您的帮助,希望我们能够共同制定解决方案。快乐的编码。
如果我可以提供您认为有用的更多信息,请在请求提供信息之后简单地发表评论。
答案 0 :(得分:1)
$db->query()
将返回结果集。除非您在query()
方法中执行某些操作,否则您正在使用资源,而不是对象或数组。 foreach
需要它可以迭代的东西。
您是否考虑过使用:
$result = $db->query("SELECT orderproducts.product_id, orderoptions.option_value, products.product_image FROM order_products as orderproducts INNER JOIN order_options as orderoptions ON orderproducts.order_id = orderoptions.order_id INNER JOIN products as products ON orderproducts.product_id = products.product_id WHERE orderproducts.order_id = $order_id AND orderproducts.product_id = $product_id");
$order_variables = array();
while($row = $result->fetch_array()) {
$order_variables[] = $row;
}
这应该在$order_variables
中生成包含数据库行的多维数组。
(请注意我在我的示例中使用了MySQL的OOP版本,我不确定这是否是您正在使用的。如果没有,请根据需要进行修改。)
修改强>
仔细观察你的查询,我相信问题的一部分是你的变量值不是用单引号括起来的。这可能对您更有效。 MySQL在单引号中喜欢它的值(特别是非数字值):
$result = $db->query("SELECT orderproducts.product_id, orderoptions.option_value, products.product_image FROM order_products as orderproducts INNER JOIN order_options as orderoptions ON orderproducts.order_id = orderoptions.order_id INNER JOIN products as products ON orderproducts.product_id = products.product_id WHERE orderproducts.order_id = '$order_id' AND orderproducts.product_id = '$product_id'");