为什么这个PHP代码工作但通知?

时间:2018-05-22 14:02:54

标签: php html mysql

我正在运行这段代码,它按预期工作但发出通知: -

<!DOCTYPE>
<?php 
 $db= mysqli_connect("localhost","root","","php") or die ("Connection wrong!");
?>
<html>
<body>

    <form method="POST" action="db.php">
        <input type="text" name="name" placeholder="Enter name here"></br>
        <input type="password" name="pass" placeholder="Enter pass here"></br>
        <input type="text" name="email" placeholder="Enter email here"></br>
        <input type="submit" name="sub" value="Insert">

    </form>
<?php

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

            $name = $_POST['name'];
            $pass = $_POST['pass'];
            $email = $_POST['email'];
    }

    $insert = "insert into users (name,pass,email) values ('$name','$pass','$email')";
    $run = mysqli_query($db,$insert);

    if($run){
        echo "<h3> Reg Success!!<h3>";
    }
?>
<br/>
<table width="500" bgcolor="orange" border="2">
    <tr>
        <th>S.N</th>
        <th>Name</th>
        <th>Password</th>
        <th>Email</th>
        <th>Edit</th>
        <th>Delete</th>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</table>
</body>
</html>

它工作但是通过这些通知,行没有指示 $ insert 的行被声明。什么可能导致这个? : -

enter image description here

4 个答案:

答案 0 :(得分:2)

我认为这是因为您在插入之前放置了}

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

            $name = $_POST['name'];
            $pass = $_POST['pass'];
            $email = $_POST['email'];

到此

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

        $name = $_POST['name'];
        $pass = $_POST['pass'];
        $email = $_POST['email'];


$insert = "insert into users (name,pass,email) values ('$name','$pass','$email')";
}

答案 1 :(得分:1)

    <?php
    if (isset($_POST['sub'])) {
    // Isset to check if post variable exists 
        $name = isset($_POST['name'])?$_POST['name']:'';
        $pass =isset( $_POST['pass'])? $_POST['pass']:'';
        $email = isset( $_POST['email'])? $_POST['email']:'';

        $insert = "insert into users (name,pass,email) values ('$name','$pass','$email')";
        $run = mysqli_query($db, $insert);


  // Insert into database should be inside Conditional statement


     }
        if ($run) {
            echo "<h3> Reg Success!!<h3>";
        }
    ?>

答案 2 :(得分:1)

通知表示您尝试访问的不是现有变量。为避免通知,您可以使用与使用isset()检查$ _POST [&#39; sub&#39;]相同的方式;

希望这对你有所帮助你也不会错过关于php通知,警告,致命错误的错误:)

编辑:同样是检查POST请求的好习惯

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // and here you can do your validations and save you data 
  // or whatever you want to do
}

这意味着您的表单已提交,因为我们可以在您的代码中看到您的html表单方法是&#34; POST&#34;

我已经编辑了您的代码,因为几个原因请查看:

<!DOCTYPE>
<html>
<body>

    <form method="POST" action="db.php">
        <input type="text" name="name" placeholder="Enter name here"></br>
        <input type="password" name="pass" placeholder="Enter pass here"></br>
        <input type="text" name="email" placeholder="Enter email here"></br>
        <input type="submit" name="sub" value="Insert">

    </form>

    <br/>

    <table width="500" bgcolor="orange" border="2">
        <tr>
            <th>S.N</th>
            <th>Name</th>
            <th>Password</th>
            <th>Email</th>
            <th>Edit</th>
            <th>Delete</th>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </table>
</body>
</html>

<?php

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // Here we have post request

        // open connection
        $db = mysqli_connect("localhost","root","","php") or die ("Connection wrong!");

        // here you must validate user input
        $name = $_POST['name'];
        $pass = $_POST['pass'];
        $email = $_POST['email'];

        // and then make insert
        $insert = "insert into users (name,pass,email) values ('$name','$pass','$email')";
        if(mysqli_query($db,$insert)) {
           echo "<h3> Reg Success!!<h3>";
        }
    }
?>

答案 3 :(得分:0)

在“正确”编程中,在为变量赋值之前,你应该“声明”它们。

尝试将其置于if语句之上,以确定是否存在帖子值。

var $name;
var $pass;
var $email;