【问题标题】:I know my table contains rows but my query returns a result of 0. How do I fix this?我知道我的表包含行,但我的查询返回的结果为 0。我该如何解决这个问题?
【发布时间】:2017-05-27 17:04:01
【问题描述】:

这是一个学校作业,我只是不知道我哪里出错了。一些帮助将不胜感激。我的代码是 PHP 和 HTML 的混合体,它利用表单将条目输入到我数据库中的表中。表单正常工作并且正在输入条目,但是当我执行返回条目函数以查看表中的所有条目时,什么也没有返回。

这是我目前正在使用的代码:

<?php

if(isset($_POST['submit'])){

    //getting timezone data for registration timestamp
    $timezone = date_default_timezone_set('America/New_York');

    //define username and passowrd according to what user entered
    $userFName = $_POST['fname'];
    $userLName = $_POST['lname'];
    $userCity = $_POST['city']; 
    $userEmail = $_POST['email'];
    $regDate = date(format,timestamp);

    // Establishing Connection with Server by passing server_name, user_id and password as a parameter
    $conn = mysqli_connect("localhost", "root", "root");
    //$conn2 = mysqli_connect("localhost", "root", "root", "progAssignment2");

    //to protect mySQL injection for Security purposes
    $userFName = stripslashes($userFName);
    $userFName = mysqli_real_escape_string($conn, $userFName);      
    $userLName = stripslashes($userLName);
    $userLName = mysqli_real_escape_string($conn, $userLName);
    $userCity = stripslashes($userCity);
    $userCity = mysqli_real_escape_string($conn, $userCity);    
    $userEmail = stripslashes($userEmail);
    $userEmail = mysqli_real_escape_string($conn, $userEmail);

    //select my desired database
    $db = mysqli_select_db($conn, 'progAssignment2');   

    //if user submits form, insert new data into table and echo success
    $sql = "INSERT INTO MyGuests (firstname, lastname, city, email, reg_date) 
        VALUES ('$userFName', '$userLName', '$userCity', '$userEmail', '$regDate');";

    if (mysqli_query($conn, $sql)) {
        echo "Your form has been successfully submitted!";
    } else {
        echo "Error updating record: " . mysqli_error($conn);
    };

    //selecting data from mySQL database
    $query = "SELECT * FROM MyGuests";
    $result = mysqli_query($conn, $query);

};
?>

<!DOCTYPE html>
<html>
<head>
<title>Programming Assignment 3 - Isaiah Duncan</title>
</head>
<body>

<header></header>

<nav></nav>

<section>

    <h1>Insert Data Form</h1>

    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">

        First Name:<br>
        <input type="text" name="fname" value="" required/><br><br>

        Last Name:<br>
        <input type="text" name="lname" value="" required/><br><br>

        City:<br>
        <input type="text" name="city" value="" required/><br><br>

        Email:<br>
        <input type="text" name="email" value="" required/><br><br>

        <input type="submit" name="submit" value="Submit" />

    </form>

</section>

<section>

    <h1>Results</h1>

    <?php

    //check if (more than zero) rows are returned. if so, loop through and display
    if (mysqli_num_rows($result) > 0) {
        //output data of each row
        while($row = mysqli_fetch_assoc($result)) {
            echo "id: " . $row["id"] . " - FirstName: " . $row["firstname"] . " - LastName: " 
                . $row["lastname"] . " - City: " . $row["city"] . " - Email: " . $row["email"] . "<br>";
        };
    }else{
        echo "0 results" . mysqli_error($conn);
    };

    ?>

    <?php echo "There are " . mysqli_num_rows($result); ?>

</section>

<?php mysqli_close($conn); ?>

</body>
</html>

【问题讨论】:

  • 看起来您的 SELECT 查询只有在提交表单时才会执行。您是否尝试将其移至 }; 行下方?
  • @NanaPartykar 没错,他们可能认为$db = mysqli_select_db($conn, 'progAssignment2'); 就足够了,但$conn = mysqli_connect("localhost", "root", "root"); 也应该有4 个参数。编辑:您删除了我正在回复的评论。然而,$db 变量并没有做任何事情。
  • 除了在提交表单之前,post 位应该无关紧要。他必须至少做过一次。虽然它应该被移动我不认为这是原因,
  • @Fred-ii-:我想,我指出了错误的问题。这就是为什么被删除。是的。我也在想 4 参数必须在那里。
  • @NanaPartykar 您可以向版主举报以取消删除您的评论;我认为这没有什么问题,如果你愿意的话。但是,是的,您的(已删除)评论是有效的。

标签: php html mysql database mysqli


【解决方案1】:

据我所知,我认为您希望查看您之前在第一次访问该页面时插入的所有记录。如果是这种情况,您将需要在 if 语句之外获取 $result。该 if 语句只会在您提交表单时执行。例如,在 if 语句之外(在它的正下方),输入:

 $conn = mysqli_connect("localhost", "root", "root");
 $db = mysqli_select_db($conn, 'test');
 $query = "SELECT * FROM MyGuests";
 $result = mysqli_query($conn, $query);

这应该在您每次访问该页面时运行上述查询。如果有任何结果,它应该列出它。

【讨论】:

  • 不客气,以赛亚。如果这是您选择的答案,请记得将其标记为您的最佳答案。
  • 以赛亚,看来我的回答帮助您修复了代码。你会选择这个答案作为你的最佳答案吗?提前致谢。
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多