【发布时间】:2015-04-21 20:04:20
【问题描述】:
我正在处理 eshop(like)脚本,付款后将您添加到数据库访问内容。 我使用 PHP 5 和 MySQL
问题介绍
- 我有两个字符串。每个都有一些用逗号分隔的值。像这样的东西 -
testValue1,testValue2,TestValue3。 - 我对这两个字符串使用explode 函数来创建数组。用逗号爆炸效果很好。
- 如果用户在他的产品中有类似的东西,我会查看第一个数组中的 Foreach 值,如果没有 -> 写入,如果是 -> 在 DB 内容之后写入.
- HERE 出现问题。脚本完美地工作,而不是一件事。 Foreach 循环在第一次运行后退出。它写入 db 正确的值,但只写入其中一个。
我想要什么
$stringOne = "testProduct1,testProduct2";
数据库中的用户 -> 产品 -> testProduct1#testProduct2
(出于自己的原因,我用 # 分隔产品)
我真正得到了什么
$stringOne = "testProduct1,testProduct2";
数据库中的用户 -> 产品 -> testProduct1
代码
$array_mesta = explode(',', $mesta);
$array_ceny = explode(',', $ff['ceny']);
//$ff['ceny'] and $mesta are string which i get from DB few rows above
foreach($array_mesta as $key => $mesto) {
if (strpos($array_ceny[$key],'6 měsíců') !== false) {
$delka = '183';
}
if (strpos($array_ceny[$key],'12 měsíců') !== false) {
$delka = '365';
}
$query = "SELECT * FROM makleri WHERE email = '".$email."'";
$sth = mysql_query($query);
while($r = mysql_fetch_assoc($sth)) {
$level = $r['level'];
$od = $r['od'];
$do = $r['do'];
if ((strpos($level,'#') !== false) or ($level !== "null")) {
echo "už v db něco má, zapíšu zato /n";
$sql = mysql_query("UPDATE makleri SET level = '".$mesto."#rok', od = '".$od."#0"."', do = '".$do."#".$delka." WHERE email = '".$email."'");
}
else {
echo "nic v db nemá, vše přepíšu /n";
$sql = mysql_query("UPDATE makleri SET level = '".$mesto."', od = '0', do = '".$delka."' WHERE email = '".$email."'");
}
}
}/* foreach */
更新整个函数
function processPayment() {
self::setState(GopayHelper::PAID);
$orderNumber = self::getOrderNumber();
$email = self::getEmail();
$ss = "SELECT * FROM procesy WHERE orderNumber = '$orderNumber'";
$jqr2 = mysql_query($ss);
while($ff = mysql_fetch_assoc($jqr2)) {
$prevodni_tabulka = Array('ä'=>'a', 'Ä'=>'A', 'á'=>'a', 'Á'=>'A', 'à'=>'a', 'À'=>'A',
'ã'=>'a', 'Ã'=>'A', 'â'=>'a', 'Â'=>'A', 'č'=>'c', 'Č'=>'C',
'ć'=>'c', 'Ć'=>'C', 'ď'=>'d', 'Ď'=>'D', 'ě'=>'e', 'Ě'=>'E',
'é'=>'e', 'É'=>'E', 'ë'=>'e', 'Ë'=>'E', 'è'=>'e', 'È'=>'E',
'ê'=>'e', 'Ê'=>'E', 'í'=>'i', 'Í'=>'I', 'ï'=>'i', 'Ï'=>'I',
'ì'=>'i', 'Ì'=>'I', 'î'=>'i', 'Î'=>'I', 'ľ'=>'l', 'Ľ'=>'L',
'ĺ'=>'l', 'Ĺ'=>'L', 'ń'=>'n', 'Ń'=>'N', 'ň'=>'n', 'Ň'=>'N',
'ñ'=>'n', 'Ñ'=>'N', 'ó'=>'o', 'Ó'=>'O', 'ö'=>'o', 'Ö'=>'O',
'ô'=>'o', 'Ô'=>'O', 'ò'=>'o', 'Ò'=>'O', 'õ'=>'o', 'Õ'=>'O',
'ő'=>'o', 'Ő'=>'O', 'ř'=>'r', 'Ř'=>'R', 'ŕ'=>'r', 'Ŕ'=>'R',
'š'=>'s', 'Š'=>'S', 'ś'=>'s', 'Ś'=>'S', 'ť'=>'t', 'Ť'=>'T',
'ú'=>'u', 'Ú'=>'U', 'ů'=>'u', 'Ů'=>'U', 'ü'=>'u', 'Ü'=>'U',
'ù'=>'u', 'Ù'=>'U', 'ũ'=>'u', 'Ũ'=>'U', 'û'=>'u', 'Û'=>'U',
'ý'=>'y', 'Ý'=>'Y', 'ž'=>'z', 'Ž'=>'Z', 'ź'=>'z', 'Ź'=>'Z'
);
$mesta = strtr($ff['mesta'], $prevodni_tabulka);
$array_mesta = explode(',', $mesta);
$array_ceny = explode(',', $ff['ceny']);
foreach($array_mesta as $key => $mesto) {
if (strpos($array_ceny[$key],'6 měsíců') !== false) {
$delka = '183';
}
if (strpos($array_ceny[$key],'12 měsíců') !== false) {
$delka = '365';
}
$query = "SELECT * FROM makleri WHERE email = '".$email."'";
$sth = mysql_query($query);
while($r = mysql_fetch_assoc($sth)) {
$level = $r['level'];
$od = $r['od'];
$do = $r['do'];
if ((strpos($level,'#') !== false) or ($level !== "null")) {
echo "už v db něco má, zapíšu zato /n";
$sql = mysql_query("UPDATE makleri SET level = '".$mesto."#rok', od = '".$od."#0"."', do = '".$do."#".$delka." WHERE email = '".$email."'");
}
else {
echo "nic v db nemá, vše přepíšu /n";
$sql = mysql_query("UPDATE makleri SET level = '".$mesto."', od = '0', do = '".$delka."' WHERE email = '".$email."'");
}
}
}/* foreach */
}/* while */
}
数据库值
$ff['mesta'] = "Brno,Praha,Olomouc";
$ff['ceny'] = "12 měsíců - Cena za měsíc - 100 Kč bez DPH,6 měsíců - Cena za měsíc - 100 Kč bez DPH,6 měsíců - Cena za měsíc - 100 Kč bez DPH";
$level, $od, $do 在 foreach 之后的输出:
$level = "Brno";
$od = "0";
$do = "365";
【问题讨论】:
-
你应该检查 php 运行时间,因为可能 php 比你的 DB 运行时更快。
-
您从第一个数组中写入了 Foreach 值,如果用户在他的产品中有类似的东西,我会查看 DB。但是您的查询不会从数据库中的第一个数组中查找值,而是查找
$email。 -
请贴出整个函数代码让我们检查每个变量的值,并从数据库中添加一些真实值。
-
我编辑了我的问题。你现在可以看到整个功能。 @Barmar 我只为行查找电子邮件,但在它之后我得到 $level 变量,这意味着 - $product 或限制级别。
-
谢谢你们详尽的回答!我到处寻找,实际上我发现了这个问题。我错过了 foreach 中的第一个 sql ' 在 WHERE 之前!天哪