我有一个小问题,我想解决。好吧,我有一个购物车,用户可以键入它想要购买多少商品。但问题是当用户输入例如" 2"我希望它写给文本文件的商品肉肉的名称,例如,而不是数字2.我有一个数组,我存储好,价格等。
这是我存储的数组:
{
"size": 30,
"from": 0,
"body": {
"query": {
"bool": {
"filter": {
"geo_distance": {
"distance": "100km",
"location": {
"lat": 49.449919468911,
"lon": 11.073560787681
}
}
}
}
},
"script_fields": {
"distance": {
"lang": "groovy",
"params": {
"lat": 49.449919468911,
"lon": 11.073560787681
},
"script": "doc['location'].distanceInKm(lat,lon)"
}
},
"sort": [
{
"_geo_distance": {
"location": {
"lat": 49.449919468911,
"lon": 11.073560787681
},
"order": "asc",
"unit": "km"
}
},
{
"upgrade_sort": {
"order": "desc"
}
},
{
"has_siegel": {
"order": "desc"
}
}
]
},
"fields": [
"_source",
"distance"
]
}
我为每个商品输入了五种形式。
$filename="shop.txt";
$lines = array();
$file = fopen($filename, "r");
while(!feof($file)) {
//read file line by line into a new array element
$lines[] = fgets($file, 4096);
}
fclose ($file);
这是我得到一个for循环,它检查表单并写入文本文件。
Meat: <input type="text" name="cb4" value=""><br>
<input type="submit" value="Submit">
</form>
如果我在肉类商品中输入2,则输出现在为:
您的购物车包含以下内容: 2 你的购物车总共有1件商品
答案 0 :(得分:0)
这应该加载行 - 在session_start();
之前必须没有输出到浏览器。计数器在循环的顶部递增,以便它从1开始
<?php session_start(); ?>
<?php
$filename="shop.txt";
$_SESSION['lines'] = array();
$file = fopen($filename, "r");
$counter = 0;
while(!feof($file)) {
$counter++;
//read file line by line into a new array element
$_SESSION['lines'][$counter] = fgets($file, 500);
}
fclose ($file);
?>
这也应该将文件分解为没有循环的数组
$file = fread($file, filesize($file)); // Get file contents
$_SESSION['list'] = explode ("\n", $file); // Split all the rows
您可能需要在文件顶部有一个空行才能占据位置0。
这应该让他们出局
<?php session_start(); ?>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$result_string = '';
foreach($_POST as $item) {
$result_string .= $_SESSION['list'][$item] . "\n";
$counter++;
}
file_put_contents('kundvagn.txt', $result_string , FILE_APPEND);
}
?>
这是如何使用会话的一个很好的描述: http://www.w3schools.com/php/php_sessions.asp
这显示了从文件中获取行的另一种方法 - 如果将其读入变量,它实际上已经是一个数组 - 然后它可以被换行符拆分。
Parse txt files and turn them into static html files
如果他们将数量放在方框中而不是他们想要的商品编号,那么这应该有效
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$result_string = '';
foreach($_POST as $item) {
$result_string .= $item . " " . $_SESSION['list'][$counter] . "\n";
$counter++;
}
file_put_contents('kundvagn.txt', $result_string , FILE_APPEND);
}
?>
这将记录那些没有文字输入的内容,因此您需要考虑删除&#34; 0&#34;的:
// only list items greater than 0
if($item > 0){
$result_string .= $item . " " . $_SESSION['list'][$counter] . "\n";
}
据我所知,计数器应该计算每个提交的POST项目是否已设置。我无法检查。
你需要把加载计数器放在加载循环的底部 - 这是之前的假设,假设没有项目值&#34; 0&#34;所以可能没有阵列位置&#34; 0&#34;这是相关的 - 除了你想要一条消息说'#34;你没有选择.....&#34;。如果你使用爆炸方法,那将是理所当然的,并且可能是最有效的方法。您可能还需要检查POST阵列是否符合预期顺序。
这对于探索POST
数组可能很方便:
Print $_POST variable name along with value