PHP没有做我想做的事情

时间:2015-09-22 11:13:49

标签: php

我有三个文件在登录应用程序上学习PHP。 这是与DB的连接

<?php
# Connecting database below
$connection = mysqli_connect('localhost','root','','loginapp');
if ($connection) {
    # code...
    echo "connected";
}
else{
    echo "Errorr";
    die("Database");
}?>

,这是网页视图的HTML代码

<html>
  <head>
     <title>Form</title>
  </head>
  <body>
       <h1>Welcome to My Form</h1>
       <form class="" action="login_create.php" method="post">
           <input type="text" name="name" placeholder="Enter your name here"><br>
           <input type="password" name="password" placeholder="Enter Password" value=""><br>
           <input type="submit" name="submit" value="submit">
       </form>
  </body>
 </html>

这里是出错的文件,它没有检查条目的条件,也没有把数据放到数据库里去了什么地方错了?请帮助 有时会给出

  

错误&#34;未知&#39; sbumit&#39;在$ _POST&#34;有时它不会   甚至没有显示任何错误

但是什么都不做

    <?php
include "db.php";
if (isset($_POST['submit'])) {

    $username = $_POST['name'];
    $password = $_POST['password'];

    if (isset($username) && isset($password)) {

        if (strlen($username) > 10 && strlen($username) < 3) {

            echo "Must enter username & pass between 3 & 10";
            echo "So that we can forward your request";
        }

        else {

            $query = "INSERT INTO users (username,password) VALUES ('$username','$password')";
           $result = mysqli_query($connection,$query);

            if(!$result)
            {
                die('Sorry Query faild'.mysqli_error());
            }
        }
    }
    else
    {
        echo "You haven't wrote anything, write it first";
    }
   }?>

2 个答案:

答案 0 :(得分:2)

的Habib,

PHP的一些指导:

 $button   = isset($_POST["submit"])?$_POST["submit"]:"";

这一行的作用是对$button变量应用一个值,第一个检查是 IF isset($var) THEN (用?)将$var的值应用于$button变量。 冒号:然后设置如果 IF 的布尔查询(true / false)返回false,则应用第二个值,在这种情况下为{{1}的空字符串}。

这是代码最小化,您应该了解它,但几乎不需要使用它,尤其是在学习时。

对您的代码的反馈:

  • ""您对MySQLi的错误反馈应包括连接详细信息,如下所示。

  • 替换mysqli_error($connection);

    $username = $_POST['name']; $password = $_POST['password']; 因为您想要检查它们是否已设置,但如果它们不为空,则当前它们将被设置为因为它们被设置为{{1}的值即使它们为null(可能),所以替换为: if (isset($username) && isset($password)) {

    • 另请注意,$_POST是否定运算符。所以上面是 IF NOT EMPTY
  • if(!empty($username) && !empty($password)){这是不可能达到的,因为如果字符串长于10并且字符串短于3,则设置为<,这显然是不可能的。将!替换为if (strlen($username) > 10 && strlen($username) < 3) { 而不是 AND

  • 我个人认为&&不是最好的方式,而是检查||是否确认从提交按钮提交此表单(值为HTML表单中设置的值)。

  • isset($_POST['submit'])这很好用,但是你真的需要对SQL注入攻击和SQL安全做一些研究。阅读How can I prevent SQL injection in PHP?作为开始。在PHP MySQL学习开始时学习这一点非常重要。

    • 还研究PDO数据库连接。

    • 还要注意,当您成功保存数据库的用户名/密码时,您的脚本将不会输出任何内容。

作为一个更接近的人:

  • 最后,在您的网页上设置错误记录,为您提供有关错误和问题的有用反馈:if($_POST['submit'] == 'submit')位于页面顶部。另请参阅How do I get PHP errors to display?

答案 1 :(得分:0)

更改您的代码如下。

     <?php
        include "db.php";

        $button   = isset($_POST["submit"])?$_POST["submit"]:"";
        $username = isset($_POST["name"])?$_POST["name"]:"";
        $password = isset($_POST["password "])?$_POST["password "]:"";


/*Commetents*/
$button =isset($_POST["submit"])?$_POST["submit"]:""; 
is similar to following code:

if(isset($_POST["submit"]))
  { 
  $button = $_POST["submit"];
  }
else
  {
  $button = $_POST["submit"];
  }

你知道在PHP 5.4中,如果你没有为变量设置任何值,它将出现错误。这就是我们使用它的原因。如果它没有获得任何值,则会将其设置为值""

if($button == "submit")表示当有人按下提交按钮时,将提交您在提交按钮值中定义的$_POST['submit']值。

if($button == "submit")
        {
          if($username=="" or $password=="") 
            {
            $error ="Username  & Password can't be blank";
            }
          elseif(strlen($username)<3 or strlen($username) > 10 )
           {
           $error ="Must enter username & pass between 3 & 10";
           } 
          else  
          {
        $query = "INSERT INTO users (username,password) VALUES('$username','$password')";
        mysqli_query($connection,$query) or die(mysqli_error());

          }

        }

    echo $error;

希望它会对你有所帮助。