2

如果您需要任何其他信息来帮助我,请告诉我。不过,该项目需要密码保护。

我现在完全感到困惑,因为我在一个未完成项目的这一部分中有一段正常运行的代码,或者我是这么认为的。我正在寻找有助于解决此问题的所有建议。

我没有得到一个“理智”的结果,我做了两次同样的事情并得到了不同的结果。两段代码都成功返回了相同问题的所有答案,但其中一段在确切的代码块中按 17、18、19、16 的顺序显示它们,而第二段在代码块中显示 16、17、18、19正确的顺序。

在第二段代码中,它是给定问题和与之相关的所有答案的更详细视图的一部分(只是第一个代码的更详细视图),编辑功能将编辑正确的代码,但删除复选框失败并删除错误的项目。这种模式也与故障代码的视觉顺序不一致,而且显得非常随机。这可能是相同或不同的问题,我正在调查这个问题。

如下两段代码,其中一段显示问题所有答案的数据行:

    $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++;
    }

第二段代码使用 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演示。

附带说明:通过PDOMySQLi学习和使用 准备好的语句。不推荐使用 Mysql_* 扩展名。

于 2013-06-18T09:11:13.700 回答
0

我建议你改变你的风格,尝试使用这个

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

while($row = mysql_fetch_assoc($result2)) {

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

}
于 2013-06-18T09:18:16.097 回答
0

尝试在查询或字符串中使用 php 变量时使用字符串和变量连接方法。'ORDERBY' 后不需要引号。也要注意这一点。这些更改可能会对您有所帮助。

更改查询:

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

于 2013-06-18T09:24:59.383 回答
0

正如 Peterm 所说,您不能在此代码中的 'ORDER BY' 说明符周围加上引号。一旦在这段代码以及更高的父代码段中修复,一切都会正确显示。

于 2013-06-18T09:44:00.580 回答