在PHP中从HTML

时间:2017-04-09 11:06:34

标签: php html variables

我看过这个答案enter link description here

但是我无法使我的代码工作,这就是我在selectcategory.php文件中的内容。我想在此文件中设置此变量$ selectedcategory。底部的Echo命令仅用于测试目的。

我的代码:

<?php
include_once('config.php');
$query1 = mysqli_query($query, "SELECT category FROM `events` GROUP BY category");
echo "<select name'selectedcategory'>";    
while ($row = mysqli_fetch_assoc($query1)){
    echo "<option value='".$row['category']."'>".$row['category']."</option>";
}
echo "</select>";

$selectedcategory=$_POST['selectedcategory'];
echo $selectedcategory;
?>

我哪里弄错了?在其他文件中,我通过此POST方法从INPUT或具有给定名称的SELECT元素获取变量。在这个文件错误是在第10行 - UNDEFINIED VARIABLE,所以我在哪里弄错了? 提前谢谢,如果需要更多说明,请询问。

ps:我知道我的代码有错误,但请专注于现在获取变量。在这个论坛上的其他问题中,人们只是评论我的代码例如易于注入,但没有问题本身的新信息或防止这种注入(评论者发现的问题),我想防止这种情况。 通过评论者识别问题是很好的学习方法,但请提供一些论据,说明为什么它是一个问题或一些与问题相关的链接。

1 个答案:

答案 0 :(得分:0)

在您提交表单之前,您的表单字段/值不会存储在$ _POST数组中。

您需要将您的选择字段包装在<form method="POST"></form>中,并提供一个提交按钮,以便开始此过程。

开始阅读:https://www.w3schools.com/tags/att_form_method.asp

如果您要提交到同一页面,则可能需要使用以下内容:

include_once('config.php');  // labeling your connection '$query' doesn't seem like good practice and may trip you up in the future.
$result=mysqli_query($db,"SELECT category FROM `events` GROUP BY category");
if(isset($_POST['selectedcategory'])){
    $selected=$_POST['selectedcategory'];
}else{
    $selected="";
}
echo "<form action=\"\" method=\"POST\">";
    echo "<select name=\"selectedcategory\">";
        echo "<option></option>";
        if($result){
            while($row=mysqli_fetch_assoc($result)){
                echo "<option value=\"{$row['category']}\"",($selected==$row['category']?" selected":""),">{$row['category']}</option>";
            }
        }
    echo "</select>";
    echo "<input type=\"submit\" value=\"Submit\">";
echo "</form>";
....

据我所知,对于刚接触php的人来说,内联条件语句很难阅读。

这是多行的样子:

echo "<option value=\"{$row['category']}\"";
if($selected==$row['category']){
    echo " selected";  // only mark this option as "selected" if values match
}else{
    echo "";  // otherwise, do not mark it with "selected"
}
echo ">{$row['category']}</option>";

如果有人曾设法POST一个与循环中的任何数据库值都不匹配的值,那么<option>都不会获得select属性,{ {1}}默认会显示第一个/前<select>