1

こんにちは私はソフトウェアのダウンロードサイトを構築しています。ドロップダウンメニューからソフトウェアを並べ替える必要があります。AJAXを使用してデータを並べ替えるためのw3Schoolsの例(ここを参照)を実行し、要件に応じていくつかの変更を加えましたが、カテゴリを選択してデータを並べ替えると、正しく機能しません。並べ替えに選択したカテゴリごとに並べ替えずに、データベースのデータ全体を表示します。

私が間違っていること

助けてください。

HTML

    <form>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="id">id</option>
<option value="title">title</option>
<option value="image">image</option>
<option value="description">description</option>
<option value="description">rating</option>
<option value="download">download</option>
<option value="buy">buy</option>
</select>
</form>
<br />
<div id="txtHint">content</div>   

Javascript(AJAX)

    <script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}

PHP

    <?php
$q=$_GET["q"];

$con = mysql_connect('localhost', 'root', '');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("security_software", $con);

$sql="SELECT * FROM internet_security ORDER by '".$q."' DESC" ;


$result = mysql_query($sql);

echo "<table border='1'>
<tr>
<th>id</th>
<th>title</th>
<th>image</th>
<th>description</th>
<th>rating</th>
<th>download</th>
<th>buy</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['id'] . "</td>";
  echo "<td>" . $row['title'] . "</td>";
  echo "<td>" . $row['image'] . "</td>";
  echo "<td>" . $row['description'] . "</td>";
  echo "<td>" . $row['rating'] . "</td>";
  echo "<td>" . $row['download'] . "</td>";
  echo "<td>" . $row['buy'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?> 
4

2 に答える 2

2

ORDER BY句で一重引用符を使用しているため、PHPが機能しません。文字列を渡すため、指定されたフィールドで並べ替えることはできません。

バックティックを試してください:

$sql="SELECT * FROM internet_security ORDER by `".$q."` DESC" ;

また、order by句に値のホワイトリストを使用することをお勧めします。これはフィールド名であり、(real_escapeを経由した場合でも)そこに文字列を許可したくないためです。可能な値の配列を設定し、それらのみを許可します。

于 2012-05-14T17:01:32.757 に答える
1

mysql_fetch_array()の代わりにmysql_fetch_assoc()を使用してみてください。

それが失敗した場合は、$ resultが値を保持している場合はそれを出力してみてください。次に、mysql_num_rowsを使用して、クエリが正しく実行されているかどうかを確認してください。

私があなたのコードのすべてを見ることができるのは正しいですが、私の脳はコンパイラではないので、エラーを適切にトラップするのが最善です。:)

于 2012-05-14T17:00:05.737 に答える