2016-11-30 8 views
-1

これに関連するいくつかの質問を見てきましたが、ほとんどの場合単純な構文エラーで答えるようです。しかし、私の問題は構文だとは思わない。DBへの接続は成功しましたが、MySQLでは表示されません

データベースに正常に接続していますが、phpmyadmin(MySQLが表示されている場所)に自分のエントリが表示されないようです。私は変数として別のページに自分のエントリをエコーすることができますが、私は自分の入力がデータベースに入っていないと信じています。

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>student info</title> 
    </head> 
    <body> 
     <br> 
     Enter your first name and last name in the corresponding boxes. 
     <br> 
     <form action="submit.php" method="POST"> 
      First: <input type="text" name="firstname"/> 
     <br> 
      Last: <input type="text" name="lastname"/> 
     <br> 
     <input type="submit"> 
     </form> 


    </body> 
</html> 

私のPHPデータベース接続用:

<?php 
echo 'here'; 
    $dsn = 'mysql:host=localhost;dbname=practice_students'; 


    try { 
     $db = new PDO($dsn); 
     echo 'db connection success'; 
    } catch (PDOException $e) { 
     $error_message = $e->getMessage(); 
     include('database_error.php'); 
     exit(); 
    } 

?> 

と服従のページのための私のPHP:

<?php 
echo 'here '; 
    $dsn = 'mysql:host=localhost;dbname=practice_students'; 


    try { 
     $db = new PDO($dsn); 
     echo 'db connection success'; 
     $firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING, 
       FILTER_SANITIZE_SPECIAL_CHARS); 
     $lastname = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING, 
       FILTER_SANITIZE_SPECIAL_CHARS); 
     echo "Now we know your name! Hi," . " " . $firstname . " " . $lastname; 
    } catch (PDOException $e) { 
     $error_message = $e->getMessage(); 
     include('database_error.php'); 
     exit(); 
    } 
?> 

たプロンプトのすべてここで

は私のhtmlコードです私のローカルホストで正常に応答しました

here db connection successNow we know your name! Hi, Maggie Bowen 

ただし、CHECKまたはSELECT *を実行しようとすると、MySQLにエントリが表示されません。

enter image description here

enter image description here

どのように私は私のエントリを見ることができますか?私は自分の消毒剤などの改善ができることを知っていますが、私は自分のエントリーを見て、テーブルに入力する方法を知りたいだけです。ありがとうございました!

+0

'$ db = new PDO($ dsn);の後に' $ db'であなたは何をしましたか?何も見えない、または? – JustOnUnderMillions

+0

実際には、データベースを照会しようとしません。挿入、更新、選択、無し。 '$ db'が作成されて無視されます。 – aynber

+0

私はPDOの一部である$ username変数と$ password変数を取り出しましたが、そのコードを持っていて現在の両方で同じ問題がありました –

答えて

3

あなたはデータ$ firstnameと$ lastnameを持っています。今度はPDO::query()を使用してクエリを送信するデータベースにinsertを入力する必要があります。このような

何か:EDITの使用がSQLインジェクション攻撃

Wikipediaを避けるために、ステートメントを準備

$q = "INSERT INTO people (column1, column2) VALUES ('$firstname', '$lastname')"; 

$db->query($q); 

は、

プリペアドステートメントは、理由パラメータ値SQLインジェクションに対する弾力性のあると言います後に異なるプロトコルを使用して送信されるデータは、正しくエスケープする必要はありません。元の文テンプレートが外部入力から派生していない場合、SQLインジェクションは実行できません。だから、

見直さコード

$stmt = $db->prepare("INSERT INTO people (column1, column2) VALUES (:firstname, :lastname)"; 

$stmt->bindParam(':firstname', $firstname); 
$stmt->bindParam(':lastname', $lastname); 

$stmt->execute(); 

コメントからみんなに感謝!

+1

'VALUES($ firstname、$ lastname)' - ここでは整数だとは思えません。文字列は引用符で囲む必要があります。それ以外の場合は、投稿した内容が構文エラーになります。これは、あなたが書いたものが有効な構文であると考えるかもしれないQ&Aの将来の読者のためのものです。それはそうではありません。 –

+0

[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php)*** [PDO](http://php.net/manual)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学びます。 /en/pdo.prepared-statements.php)と[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使って、PDOの使用を検討してください。 http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

@ Fred-ii-そうです、ありがとう! – Jacopo

関連する問題