添加到相同的php页面并等待用户输入

Posted

技术标签:

【中文标题】添加到相同的php页面并等待用户输入【英文标题】:Add to same php page and wait for user to input 【发布时间】:2013-05-05 23:06:41 【问题描述】:

我正在尝试从用户那里获取输入,然后当他按下提交时,它将在数据库中进行查询并在表中返回结果。 但是,我的代码似乎并没有等待,因为它会自动执行保存查询结果的 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>

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

【问题讨论】:

顺便说一下,由于您使用的是PDO-Mysql,请使用准备好的语句:php.net/manual/en/pdo.prepared-statements.php 【参考方案1】:

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

例如,我会检查是否设置了某个 POST 变量来检测需要执行的操作。

看起来像:

if(isset($_POST['submit']))
   ...  // Don't display query results yet
else
   ...  // Display query results

【讨论】:

具有底层客户端服务器模型,您不只是指整个 HTTP 吗?因为我认为限制来自 HTTP。 是的,我就是这个意思。谢谢。【参考方案2】:

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

【讨论】:

以上是关于添加到相同的php页面并等待用户输入的主要内容,如果未能解决你的问题,请参考以下文章

PHP自动刷新页面而不会丢失用户输入

将PHP表单输入保存到网页

将VueJS时间输入传递给Rails输入

如何等待用户的输入并继续进行erlang并发编程中的进一步代码?

使用 HTML / PHP 的邮政编码 / 页面查找器

PHP等待来自命令行的输入[重复]