2017-01-13 3 views
1

Я пытаюсь вставить нового пользователя в мою базу данных, но php всегда терпит неудачу, issets im делает всегда возвращать false, поэтому он не вставляет, у меня нет ideia, почему, i пари сво основную вещь, чтобы исправить, я немного frustated ..HTML-форма и PHP-скрипт для вставки в базу данных не работает

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

?> 

Это эхо "ошибка".

Спасибо.

+0

Вы можете просто поставить 'name' атрибут на ваш' '

+0

используйте var_dump ($ insert), а затем die(); после определения вставки, вероятно, вы получите сообщение об ошибке для своего SQL-запроса, но вы его не увидите. Эхо "ошибка" не говорит вам много. –

+0

Добавить 'method =" post "' near '

ответ

2

Вам нужно добавить method="post" в форму ..!

Причина, по которой все ваши условия терпят неудачу, заключается в том, что $_POST - null. Вы не публикуете никаких данных, поскольку метод формы по умолчанию - GET.

+0

Я пропустил эту точку в своем ответе +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', 

'$ пароль'); ");

+0

Пожалуйста, прочитайте [ответ] –

0
  • error текст сообщения вы получаете означает, что он не читает состояние isset()

Вы можете попробовать заменить. и сделайте одно условие вместо этого, положив сначала на вашу кнопку атрибут name:

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

Тогда условие:

if(isset($_POST['register'])){ 
  • ли правильный error reporting вместо того, чтобы простой текст.

  • Некоторые из имен столбцов, которые вы используете может быть reserved word in MySQL (т.е. name и password).

Таким образом, вы можете использовать резервную клеща (`), чтобы инкапсулировать эти имена столбцов:

$query = "INSERT INTO users(`name`, `nickname`, `email`, `password`) VALUES ('$name', '$nickname', '$email', '$password')"; 
  • Вы также можете проверить prepared statement, так как вы используете mysqli_* API уже, так что вы не нужно связывать необработанные данные в ваших запросах.
  • я пропустил это, но вы забыли method="POST" атрибут на вашем <form> тег
0

Это не единственная проблема, с которой вы столкнулись со своим скриптом.

Прежде всего, вам следует попробовать работать с классами и использовать PDO, поэтому, если вам придется менять базу данных, ваш скрипт может быть очень легко обновиться до новой базы данных, это добавит гибкости вашему сценарию. The PHP Data Objects (PDO) extension

Второе, что вы никогда не должны вставлять в свои данные о состоянии SQL, которые вы получили от пользователя, прежде чем процитировать его, иначе вы voranble для SQL-инъекции. Вы можете сделать это очень легко с PDO :: подготовить

PDO :: подготовить

Я предпочитаю использовать этот код, это гораздо чище и легко управлять:

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

} 

и не использовать вашу очень длинную линию:

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

и около Ваша проблема, что вы получите ошибку, вы забыли положить в форму

метод = «POST»

Смежные вопросы