2017-11-13 16 views
-2

新しい行をテーブルに挿入しようとしたときに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文の

+0

実際のエラーはどうしてですか? –

+1

[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)でも安全ではありません! –

+2

'どこで' INSERTすることはできません。あなたは 'UPDATE ... WHERE'を探しています – aynber

答えて

1

を削除しました。

$insert_query = "INSERT INTO pages (subject_id, menu_name, position, visible, content) VALUES ({$subject_id},'{$menu_name}', {$position}, {$visible}, '{content}')"; 
+1

質問や回答に不適切な書式を使用しないでください。 –

+0

私はちょうどクエリの "どこ"部分を削除しました。私はまだ "デ​​ータベースクエリが失敗しました"エラーを受け取ります –

+1

質問の下に示唆されるように、@ITProManagerを報告している実際のエラーを使用してください。 –

-1

だから、いくつかのトラブルシューティングの後、私は2つの異なるページにフォームとフォーム処理を分離することを決定し、その後、私は、フォームアクションで、問題を認識し、私だったので、私はURLで対象のIDを指定していませんでしたURLからIDを渡す:

<form action="create_page.php" method="post">

should be:

<form action="create_page.php?subject=<?php echo $sid; ?>" method="post"> 

編集:私も気づいています「データベースクエリが失敗しました」というエラーが、「フォーム」フィールドで呼び出されていました。ここでは、「ページ」テーブルでデータベース接続を作成して行数を取得していました。したがって、URLからの件名IDがないためにinsertステートメントが失敗した場合、phpはそのページを位置フォームフィールドよりも処理せず、フィールドでエラーを呼び出して実行を停止しました。挿入クエリが失敗すると、フォームの一部が画面に表示されます(メニュー名フィールドと位置フィールドのみが空の値で表示されます)。エラーのソースコードを表示しようとしたときに、ページが再度読み込まれるように要求されました(無限ループ実行または何かのように感じました)

関連する問題