如何将 POST 元素存储在数组中
Posted
技术标签:
【中文标题】如何将 POST 元素存储在数组中【英文标题】:How to store POST elements in an array 【发布时间】:2020-02-20 15:46:49 【问题描述】:这是一个“食谱个人网站”,我被搜索功能卡住了。 首先让我告诉你数据库是怎样的:
1 个表 categories :配方的类型 Link for image
1 表配料:食谱中使用的所有配料 Link for image
1 表 recettes :所有食谱都存储在其类别的列中 Link for image
1 表 ingredient_recette:链接构成特定配方的所有成分和数量 Link for image
在这里我想创建一个页面,我可以在其中搜索包含例如 1 或 2 种特殊成分的食谱,以及我想搜索的类别。 Link for search page image
这是我暂时完成的search.php...(你可以在codeshare.io看到它)
如何继续搜索仅包含选定的食谱 成分?
<?php
include("cnx.php");
include("functions.php");
// Query pour les catégories
$rq_cat = "SELECT * FROM categories ORDER BY id_cat";
$result_cat = $mysqli->query($rq_cat);
if(isset($_POST["Recherche"]) AND $_POST["Recherche"] == "Go")
if($_POST["cat_recette"] == "") // Si aucune catégorie sélectionnée
echo "Aucune catégorie ";
$rq_recettes = "SELECT * FROM recettes";
$result_recettes = $mysqli->query($rq_recettes);
elseif($_POST["cat_recette"] == "Entrée") // Si catégorie Entrée sélectionnée
echo "Catégorie Entrée ";
elseif($_POST["cat_recette"] == "Plat") // Si catégorie Plat sélectionnée
echo "Catégorie Plat ";
$rq_recettes = "SELECT * FROM recettes WHERE cat_recette='Plat'";
$result_recettes = $mysqli->query($rq_recettes);
elseif($_POST["cat_recette"] == "Dessert") // Si catégorie Dessert sélectionnée
echo "Catégorie Dessert ";
$rq_recettes = "SELECT * FROM recettes WHERE cat_recette='Dessert'";
$result_recettes = $mysqli->query($rq_recettes);
elseif($_POST["cat_recette"] == "Soupe") // Si catégorie Soupe sélectionnée
echo "Catégorie Soupe ";
$rq_recettes = "SELECT * FROM recettes WHERE cat_recette='Soupe'";
$result_recettes = $mysqli->query($rq_recettes);
elseif($_POST["cat_recette"] == "Autre") // Si catégorie Autre sélectionnée
echo "Catégorie Autre ";
$rq_recettes = "SELECT * FROM recettes WHERE cat_recette='Autre'";
$result_recettes = $mysqli->query($rq_recettes);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="https://fonts.googleapis.com/css?family=Quando&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/style.css">
<title>cooketal</title>
</head>
<body class="search">
<header>
<?php
include("nav.php");
?>
</header>
<div class="banner">
<h2>Recherche</h2>
</div>
<section class="all-recipes add left">
<div class="frigo-ing col-3">
<table>
<div class="contenu">
<form action="" method="POST">
<h1>Les ingrédients que je possède</h1>
<?php for ($i=1; $i < 10 ; $i++) ?>
<table>
<th><span><?php echo $i ?></span></th>
<td>
<select name="ing<?php echo $i; ?>">
<option value="" selected>- - - -</option>
<?php
$rq_ingredients = "SELECT * FROM ingredients ORDER BY nom_ingredient ASC";
$result_ingredients = $mysqli->query($rq_ingredients);
while($row_ingredients = $result_ingredients->fetch_object()) ?>
<option value="<?php echo $row_ingredients->id_ingredient; ?>"><?php echo $row_ingredients->nom_ingredient; ?></option>
<?php ?>
</select>
</td>
</table>
<?php ?>
<h1>Une catégorie en particulier ?</h1>
<select id="cat-recette" name="cat_recette">
<option value="">- - - -</option>
<?php
$rq_cat = "SELECT * FROM categories ORDER BY id_cat";
$result_cat = $mysqli->query($rq_cat);
while( $row_cat = $result_cat->fetch_object()) ?>
<option value="<?php echo $row_cat->cat_recette; ?>" <?php if( isset( $_POST["cat_recette"]) AND $_POST["cat_recette"] == $row_cat->cat_recette) echo "selected"; ?>><?php echo $row_cat->cat_recette; ?></option>
<?php ?>
</select><br>
<input type="submit" name="Recherche" value="Go">
</form>
</div>
</table>
</div>
<div class="frigo-ing col-3">
<h1>Résultats</h1>
</div>
</section>
【问题讨论】:
能否请您告诉我,如果有一个按钮可以触发提取具有特殊成分的物品的事件,那将是可以接受的。 只要有效,什么都可以接受! 我的代码有效。如果不告诉我。 【参考方案1】:如果建议您使用 ajax 并在 html 中制作 select
并在 select's
值发生更改时设置 ajax 调用。像这样。SELECT:强>
<select name='select' class='ingredient'>
<option value="" selected>- - - -</option>
<?php
$rq_ingredients = "SELECT * FROM ingredients ORDER BY nom_ingredient ASC";
$result_ingredients = $mysqli->query($rq_ingredients);
while($row_ingredients = $result_ingredients->fetch_object()) ?>
<option value="<?php echo $row_ingredients->id_ingredient; ?>"><?php echo $row_ingredients->nom_ingredient; ?></option>
<?php ?>
</select>
AJAX 调用:
$('.ingredient').change(function()
var selected = $('.ingredient').val();
var data = "";
$.ajax(
type:"GET",
url : "search.php?ingredient='+selected+'',
data : "",
async: false,
success : function(response)
//Here you get recipe name in response as return .. I hope it work.
,
error: function()
alert('Error occured');
);
制作另一个名为search.php的页面 在这里你得到含有成分的食谱
<?php
$id = $_GET["ingredient"];
$sql = "SELECT * FROM recettes WHERE cat_recette='$id'";
$result = $conn->query($statement);
if ($result->num_rows > 0)
// output data of each row
while($row = $result->fetch_assoc())
echo "".$row["nom_recette"]."";
?>
【讨论】:
以上是关于如何将 POST 元素存储在数组中的主要内容,如果未能解决你的问题,请参考以下文章
Foreach $_POST - 如何增加指向下一个元素的数组指针
如何将存储在列中的 JSON 数组中的每个元素的行拆分为一行?