如何将 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 数组中的每个元素的行拆分为一行?

从 POST 方法中使用 JDBCTemplate 存储对象数组 - Spring Boot

C语言中整型数组的每个元素在内存中是如何存放的