2017-02-17 14 views
-1

申し訳ありませんが、これは非常に基本的ですが、私はしばらくの間、円で回ってきました。私はPHPを初めて使っていますが、ドキュメンテーションのどれも助けにならないと思われます。PHPとMySQLiを使用して可変フォームデータを挿入

私はユーザー入力を受け取り、データベースにレコードを作成する単純なフォームを作成しようとしていますが、私が持っているコードは提供された変数を認識していないようです。代わりに文字列を使用すると、挿入操作が完了するので、接続に問題はないことがわかります。

エラーメッセージは表示されません。何も起こっていないかのようにページがリフレッシュされます。

<form action="" method="post"> 
    <input type="text" name="new_word" id="word" required="required"/> 
    <input type="text" name="book_ref" id="book" required="required"/> 
    <input type="text" name="page_range" id="page" required="required"/> 
    <input type="submit" value="Submit" name="submit"/> 
</form> 
<?php 
if(isset($_POST["submit"])){ 
    $servername = "localhost"; 
    $username = "user"; 
    $password = "pass"; 
    $dbname = "database"; 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) 
VALUES (?,?,?)"); 
    $stmt->bind_param(1, $word); 
    $stmt->bind_param(2, $book); 
    $stmt->bind_param(3, $page); 
    $word = $_POST["new_word"]; 
    $book = $_POST["book_ref"]; 
    $page = $_POST["page_range"]; 
    $stmt->execute(); 
    $conn->close(); 
} 
?> 
+0

に変更することができます。 '$ stmt'の前に' $ word'などの変数を入れてください –

+0

この条件の後で$ word、$ book、$ pageという変数を定義する必要がありますif(isset($ post ["submit"])){ –

答えて

0

試してみてください:それは余分の変数を作成せずに各要素を挿入します、そしてそれはそう以来

$stmt->bind_param('sss', $_POST['new_word'], $_POST['book_ref'], $_POST['page_range']);

をすべてのPOSTコンテンツはテキストフィールドに由来し、すべてが文字列です。数字のみの場合は、対応するsd

+0

ああ!はい!それがそれでした。なぜそれがそれをしたのかわかりませんが、それはそれをしました。ありがとうございました! – Luke

2

変数を使用する前に定義する必要があります。

あなたのコードは次のようになります。

$word = $_POST["new_word"]; 
$book = $_POST["book_ref"]; 
$page = $_POST["page_range"]; 

$stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) 
VALUES (?,?,?)"); 
$stmt->bind_param("sss", $word, $book, $name); 
$stmt->execute(); 
$conn->close(); 
+0

あなたは ' $ stmt-> bind_param( "sss"、$ word、$ book、$ name); 'ちょうど' $ stmt-> execute([$ word、$ book、$ name]); '人生を少しシンプルにする^ _^ – Option

+1

@Option良いアイデア、私は私の答えにこれを追加しました。 –

+0

@Option 2つの方法のうち、SQLインジェクションの方が安全か、どちらも同じですか? –

0

あなたが最初に値を代入し、それらを使用する必要があります。

$word = $_POST["new_word"]; 
$book = $_POST["book_ref"]; 
$page = $_POST["page_range"];  

$stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) 
VALUES (?,?,?)"); 
$stmt->bind_param(1, $word); 
$stmt->bind_param(2, $book); 
$stmt->bind_param(3, $page); 



$stmt->execute(); 

$conn->close(); 
0

あなたはこのようにそれを書いていないのはなぜこの

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<input type="text" name="new_word" id="word" required="required"/> 
<input type="text" name="book_ref" id="book" required="required"/> 
<input type="text" name="page_range" id="page" required="required"/> 
<input type="submit" value="Submit" name="submit"/> 
</form> 

<?php 
if(isset($_POST["submit"])){ 
    $servername = "localhost"; 
    $username = "user"; 
    $password = "pass"; 
    $dbname = "database"; 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
    } 
$word = $_POST["new_word"]; 
$book = $_POST["book_ref"]; 
$page = $_POST["page_range"]; 
$stmt = $conn->prepare("INSERT INTO `words` (`Word`, `Book ID`, `Page`) VALUES (?,?,?)"); 
$stmt->bind_param(1, $word); 
$stmt->bind_param(2, $book); 
$stmt->bind_param(3, $page); 
$stmt->execute(); 
$conn->close(); 
} 
?> 
関連する問題