【问题标题】:Passing a php variable through from a selector to search database将 php 变量从选择器传递到搜索数据库
【发布时间】:2018-02-16 10:20:33
【问题描述】:

我正在为一个班级开展一个项目,但我在从选择的选择器中传递一个变量时遇到了问题。我很好地传递了 $inst 变量,但是 $focus 变量给了我这个:

未定义索引:第 20 行 C:\xampp\htdocs\phptest\results.php 中的 chzn2。

fyi:我允许在数据库中使用 null

这里是选择器的代码。

    $sql = "SELECT institutionName, instID FROM institutions";
    $dropq = mysqli_query($conn, $sql);
        echo "<select data-placeholder='Select an Institution' name='chzn1' class='chzn-select' standard='true' style='width:250px;'>";
    while ($row = mysqli_fetch_array($dropq)) {
        echo "<option></option><option value='" . $row['instID'] . "'>" . $row['institutionName'] . "</option>";
        }
        echo "</select>";

    $sql1 = "SELECT orgFocus FROM communityOrgs";
    $dropq = mysqli_query($conn, $sql1);

        echo "<select data-placeholder='Select Focus Area' name='chzn2' class='chzn-select' multiple='true' style='width:250px;'>";
            while ($row1 = mysqli_fetch_array($dropq)) {
        echo "<option></option>
                <option value='" . $row1['orgFocus'] . "'>" . $row1['orgFocus'] . "</option>";
        }
        echo "</select>";

这是结果的代码

if (isset($_POST['submit-search'])) {
if(empty($_POST['chzn1']) && empty($_POST['chzn2'])){
    echo "Please enter at least one value!";
}
else if(!empty($_POST['chzn1']) || !empty($_POST['chzn2'])) {

// Grabbing variables from User Inputs
$inst = $_POST['chzn1'];
$focus = $_POST['chzn2'];


$query = "SELECT * FROM partnerships WHERE instID = '$inst' OR orgFocus = '$focus'";

$result = mysqli_query($conn, $query);
$queryResults = mysqli_num_rows($result);

    if($queryResults > 0) {
        while ($row = mysqli_fetch_array($result)) {
            echo "<div class='results-container'>
            <h3>".$row['instName']."</h3>
            <p>".$row['orgName']."</p>
            <p>".$row['orgFocus']."</p>
            </div>";
    ;}
}

【问题讨论】:

  • 您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及一些如何使用 PHP / mysqli 安全地编写查询的示例。

标签: php jquery sql


【解决方案1】:

Selectoption 没有分开。当你在呼应分开时,让它结合起来。

 $row = "<select data-placeholder='Select Focus Area' name='chzn2' class='chzn-select' multiple='true' style='width:250px;'>";
        while ($row1 = mysqli_fetch_array($dropq)) {
    $row .= "<option></option>
            <option value='" . $row1['orgFocus'] . "'>" . $row1['orgFocus'] . "</option>";
    }
    $row .= "</select>";
    echo $row;

其他选择标签也一样

【讨论】:

    【解决方案2】:

    正如错误提示:

    未定义索引:chzn2

    并且根据您的逻辑,可以传递两个值中的一个,从而使其中一个值无法设置,因此会引发错误-应该如此。

    您需要检查$_POST 键中的任何一个是否单独存在并分别设置它们的值,无论是传递的值还是空值。

    示例

    <?php
    $chzn1 = null;
    $chzn2 = null;
    
    if (!empty($_POST['chzn1']))
        $chzn1 = $_POST['chzn1'];
    
    if (!empty($_POST['chzn2']))
        $chzn1 = $_POST['chzn2'];
    ?>
    

    现在它们都将具有默认值,因此不会引发错误。

    注意:当您使用mysqli_* 时,请使用准备好的语句。

    更新 #1

    可能是由于格式错误,但您还有一个浮动分号;

    ;}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2011-09-15
      • 1970-01-01
      • 2015-08-24
      • 2011-10-19
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多