繁体   English   中英

插入数据库的HTML表单和PHP脚本不起作用

[英]HTML Form and PHP Script to insert into database not working

我正在尝试向数据库中插入新用户,但是php总是失败,issets im正在执行总是返回false,所以它不会插入,我没有任何想法,为什么我敢打赌要解决的基本问题,我有点沮丧。

HTML页面

 <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脚本:

   <?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";
  }

?>

它呼应“错误”。

谢谢。

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

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

您需要使用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');“);

  • 您收到的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' )";
  • 由于您已经在使用mysqli_* API,因此您可能还需要检查已准备好的语句 ,因此不必将原始数据绑定到查询中。
  • 我错过了,但是您忘记了<form>标记上的method="POST"属性

这不是脚本的唯一问题。

首先,您应该尝试使用类并使用PDO,因此,如果必须更改数据库,可以非常容易地将脚本更新为新数据库,这可以为脚本增加灵活性。 PHP数据对象(PDO)扩展

其次,在继续进行处理之前,切勿将您从用户那里获得的数据插入到SQL语句中,除非您愿意使用sql注入。 您可以使用PDO轻松完成::准备

PDO ::准备

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

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

}

而不要使用很长的一行:

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

关于您遇到错误的问题,您忘记了填写表格

方法= “POST”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM