新しい行をテーブルに挿入しようとしたときにDatabase query failed
エラーが発生します。このテーブル(pages
)には、別のテーブル(subjects
)を参照するカラム(subject_id
)があります。私はsubject_id
の値をURLから渡しており、フォームに正しく渡されます。すべての値は、PHPを使用してフォーム上で正しく渡されるようですが、行を挿入しようとするとエラーが発生します。フォームはそれ自体に送信されます。テーブルに行を挿入するときにデータベースクエリに失敗しました。
select_all_pages_by_subject($sid)
は、現在の件名(URLから渡されたもの)からすべての行(pages
)を選択する機能です。位置フィールドには問題ありません。
このエラーは、おそらく私のコードのどこかでMySQLの構文エラーであると思われますが、私はまだそれを理解できないようです。私はいくつかの助けに感謝します。ありがとうございました。
は、ここに私のコードです:
<div class="body_content">
<?php
$sid = null;
if(isset($_GET["subject"])) {
$sid = $_GET["subject"];
}
?>
<form action="create_page.php" method="post">
Menu Name: <input type="text" name="menu" /> <br>
Position: <select name="position">
<?php
$new_page_query = select_all_pages_by_subject($sid);
$page_count = mysqli_num_rows($new_page_query);
for($count=1; $count<=($page_count + 1); $count++) {
echo "<option value=\"$count\">$count</option>";
}
?>
</select> <br>
Visible:<br>
No <input type="radio" name="visible" value="0" />
Yes <input type="radio" name="visible" value="1" /> <br>
Subject ID: <input type="text" name="subject_id" value="<?php echo $sid; ?>" /> <br>
Content: <br>
<textarea rows="5" cols="40" name="content"></textarea> <br>
<input type="submit" value="Create Page" name="submit" /> <br>
<a href="admin.php">Cancel</a> <br>
</form>
<?php
if(isset($_POST['submit'])) {
$menu_name = $_POST["menu"];
$position = (int) $_POST["position"];
$visible = (int) $_POST["visible"];
$content = $_POST["content"];
$subject_id = (int) $_POST["$sid"];
$insert_query = "INSERT INTO pages (subject_id, menu_name, position,
visible, content) VALUES ({$subject_id},'{$menu_name}', {$position},
{$visible}, '{content}')";
$page_insert = mysqli_query($connection, $insert_query);
if($page_insert) {
$_SESSION["message"] = "Page created successfully";
redirect_to("admin.php");
} else {
$_SESSION["message"] = "Page creation failed";
redirect_to("create_page.php?subject=$sid");
}
}
?>
</div>
編集:問題はINSERT
が後WHERE
を持つことができないでWHERE文の
実際のエラーはどうしてですか? –
[Little Bobby](http://bobby-tables.com/)は*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php)*** [MySQLi](http://php.net/manual)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学びます。 /en/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –
'どこで' INSERTすることはできません。あなたは 'UPDATE ... WHERE'を探しています – aynber