2

あなたが私を助けるのに役立つ追加情報が必要な場合は、私に知らせてください. ただし、プロジェクトはパスワードで保護する必要があります。

未完成のプロジェクトのこのセクションに機能するコードがあるため、現時点では完全に困惑しています。この問題の解決に役立つあらゆるアドバイスを探しています。

「正常な」結果が得られません。同じことを 2 回行って、異なる結果を得ています。両方のコードは、同じ質問に対するすべての回答を正常に返しますが、そのうちの 1 つはコードの正確なブロック内で 17、18、19、16 の順序でそれらを表示していますが、2 番目のコードは 16、17、18、19 を表示しています。適切な順序。

与えられた質問とそれに関連するすべての回答のより詳細なビュー (最初のコードのより詳細なビュー) の一部であるコードの 2 番目の部分でも、編集関数は正しいコードを編集しますが、削除チェック ボックスが失敗し、間違ったアイテムを削除します。このパターンは、誤動作しているコードの視覚的な順序とも一致せず、非常にランダムに見えます。これは同じ問題または別の問題である可能性があり、調査中です。

次の 2 つのコード セクションでは、セクションの 1 つは、質問に対するすべての回答のデータの行を表示しています。

    $query2 = "SELECT * FROM ST_Answers
    WHERE referencingQuestionID = '$permIDNum'
    ORDER BY 'permanentAnsNumber'";
    $result2 = mysql_query($query2);
    $ret = "";
    $letter = "a";

    $ret .= "<div class='lq answerListItem'>";
    $ret .= "<span class='lqh2 answerNumber'> &nbsp; </span>";
    $ret .= "<span class='lqh2 answerTextBody'>Answer Text Body</span>";
    $ret .= "<span class='lqh2 answerSummaryText'>Answer Summary Text</span>";
    $ret .= "<span class='lqh2 answerNextQuestion'>Next Q#</span>";
    $ret .= "<span class='lqh2 correct'>Correct?</span>";
    $ret .= "</div>";


    $i = 0;
    $n = mysql_numrows($result2);
    while( $i < $n ){
            $permAID = mysql_result($result2,$i,"permanentAnsNumber");
        $aText = mysql_result($result2,$i,"answerTextBody");
        $aSummary = mysql_result($result2,$i,"answerSummaryText");
        $nextQID = mysql_result($result2,$i,"nextQuestionID");
        $correctA = mysql_result($result2,$i,"correctAnswer");

        $ret .= "<div class='lq answerListItem'>";
        if($letter != "a") { $ret .= "<br/>"; }
        $ret .= "<span class='lq answerNumber'> &nbsp; </span>";
            $ret .= "<span class='lq answerTextBody'>" . $letter . ") $aText </span>";
        $ret .= "<span class='lq answerSummaryText'>" . $aSummary . "</span>";
        $ret .= "<span class='lq answerNextQuestion'>" . $nextQID . "</span>";
        $ret .= "<span class='lq correct'>" . $correctA . "</span>";
        $letter++;
        $ret .= "</div>";
        $i++;
    }

この 2 番目のコードは、同じデータを表示していますが、SAME クエリをもう少し使用していますが、アイテムを順不同で表示するのではなく、正しい順序で正しく表示していますが、コードはほとんど同じです!

$query2 = "SELECT * FROM ST_Answers
    WHERE referencingQuestionID='$permID' 
    ORDER BY 'permanentAnsNumber'";
$result2 = mysql_query($query2);
$ret .= "<div id='answerContainer'><h3>Associated Answers: </h3>";

$i = 0;
$n = mysql_numrows($result2);
// NOTE: This is displaying everything in correct order
// TODO: Reference this
while( $i < $n ){
        $permAID = mysql_result($result2,$i,"permanentAnsNumber");
    $aText = mysql_result($result2,$i,"answerTextBody");
    $aSummary = mysql_result($result2,$i,"answerSummaryText");
    $nextQID = mysql_result($result2,$i,"nextQuestionID");
    $correctA = mysql_result($result2,$i,"correctAnswer");

    $ret .= "<div class='answerRow'>";
        $ret .= "<span class='perAID'>" . "<h5>Answer ID(Warning do not change):<textarea rows='1' cols='4' name='ids[]'>" . $permAID . "</textarea></span></h5>";
        $ret .= "<span class='aText'>" . "Answer Text: <br /><textarea name='aTxt[]' rows='5' cols='40'>" . $aText . "</textarea></span><br />";
        $ret .= "<span class='aSummary'>" . "Answer Summary: <br /><textarea name='aSum[]' rows='5' cols='40'>" . $aSummary . "</textarea></span><br />";
        $ret .= "<span class='nextQID'>Question this leads to: <textarea name='nxtQID[]' rows='1' cols='4'>" . $nextQID . "</textarea></span><br />";
        $ret .= "<span class='correctA'>" . "Answer point value: <textarea name='ansCorrect[]' rows='1' cols='2'>" . $correctA . "</textarea></span><br />";
        $ret .= "<span class='del'><h6>Delete? <input type='checkbox' name='delete[]'></h6></span><br />";
    $ret .= "</div><br />";

    $i++;
}

どこから始めればよいかについて、誰かアイデアはありますか? 私は完全に困惑しています。

4

4 に答える 4

3

問題は、列名を引用符で囲んでいることです。このように定数リテラル文字列を導入するORDER BYと、結果セットの順序付けが効果的に排除されます。

変化する

$query2 = "SELECT * FROM ST_Answers WHERE referencingQuestionID = '$permIDNum' 
           ORDER BY 'permanentAnsNumber'";
                    ^                  ^

$query2 = "SELECT * FROM ST_Answers WHERE referencingQuestionID = '$permIDNum' 
           ORDER BY permanentAnsNumber";

これがSQLFiddle のデモです。

余談ですが、 PDOまたはMySQLiでプリペアド ステートメントを学習して使用 してください。Mysql_* 拡張機能は非推奨です。

于 2013-06-18T09:11:13.700 に答える
0

クエリまたは文字列内で php 変数を使用しようとするときは、文字列と変数の連結メソッドを使用してください。「ORDERBY」の後に引用符は必要ありません。それも気をつけてください..この変更はここであなたを助けるかもしれません.

クエリを変更します:

$query2 = "SELECT * FROM ST_Answers WHERE referencingQuestionID = '".$permIDNum."' ORDER BY PermanentAnsNumber";

于 2013-06-18T09:24:59.383 に答える