0

スクリプトでこの問題を解決してください。INSERTクエリの時点で、$ article_idは0を返しますが、実際には0(1、2、3)ではない値です。

コードのさまざまなポイントでエコーアウトしようとしました$article_idが、実際には必要なものがエコーアウトされました。しかし、一度エコーしようとすると、 isset($_POST['submit'])何もエコーされません。

MySQLテーブルで宣言したタイプも確認しました....int。ただし、データベースに0を挿入します。

問題はどこにあるのでしょうか?

お手数をおかけしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。

$page_name = 'about'; 
$id = "";
if (isset($_GET['id'])) 
{
    $id = $_GET['id'];  
    $past1 = mysql_query("SELECT *
                          FROM about
                          WHERE about_id =  '".$id."' "); 
    $row = mysql_fetch_array($past1);

    echo "<p>" .$row['about_head']."</p>";      
    echo   $row['about_content'];  

    $article_id = $row['about_id'] ;  

    $query6 = mysql_query("SELECT c.comment_body, c.comment_date
                           FROM comment AS c
                           INNER JOIN about AS ac ON c.article_id = ac.about_id
                           WHERE   c.article_id =  '".$article_id."'
                           AND page_name = '".page_name."'");

   while ($comment = mysql_fetch_assoc($query6)) 
   {
       echo "<b>Comment:</b> " . $comment['comment_body'] . "<br/>" ;           
       echo "<b>Date of Comment:</b> " . $comment['comment_date'];
       echo "<br/>" ;      
       echo "</div>";  

    }   
}                                          

if (isset($_POST['submit'])) 
{      
    $comment_body = mysql_real_escape_string($_POST['comment_body']);
    if (($comment_body == "")  
    {
        echo "<div class=\"error\" >" ;  
        echo "One/More Empty Field"; 
        echo "</div>";   

    } 
    else 
    { 
        $query = "INSERT INTO comment (comment_id, article_id, username, page_name,
                                       comment_body, comment_date)              
                  VALUES (NULL, '".$article_id."', '".$_SESSION['logged_username']."',
                          '".$page_name."', '".$comment_body."', NOW())";
        mysql_query($query);          

    } 
} 
4

2 に答える 2

0

表示される0は、SQLで文字列としてキャストされたときに0として表される初期化されていない変数のPHPNULLです。

最初のロードでを取得し、$_GET['id']別のページのロードでPOSTを実行すると仮定すると、は$article_id最初にのみ初期化されます。が設定されていない限り、データは入力されません$_GET['id']。したがって、$_SESSION最初のロードで保存し、POSTを処理するときにそこからアクセスします。

 // Inside if (isset($_GET['id']))...
 // article_id is retrieved and populated from the first SELECT statement...
 $article_id = $row['about_id'] ;
 // Store it in $_SESSION  (assume session_start() was called somewhere we don't see)
 $_SESSION['article_id'] = $article_id;

クエリの後半で、次の場所から取得します$_SESSION

 $query = "INSERT INTO comment (comment_id, article_id, username, page_name,
                                   comment_body, comment_date)              
              VALUES (NULL, '".$_SESSION['article_id']."', '".$_SESSION['logged_username']."',
                      '".$page_name."', '".$comment_body."', NOW())";

コメントによると、あなたはすでにSQLインジェクションの脆弱性を認識しているようです。それらを見落とさないように注意してください。後で戻って適切なエスケープと境界チェックを入力するのではなく、進行中にそれらに対してコーディングすることが重要です。

于 2012-05-07T17:31:28.787 に答える
0

コードが今機能するかどうかを確認し、さらに役に立たない場合はコメントを残してください。

<?php
$page_name = 'about';
$id = "";
if (isset($_GET['id']))
{
  $id = $_GET['id'];
  $past1 = mysql_query("SELECT *
          FROM about
          WHERE about_id =  '".$id."' ");
  $row = mysql_fetch_array($past1);

  echo "<p>" .$row['about_head']."</p>";
  echo   $row['about_content'];

  $article_id = $row['about_id'] ;
  /* next line is for debugging, check if you got
  your $article_id variable populates with a value */
  echo "<p>My article_id var value is:" .$article_id."</p>";

  $query6 = mysql_query("SELECT c.comment_body, c.comment_date
           FROM comment AS c
           INNER JOIN about AS ac ON c.article_id = ac.about_id
           WHERE   c.article_id =  '".$article_id."'
           AND page_name = '".page_name."'");

  while ($comment = mysql_fetch_assoc($query6)) {
    echo "<b>Comment:</b> " . $comment['comment_body'] . "<br/>" ;
    echo "<b>Date of Comment:</b> " . $comment['comment_date'];
    echo "<br/>" ;
    echo "</div>";
  }
  /* I've moved the if POST here since the insertion is based
  on the existance of $article_id */
  if (isset($_POST['submit'])) {
    $comment_body = mysql_real_escape_string($_POST['comment_body']);
    if ($comment_body == "") { // here you had a sintax error, one more (: if (($comment_body == "") {
    echo "<div class=\"error\" >" ;
    echo "One/More Empty Field";
    echo "</div>";

    } else {
      $query = "INSERT INTO comment (comment_id, article_id, username, page_name,
                             comment_body, comment_date)
        VALUES (NULL, '".$article_id."', '".$_SESSION['logged_username']."',
                '".$page_name."', '".$comment_body."', NOW())";
      mysql_query($query);

    }
  }
}
于 2012-05-07T17:32:28.700 に答える