2017-07-12 9 views
0

私はローカルMYSQLデータベースにユーザ情報を提出する簡単なHTMLフォームを作成しようとしています。実行しようとすると "Can not POST/test/addperson.php"と表示されます。私は周りに投稿された他の多くのソリューションを試しましたが、どれもうまくいかないようです。HTMLフォームからPHP POSTエラーを取得する

HTML

<!DOCTYPE html> 

<html> 
    <body> 
     <h2>User Database</h2> 
     <br> 
     <form action="test/addperson.php" method="post"> 
      <p>First Name: </p> 
      <input type="text" name="first_name"> 
      <p>Last Name: </p> 
      <input type="text" name="last_name"><br> 
      <input type="submit" name="submit"> 
     </form> 
    </body> 
</html> 

PHP

<?php 
$connect = mysql_connect("localhost:3306","root", "password"); 

if(!connect){ 
    die('Connection Failed: ' . mysql_error()); 
} 

mysql_select_db("Users", $connect); 

$user_info = "INSERT INTO employees (first_name, last_name) VALUES ('$_POST[first_name]', '$_POST[last_name]')"; 

if(!sql_query($user_info, $connect)){ 
    die('Error' . mysql_error()); 
} 

echo "Your information was added to the database."; 

mysql_close($connect); 

?> 
+4

*** [mysql_ *関数の使用をやめる](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)*** [これらの拡張機能] (http://php.net/manual/en/migration70.removed-exts-sapis.php)がPHP 7で削除されました。[prepared](http://en.wikipedia.org/wiki/Prepared_statement)について学んでください。ステートメントfo r [PDO](http://php.net/manual/en/pdo.prepared-statements.php)および[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements。 php)、PDOの使用を検討してください。(これは本当に簡単です)(http://jayblanchard.net/demystifying_php_pdo.html)。 –

+3

[Little Bobby](http://bobby-tables.com/)は*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-in-php)***。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+2

* POSTができません/テスト/ addperson.php*ファイルはどこにありますか?エラーログで追加情報を確認しましたか? –

答えて

0

このように準備されたステートメントを使用します。セキュリティ上の理由から、MYSQL_関数を使用しないでください。 単純なページの場合は、このコードを使用してください。ただ1つのPHPページを作成し、次のコードを貼り付けてください。あなたはあなたのコードビットを変更し、INSERTクエリに引用符を追加する必要が

<?php 

$servername = "yourservername"; 
$username = "root"; 
$password = "yourpassword"; 

try 
    { 
    $conn = new PDO("mysql:host=$servername;dbname=yourdatabse", 
    $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $e) 
    { 
     echo "Connection failed: " . $e->getMessage(); 
    } 

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 

    $first_name=$_POST['first_name']; 
    $last_name=$_POST['last_name']; 

    //a little protection 
    $first_name=htmlentities($first_name, ENT_QUOTES | ENT_HTML5, 
    $encoding = 'UTF-8'); 

    $last_name=htmlentities($last_name, ENT_QUOTES | ENT_HTML5, 
    $encoding = 'UTF-8'); 

    //save to database 
    $query = 'INSERT INTO employees (first_name, last_name) VALUES 
    (:name,:lastname)'; 

    $st=$conn->prepare($query); 
    $st->bindParam(':name', $first_name); 
    $st->bindParam(':lastname', $last_name); 
    $st->execute(); 
    $st->CloseCursor(); 
    $st=null; 
} 
?> 

<!DOCTYPE html> 
     <html> 
      <body> 
        <h2>User Database</h2> <br> 
        <form action="" method="post"> 
         <p>First Name: </p> 
         <input type="text" name="first_name"> 
         <p>Last Name: </p> 
         <input type="text" name="last_name"><br> 
         <input type="submit" name="submit"> 
        </form> 
      </body> 
     </html> 
0

:などプリペアドステートメント、

$user_info = "INSERT INTO employees (first_name, last_name) VALUES ('".$_POST['first_name']."', '".$_POST['last_name']."')"; 

が、他の人のようにこれを行うには良い方法があると述べている

関連する問題