2016-05-20 7 views
-1

Ich bin neu in PHP und versuchen, OOP PHP zu lernen.Einfügen von Daten in MySQL mit OOP PHP und PDO

Ich erstelle ein Registrierungsformular (ein einfaches), um OOP PHP zu lernen, wenn ich Daten sende, wird die Erfolgsmeldung angezeigt, aber die Daten werden nicht in die Datenbank eingefügt.

Unten ist mein Code:

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(); 

     } 
    } 
} 
?> 

Wenn jemand weiß, wie grundlegende CRUD ausführen (Einfügen, Aktualisieren, Löschen auswählen) Betrieb in PHP OOP PHP und PDO Dann geben Sie bitte den Link, Quelle Beispiel, so kann ich daraus lernen

Ich suchte im Internet, aber Bärly in der Lage, den Verbindungscode zu finden ... Auf der Suche nach einer beschreibenden Antwort, wie ich denke, diese Frage wird auch eine Menge Leute helfen, die versuchen/möchte OOP PHP lernen.

Jede Hilfe wird geschätzt.

+0

Der beste Platz ist natürlich zu starten [Die PHP Manual] (http://php.net/manual/en/book.pdo.php) – RiggsFolly

+4

Sie haben Der Sinn, PDO zu setzen, um 'PDO :: ERRMODE_EXCEPTION' zu verwenden, aber Sie benutzen' try/catch' Blöcke nicht, um irgendwelche geworfenen Ausnahmen zu fangen und Sie werden deshalb nicht angezeigt und Fehler, die passieren – RiggsFolly

+0

Haben Sie den ganzen Code selbst geschrieben? Wenn nein, dann würde ich empfehlen, alles von Grund auf neu zu starten oder die Struktur des Codes zu verstehen. Im obigen Code sind Eingaben nicht gebunden und sie sind direkt eingefügt (Risiko der MySQL-Injektion) sowie die Funktion "InsertData()" ist spezifisch für den gleichen Datentyp. Wenn Sie es wünschen, würde ich einen Code in meinem eigenen Stil umschreiben. – Rehmat

Antwort

0

Verwenden Sie in Ihrem Verbindungsskript try-catch, um Fehler zu erhalten.

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(); 
} 

Aktivieren Sie Fehlerberichte in PHP (fügen Sie dies über Ihr PHP-Skript).

Da Sie vorbereitete Anweisungen verwenden möchten, müssen Sie Ihre Parameter binden, um ordnungsgemäß zu entkommen.

 $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(); 

Prepared Statements mit gebundenen Parametern sind nicht nur tragbar, bequemer, immun gegen SQL-Injection, sind aber oft viel schneller ausführen als interpolierte Abfragen, sowohl als Server und Client-Seite kann Cache eine kompilierte Form der Abfrage.

Quelle: Beschreibung der PDO :: quote in php.net

Und last but not least ... Verwenden Sie immer Backticks „`“in Ihrer MySQL-Abfragen richtig quote MySQL Keywords and Reserved Words wie PASSWORT. Sie verwenden es in Ihrer Abfrage als ein Feld, aber Sie zitieren es nicht.

0

Eigentlich funktioniert der Code gut, wenn ich versuche, es direkt mit localhost ohne phpstorm zu verwenden, dann funktioniert es .. bedeuten das Problem ist in meiner IDE.

Vielen Dank für Ihre Bemühungen.

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(); 

    }` 

Versuchen Sie, diese

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)); 

    }