hakuna matata
hakuna matata

Reputation: 3327

Add to same php page and wait for user to input

I am trying to get input from user, then when he press submit, it will do a query in a database and return the results in a table. My code however doesn't seem to wait, as it automatically executes the scenario where my var that holds the result of query is false. I am trying to do this on same page, as it worked if I send the data to another page, but I want to minimize the number of files I'm using.

Here is my code:

<!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>

How can I make my code wait for user to enter input then to check if it is false query or not?

Upvotes: 2

Views: 1852

Answers (2)

chtenb
chtenb

Reputation: 16184

You cannot make your code wait. Read up on the client-server model that underlies PHP. Instead you need to execute your code twice (initially and after the POST request of the client), and make your code recognize in which of the two cases it is.

For instance, I would check if some POST variable is set to detect what needs to be done.

That would look like:

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

Upvotes: 4

jdepypere
jdepypere

Reputation: 3553

You can easily check like this: if(isset($_POST['submit'])){...}. In that if you should put the code for the query and stuff.

Upvotes: 7

Related Questions