2013-06-18 2 views
2

나를 도와 줄 수있는 추가 정보가 필요하면 알려주십시오. 그러나 프로젝트는 암호로 보호해야합니다.질의 응답 없음

완성되지 않은 프로젝트의이 섹션에 코드 조각이 있기 때문에 나는 지금 당황하고 있습니다. 이 문제를 해결하는 데 도움이 될만한 조언을 찾고 있습니다.

나는 '제정신'결과를 얻지 못하고 있으며, 같은 일을 두 번하고 다른 결과를 얻고 있습니다. 두 코드 모두 SAME 질문에 대한 모든 답을 성공적으로 반환하지만 그 중 하나는 정확한 코드 블록 내에서 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++; 
} 

아무도 아이디어가 어디서부터 시작해야합니까? 나는 완전히 뒤죽박죽이다.

+0

두 번째의 첫 번째 쿼리'$ permID'에서'$ permidNum'? –

+0

그들은 실제로는 같은 값이며 다른 이름입니다. 그것들은 코드의 다른 부분에 있었기 때문에 곧 변환 할 것입니다. –

+0

백틱 (')은 거꾸로 된 쉼표 (')와 동일하지 않습니다. – Strawberry

답변

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과 함께 prepared statements을 배우고 사용하십시오. Mysql_ * 확장은 더 이상 사용되지 않습니다.

+0

구문은 두 방법 중 하나를 허용합니다. 나는 이것을 위해서 추가로 시도해 보았습니다. 또한 나는 그들에 대해 더 이상 사용되지 않는 것을 알고 있으며, mysqli를 선호합니다. 다른 형식으로이 코드를 너무 많이 사용하고 있습니다. 그리고 나는 그것을 모두 한 번에 변환 할 것입니다. 기능적 차이는 없어야합니다. 그런 언급이없는 한. –

+3

_ "이 구문은 두 가지 방법 중 하나를 허용합니다"_ - 예. 그러나 효과는 완전히 다릅니다. – CBroe

+0

효과는 어떻게 다른가요? 설명해 주시겠습니까? 나는 항상 물건들을 따옴표에 넣었고, 시험하는 동안 따옴표를 먼저 지워서 그것이 차이를 일으키고 그것들을 바꾸는 것을 잊었는지보기 위해 보았다. –

0

I 조언 당신이 당신의 스타일을 변경 쿼리 또는 문자열 내부의 PHP 변수를 사용하는 동안이

$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 />"; 

} 
+0

이것은 원래 peterm이 말한 것과 같은 이유로 작동했는데, 나는 그와 논쟁하는 것이 잘못되었다. :) –

+0

맞아, 나는 스타일 차이에 대해서만 이야기하고있다.) mysql_fetch_assoc를 사용하면 편안하다. –

0

를 사용하여 문자열과 변수 연결 방법을 사용하려고합니다. 'ORDERBY'이후에 따옴표는 필요하지 않습니다. 주의해야합니다.이 변경 사항은 여기에서 도움이 될 수 있습니다.

변화 쿼리 :.

$ 쿼리 1 =이 $ permIDNum "ST_Answers referencingQuestionID = 'SELECT * FROM"." 'ORDER BY permanentAnsNumber';

0

Peterm이 명시한대로이 코드에서는 'ORDER BY'지정자를 따옴표로 묶을 수 없습니다. 상위 코드 조각뿐만 아니라이 코드 조각에서 고정되면 모든 것이 올바르게 표시됩니다.