HTML表单和PHP脚本插入数据库无法正常工作

时间:2017-01-13 01:14:55

标签: php html mysql forms

我正在尝试将新用户插入我的数据库但是php总是失败,issets总是返回false所以它没有插入,我没有ideia为什么,我打赌它是一个基本的东西要修复,我有点frustated ..

HTML PAGE

 <html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="stylesheet" href="./css/bootstrap.min.css" >
    <link rel="stylesheet" href="./css/orlando.css" >
    <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content=" Pagina Inicial ">

</head>

<body>

<div id="wrapper">
    <!-- Sidebar -->
    <nav class="navbar navbar-inverse navbar-fixed-top" id="sidebar-wrapper" role="navigation">
        <ul class="nav sidebar-nav">
            <li class="sidebar-brand">
                <a href="#">
                   <img src="./img/logo2.png" alt="">
                </a>
            </li>
            <li>
                <a href="index.html">Login</a>
            </li>
            <li>
                <a href="register.html">Register</a>
            </li>
            <li>
                <a href="about.html">About</a>
            </li>
            <li>
                <a href="profile.html">Profile</a>
            </li>
            <li>
                <a href="matchhistory.html">Match History</a>
            </li>
            <li>
                <a href="leaderboard.html">Leaderboard</a>
            </li>
            <li>
                <a href="contacts.html">Contacts</a>
            </li>
            <li>
                <a href="#">Logout</a>
            </li>
        </ul>
    </nav>
    <!-- /#sidebar-wrapper -->

    <!-- Page Content -->
    <div id="page-content-wrapper">
          <nav class="navbar navbar-default navbar-static-top">

            <div class="container" style="width: 100%;">
              <button type="button" class="hamburger is-closed" data-toggle="offcanvas">
                  <span class="hamb-top"></span>
            <span class="hamb-middle"></span>
          <span class="hamb-bottom"></span>
              </button>
              <div class="navbar-header">
                  <a class="navbar-brand" href="./index.html"target="_self" style="margin-left: 55px;"> <img src="./img/logo.png" alt=""></a>
             </div>
            </div>
          </nav>

          <form class="form-signin" action="register.php">
            <h2 class="form-signin-heading">Register</h2>
            <input type="text" class="form-control" name="name" placeholder="name" required="" autofocus="" />
            <input type="text" class="form-control" name="nickname" placeholder="nickname" required="" autofocus="" />
            <input type="text" class="form-control" name="email" placeholder="email" required="" autofocus="" />
            <input type="password" class="form-control" name="password" placeholder="password" required=""/>
            <label class="checkbox">
              <input type="checkbox" value="remember-me" id="rememberMe" name="rememberMe"> Remember me
            </label>
            <button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
          </form>

    <!-- /#page-content-wrapper -->
  </div>
</div>

<!-- /#wrapper -->

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="./js/bootstrap.min.js"></script>
        <script src="./js/master.js"></script>
</html>

PHP SCRIPT:

   <?php

define("DB_HOST", "");
define("DB_USER", "");
define("DB_PASSWORD", "");
define("DB_DATABASE", "");

$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE) or die('Oops');
//verificar se a ligação foi feita com sucesso
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if (isset($_POST['name']) && isset($_POST['nickname']) && isset($_POST['email']) && isset($_POST['password'])) {

  echo "isset";
  $name = $_POST['name'];
  $nickname = $_POST['nickname'];
  $email = $_POST['email'];
  $password = $_POST['password'];

  $query = "INSERT INTO users(name, nickname, email, password) VALUES ('$name', '$nickname', '$email', '$password' )";
  $insert = mysqli_query($con, $query) or die ('Error');

  if ($insert) {
        echo "sucess";
     } else {
        echo "RIP";
     }
  } else {
    echo "error";
  }

?>

它回应了&#34;错误&#34;。

感谢。

4 个答案:

答案 0 :(得分:2)

您需要在表单中添加method="post" ..

所有条件失败的原因是因为$_POST为空。由于默认表单方法为GET,因此您不会发布任何数据。

答案 1 :(得分:0)

您需要使用try {} catch {}以避免在出现错误时泄露密码。

  class bd{  
                static function connexion(){
                    try{
                       //LOCAL
                        $dsn = "mysql:host=localhost;dbname=name";
                        $usr = "username";
                        $pass = "password";

                        $options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                        $bdd = new PDO($dsn, $usr, $pass);
                        $bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
                        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        return $bdd;
                    }catch(Exception $e){
                        echo $e->getMessage();
                    }
                }


            static function execQuery($bdd, $query){
                try{
                    $req = $bdd->prepare($query);
                    $req->execute();
                    $result = $req->fetchAll(PDO::FETCH_ASSOC);
                    $req->closeCursor();
                    return $result;
                } catch( PDOEXception $e ) {
                       echo $e->getMessage(); // display bdd error
                       exit();
                   }
               }
            }

      $name = $_POST['name'];
      $nickname = $_POST['nickname'];
      $email = $_POST['email'];
      $password = $_POST['password'];
      $bdd = bd::connexion();
      $req = $bdd->prepare("INSERT INTO users(name, nickname, email, password) VALUES ('$name', '$nickname', '$email', 

'$ password');“);

答案 2 :(得分:0)

  • 您收到的error短信表示其未读取isset()条件。

您可以尝试替换并执行单个条件,方法是先在按钮上添加name属性:

<button class="btn btn-lg btn-primary btn-block" name="register" type="submit">Register</button>

然后条件:

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

因此,您可以使用反向标记(`)来封装这些列名称:

$query = "INSERT INTO users(`name`, `nickname`, `email`, `password`) VALUES ('$name', '$nickname', '$email', '$password' )";
  • 您可能还想检查prepared statement,因为您已经使用mysqli_* API,因此您不必将原始数据绑定到查询中。
  • 我错过了这一点,但您在method="POST"代码
  • 上忘记了<form>属性

答案 3 :(得分:0)

这不是您使用脚本的唯一问题。

首先,您应该尝试使用类并使用PDO,因此如果您需要更改数据库,您的脚本可以非常容易地更新到新数据库,它可以为您的脚本增加灵活性。 The PHP Data Objects (PDO) extension

其次,你应该永远不要插入你从用户那里获得的SQL语句数据,然后再进行sql注入。 你可以用PDO :: prepare

轻松完成
  

PDO ::制备

我更喜欢使用此代码,它更清晰,更易于管理:

if("POST" == $_SERVER['request_method']){

}

并且不要使用你的很长的一行:

if (isset($_POST['name']) && isset($_POST['nickname']) && isset($_POST['email']) && isset($_POST['password'])) {

关于你的问题,你得到一个错误,你忘了把你的表格

  

method =“POST”