2016-05-20 35 views
-1

私はPHPを初めて使い、OOP PHPを習得しようとしています。OOP PHPとPDOを使用してmysqlにデータを挿入

OOP PHPを学ぶための登録フォーム(単純なもの)を作成していますが、データを提出すると成功メッセージが表示されますが、データはデータベースに挿入されません。

以下

は私のコードです:

connection.php

<?php 

class DBConnection extends PDO 
{ 
    public function __construct() 
    { 
     $host='mysql:host=localhost;dbname=OOP'; 
     $user='root'; 
     $password=''; 
     parent::__construct($host,$user,$password); 
     $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     // always disable emulated prepared statement when using the MySQL driver 
     $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    } 
} 

?> 

のindex.php

<?php 
session_start(); 
/*include 'classes.php'; 
//$dbHandle = new DBConnection(); 
$ins=new basic_operation(); 
$ins->Insert_Data();*/ 



?> 


    <div class="col-lg-12"> 

     <div class="col-lg-1"></div> 

     <div class="col-lg-7"> 
      <form action="user_data.php" method="post" > 
       <input type="text" name="username" id="username" class="form-control"><br> 
       <input type="email" name="email" id="email" class="form-control"><br> 
       <input type="password" name="password" class="form-control" id="password"><br> 
       <input type="submit" name="submit" id="submit" value="submit"> 
      </form> 
        </div> 

       </div> 
<div> 
    <?php if (isset($_SESSION['insert'])) 
    { 
     echo $_SESSION['insert']; 
     unset($_SESSION['insert']); 
    } 

    ?></div> 

     </div> 
    </div> 

User_data.php

<?php 
session_start(); 
include 'classes.php'; 

    $insert=new basic_operation(); 
    $usr=$insert->Insert_Data(); 
    //return $insert; 
    $_SESSION['insert']='data inserted successfuly'; 
    header('location:index.php'); 

?> 

Classes.php

<?php 
include 'connection.php'; 

class basic_operation 
{ 

    public function Insert_Data() 
    { 
     if (isset($_POST['submit'])) { 
      $user = $_POST['username']; 
      $email = $_POST['email']; 
      $pass = $_POST['password']; 
      $smt = new DBConnection(); 
      $qry = $smt->prepare("insert into student(User_Name,Email,Password) VALUES ('" . $user . "','" . $email . "','" . $pass . "')"); 
      $qry->execute(); 

     } 
    } 
} 
?> 

いずれかがその後のリンクを提供してくださいOOP PHPおよびPDOを使用してPHPの動作を(、削除、挿入、更新を選択)基本的なCRUDを実行する方法を知っている場合、ソース私はそれから学ぶことができます。

私はインターネットで検索しましたが、接続コードを見つけやすくなりました...説明的な答えを探していますが、この質問はまた、 OOP PHPを学びたい

ご協力いただきますようお願い申し上げます。

+0

を試してみてくださいあなたが持っていた – RiggsFolly

+4

'PDO :: ERRMODE_EXCEPTION'を使うようにPDOを設定する感覚ですが、' try/catch'ブロックを使ってスローされた例外をキャッチしていないので、表示されず、エラーも発生しません – RiggsFolly

+0

あなた自身ですべてのコードを書いたことがありますか?いいえの場合は、最初からすべてを開始するか、コードの構造を理解する必要があります。上記のコードでは、入力はバインドされておらず、直接挿入されています(MySQLインジェクションのリスク)と 'InsertData()'関数は同じタイプのデータに固有です。あなたが望むなら、自分のスタイルでコードを書き直したいと思います。 – Rehmat

答えて

0

接続スクリプトでtry-catchを使用すると、エラーが発生します。

try { 
    $pdo = new PDO(
    'mysql:host=localhost;port=3306;dbname=your_db;charset=utf8mb4', 
    'user', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4") 
    ); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo 'Database connection has failed. Contact system administrator to resolve this issue!<br>'; 
    $e->getMessage(); 
    die(); 
} 

エラー報告をPHPで有効にします(これをあなたのPHPスクリプトの上に追加してください)。

error_reporting(E_ALL); 

プリペアドステートメントを使用したいので、適切にエスケープするためにパラメータをバインドする必要があります。

 $qry = $smt->prepare("INSERT INTO `student` (`User_Name`,`Email`,`Password`) 
           VALUES (:user,:email,:pass);"); 
     $qry->bindParam(':user', $user, PDO::PARAM_STR, 255); 
     $qry->bindParam(':email', $email, PDO::PARAM_STR, 255); 
     $qry->bindParam(':pass', $pass, PDO::PARAM_STR, 255); 
     $qry->execute(); 
バウンドパラメータを持つ

準備文あるだけでなく、より多くのポータブル より、便利なSQLインジェクションに対する免疫が、多くの場合、はるかに高速 へ はできるサーバーとクライアントの双方として、補間されたクエリよりも実行されていますコンパイルされた形式のクエリをキャッシュします。

ソース:php.net

そして最後でPDO ::引用符の説明ではなく、少なくとも...常にそのようPASSWORDように適切にquote MySQLのKeywords and Reserved Words MySQLのクエリに「`」バッククォートを使います。クエリとしてフィールドとして使用しますが、引用することはありません。

0

実際には、phpstormを使用せずにlocalhostを使って直接実行しようとすると、コードは正常に動作しています。問題は私のIDEにあります。

ご協力いただきありがとうございます。

0
`if (isset($_POST['submit'])) { 
     $user = $_POST['username']; 
     $email = $_POST['email']; 
     $pass = $_POST['password']; 
     $smt = new DBConnection(); 
     $qry = $smt->prepare("insert into student(User_Name,Email,Password) VALUES ('" . $user . "','" . $email . "','" . $pass . "')"); 
     $qry->execute(); 

    }` 

(http://php.net/manual/en/book.pdo.php)[PHPマニュアル]を開始するのに最適な場所はもちろんである。この

if (isset($_POST['submit'])) { 
     $user = $_POST['username']; 
     $email = $_POST['email']; 
     $pass = $_POST['password']; 
     $smt = new DBConnection(); 
     $qry = $smt->prepare("INSERT INTO student(User_Name,Email,Password) VALUES (:user,:email,:pass)"); 
$qry->execute(array(':user'=>$user,':email'=>$email,':pass'=>$pass)); 

    } 
関連する問題