0

このページにアクセスするたびに、次のように表示されます。SQL構文にエラーがあります。1行目の''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

2番目のwhileループと関係があります

<html>
<body>
<?php
mysql_connect("mysql.1freehosting.com", "u533288591_sdc", "mypass") or die(mysql_error());
mysql_select_db("u533288591_sdc");
$name = $_POST['name'];
$probably_needed = "questions";
$grade = $_POST['class'] ;
$answers ="answers" ;
$query = mysql_query("SELECT * FROM $probably_needed ") or die(mysql_error()); 
$otherquery = mysql_query("select * from $ANSWERS ") or die (mysql_error()) ;

while($row = mysql_fetch_array($query)){
echo "<a href=\"answer.php?name=" . $name .  "&subject=" . $row['Subject'] .  "&grade=" . $grade . "\">" . $row['Subject'] ."</a>" ;
    while($answerrow = mysql_fetch_array($otherquery)){
        if ($answerrow['name'] == $name){
            if ($answerrow['subject'] == $row['Subject']){
                echo "success" ;
                }
          }
      }

}
?>

</body>
</html>
4

4 に答える 4

2

A. php$answersではありません$ANSWERS

フォーム PHP ドキュメント

PHP の変数は、ドル記号の後に変数名が続く形で表されます。変数名は大文字と小文字が区別されます。

試す

$answers ="answers" ;
mysqli_query($link,sprintf("Select * from %s",$answers));


B. PHP Doc から mysql_query

推奨される代替 この拡張機能の使用はお勧めできません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。詳細については、MySQL: API ガイドの選択および関連する FAQ も参照してください。この機能の代替手段は次のとおりです。

mysqliまたはにアップグレードする必要がありますPDO


C. コードに XSS インジェクションの欠陥があるため、使用する必要がありますfilter_var

あなたのコードはどのように見えるべきだと思いますか

$mysqli = new mysqli("mysql.1freehosting.com", "u533288591_sdc", "mypass", "u533288591_sdc");

$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$grade = filter_var($_POST['class'],FILTER_SANITIZE_STRING);

$tableQuestion = "questions"; // not sure where this would come from
$tableAnswer = "answers";

$resultQuestion = $mysqli->query(sprintf("SELECT * FROM  `%s`", $tableQuestion));
$resultAnswer = $mysqli->query(sprintf("SELECT * FROM  `%s`", $tableAnswer));

$template = "<a href=\"answer.php?name=%s&subject=%s&grade=%s\">%s</a>";

while ( $rowQuestion = $resultQuestion->fetch_assoc() ) {
    printf($resultAnswer, $name, $rowQuestion['Subject'], $grade, $rowQuestion['Subject']);
    while ( $rowAnswer = $resultAnswer->fetch_assoc() ) {
        if ($rowAnswer['name'] == $name && $rowAnswer['subject'] == $rowQuestion['Subject']) {
            echo "success";
        }

    }
}
于 2012-09-30T15:46:39.527 に答える
1

PHP の変数名は、大文字と小文字が区別されます。

以下を定義します$answers ="answers"

しかし使う"select * from $ANSWERS "

$answers は $ANSWERS ではありません

于 2012-09-30T15:47:12.850 に答える
0

変数をバックティックでラップします。lowercaseあなたの変数$ANSWERS

SELECT * FROM `$probably_needed` 
select * from `$answers`

PHPでは大文字と小文字が区別されます。

于 2012-09-30T15:44:55.267 に答える
0

私が間違っているかもしれませんが、そうする必要があります:

$queryText1 = "SELECT * FROM " + $probably_needed;
$queryText1 = "SELECT * FROM " + $ANSWERS;
$query = mysql_query($queryText1) or die(mysql_error()); 
$otherquery = mysql_query($queryText1) or die (mysql_error()) ;

つまり、文字列と変数を連結する必要があります。

于 2012-09-30T15:47:46.320 に答える