2

我试图从用户那里获取输入,然后当他按下提交时,它将在数据库中进行查询并在表中返回结果。但是,我的代码似乎并没有等待,因为它会自动执行保存查询结果的 var 为 false 的场景。我试图在同一页面上执行此操作,因为如果我将数据发送到另一个页面,它会起作用,但我想尽量减少我正在使用的文件数量。

这是我的代码:

<!doctype html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>View a Faculty Member</title>
        <style type="text/css">
            .block {
                display:block;
                margin-top:3px;
            }
        </style>
    </head>

    <body>
        <h1>View a faculty member:</h1>

        <form action="" method="post">
            <label class="block">Please Enter ID: <input type="text" placeholder="ie. 12345" maxlength="30" size="30" name="id"></label>

            <input class="block" type="submit" name="submit" value="Get Faculty Member">
        </form>

        <hr/>

        <?php

        // 1- get the id
        // 2- construct query in string
        // 3- connect to db
        // 4- execute the query
        // 5- put the result in a var
        // 6- get the information from the var into a table

        $id = $_POST["id"]; // step 1
        $query = "SELECT * FROM FM WHERE id=\"$id\""; // step 2

        try {
            $db = new PDO("mysql:dbname=project;host=localhost", "khaled", ""); // step 3
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $row = $db->query($query)->fetch(); // step 4 & step 5

            if ($row == FALSE) {
                // id doesnt exist since the query failed
            ?>

            <h3>The ID you entered does not exist.</h3>
            <h4>Please try again.</h4>

            <?
            } else {
                // step 6
                displayTable($row);
            }
        } catch (PDOException $ex) {
        ?>

            <h3 style="color:red;">An error occured.</h3>
            <p>An error occured during the connection to the database.</p>
            <p>Exact error message: <?= $ex->getMessage() ?></p>

        <?php
        }

        function displayTable ($row) {
        ?>

            <table border="1">
                <tr>
                    <th>ID</th>
                    <th>Last Name</th>
                    <th>First Name</th>
                    <th>Office</th>
                    <th>Extension</th>
                    <th>Home Phone</th>
                    <th>Mobile Phone</th>
                    <th>Address</th>
                    <th>Email</th>
                    <th>Starting Year</th>
                    <th>Termination Year</th>
                    <th>Latest Degree</th>
                    <th>Obtained From</th>
                    <th>Degree Year</th>
                    <th>Research Interest</th>
                </tr>
                <tr>
                    <td><?= $row["id"] ?></td>
                    <td><?= $row["lastName"] ?></td>
                    <td><?= $row["firstName"] ?></td>
                    <td><?= $row["office"] ?></td>
                    <td><?= $row["extension"] ?></td>
                    <td><?= $row["homePhone"] ?></td>
                    <td><?= $row["mobilePhone"] ?></td>
                    <td><?= $row["address"] ?></td>
                    <td><?= $row["email"] ?></td>
                    <td><?= $row["startingYear"] ?></td>
                    <td><?= $row["terminationYear"] ?></td>
                    <td><?= $row["latestDegree"] ?></td>
                    <td><?= $row["obtainedFrom"] ?></td>
                    <td><?= $row["degreeYear"] ?></td>
                    <td><?= $row["researchInterest"] ?></td>
                </tr>
            </table>

        <?php
        }       
        ?>
    </body>
</html>

如何让我的代码等待用户输入输入然后检查它是否是错误查询?

4

2 回答 2

7

您可以像这样轻松检查: if(isset($_POST['submit'])){...}. 如果你应该把代码用于查询和东西。

于 2013-05-11T10:45:12.183 回答
4

你不能让你的代码等待。阅读作为 PHP 基础的客户端-服务器模型。相反,您需要执行您的代码两次(最初和客户端的 POST 请求之后),并让您的代码识别这两种情况中的哪一种。

例如,我会检查是否设置了一些 POST 变量来检测需要做什么。

那看起来像:

if(isset($_POST['submit']))
  { ... } // Don't display query results yet
else
  { ... } // Display query results
于 2013-05-11T10:45:53.427 回答