2017-01-13 7 views
1

データベースに新しいユーザーを挿入しようとしていますが、PHPが常に失敗してしまい、issets imは常にfalseを返すので、挿入しません。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"; 
    } 

?> 
: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スクリプト

...ビットfrustatedイム、修正するための基本的な事を賭けます

「エラー」と表示されます。

ありがとうございました。

+0

フォームに置くことを忘れてしまったあなたは 'あなた'

+0

var_dump($ insert)を使用してからdie();あなたが挿入を定義した後、おそらくあなたのSQLクエリのエラーメッセージが表示されますが、あなたはそれを見ていません。 エコー "エラー"はあなたにはあまり言いません。 –

+0

phpコードで 'if(isset($ _ POST ['ここでボタン名に与えられた名前)'を使用して、' form class = "form-signin" action = "register.php" ])) 'ボタンにも名前をつける –

答えて

2

method="POST"属性を忘れてしまいました...!

$_POSTがnullであるため、すべての条件が満たされない理由があります。デフォルトのフォームメソッドがGETなので、あなたはデータを投稿していません。

+0

を読んでください。 –

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
  • あなたはそれがisset()条件を読んでいないことを意味を取得しているerrorテキストメッセージが

あなたは置き換えるしようとすることができます最初にボタンにname属性を入れて、単一の条件を実行します。

次に条件:

if(isset($_POST['register'])){ 
  • ではなく、プレーンテキストを置くの適切error reportingを行います。

  • 使用している列名の一部がreserved word in MySQLすなわちnamepassword)かもしれません。

だから、あなたがそれらの列名をカプセル化するために、バックティック( `)を使用することができます。

$query = "INSERT INTO users(`name`, `nickname`, `email`, `password`) VALUES ('$name', '$nickname', '$email', '$password')"; 
  • すでにmysqli_* APIを使用しているので、あなたはまた、prepared statementをチェックしたい場合がありますので、あなた生データをクエリにバインドする必要はありません。
  • 私はこれを逃したが、あなたはあなたがあなたのフォームにmethod="post"を追加する必要があり、あなたの<form>タグ
0

これはあなたのスクリプトで唯一の問題ではありません。

まずクラスを操作してPDOを使用するようにしてください。データベースを変更する必要がある場合は、スクリプトを新しいデータベースに簡単に更新できるため、スクリプトに柔軟性が追加されます。 The PHP Data Objects (PDO) extension

第二に、あなたは、SQLインジェクションにvoranble othervise、あなたはそれをprosesing前に、ユーザからもらった自分のSQLのなステートメントデータに挿入することはありません。 あなたはそれを管理するためにはるかにクリーンで簡単です、私はこのコードを使用することを好む

準備:: ::それは非常に簡単PDOをどう

PDOを準備することができます:

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

} 

と非常に長い行を使用しないでください。

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

あなたがエラーを取得し、あなたの問題は、あなたが

方法=「POST」

関連する問題