如何检查$ _POST下是否有数据?

时间:2018-04-19 00:53:20

标签: php html mysql

我用HTML和PHP编写一个页面,连接到Marina数据库(船只,所有者等......),在下拉列表中显示所有所有者姓氏,然后显示姓氏下的所有船只被选中了。

这是我的相关代码......

$sql = 'select LastName from Owner';
    $result = $conn->query($sql);
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        $values[] = array(
        'LastName' => $row['LastName']
        );
    }

    echo '<form align="left" top="200" action="page2.php" method="post">
        <p>Select an owner:</p>
        <select top="200" name="form1" id="form1">';

    foreach($values as $v){
        echo '<option value="'.$v['LastName'].'">'.$v['LastName'].'</option>';
    }

    echo '</select>
      <input type="submit" value="Submit">
      </form>';

    if(isset($_POST['form1'])){//if there was input data submitted
        $form1 = $_POST['form1'];

        $sql = 'select BoatName from MarinaSlip,Owner where MarinaSlip.OwnerNum = Owner.OwnerNum and Owner.LastName = '.$form1;

        $result = $conn->query($sql);

        while ($row = mysqli_fetch_array($result1, MYSQLI_ASSOC)) {
            $values[] = array(
            'BoatName' => $row['BoatName']
            );
        }
        echo '<ol>';
        foreach($values as $v){
            echo '<li>'.$v.'</li>';
        }
        echo '</ol>';
    }

我已设法在下拉列表中正确显示姓氏,并将名称保留为变量,但我遇到了一些我无法解决的错误。

1)当我尝试重新加载页面时(使用Firefox)我收到一条消息“要显示此页面,Firefox必须发送信息,这些信息将重复之前执行的任何操作(例如搜索或订单确认)”所以我想知道如何编写它以便我不需要最初发送数据。

2)在提交姓氏并且我尝试运行查询以匹配该姓氏下的所有船只后,我得到一个错误,即$result变量不是MYSQLI结果类型虽然我在剧本中使用了相同的代码。

我是HTML和PHP的新手,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  1. 当您重新加载作为表单提交结果的页面时,会发生该消息。这意味着它必须重新提交表单才能重现相同的结果。防止它的方法是让表单将用户重定向到显示结果的页面,而不是显示结果本身。这可能很复杂,除非表单提交只是对数据库进行了更改,然后您想要显示内容,而不是直接显示依赖于表单提交的内容。

  2. 您需要在名称旁边加上引号:

    $sql = 'select BoatName from MarinaSlip,Owner where MarinaSlip.OwnerNum = Owner.OwnerNum and Owner.LastName = "'.$form1.'"';
    
  3. 但最好使用参数化查询。见How can I prevent SQL injection in PHP?