Используя оператор order by и оператор switch, попробуйте упорядочить таблицу в зависимости от значения, выбранного в раскрывающемся меню - PullRequest
0 голосов
/ 14 октября 2011

Я хочу использовать выпадающий список, чтобы упорядочить результат запроса. Какой бы вариант не был выбран в раскрывающемся списке, запрос будет упорядочен в порядке возрастания в соответствии с выбранным параметром. Я почти у цели, но проблема в том, что независимо от того, какой вариант я выберу из выпадающего меню, он упорядочивает таблицу только по идентификатору сеанса. Как я могу заставить другие выпадающие значения работать так, чтобы, когда они выбраны, таблица была упорядочена в зависимости от выбранного значения. Пожалуйста, внимательно ознакомьтесь с формой, switchstatment и предложением ORDER BY в запросе и, пожалуйста, помогите мне в этой проблеме.

Ниже приведен код:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>Exam Interface</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<form action="exam_interface.php" method="post" name="sessionform">        <!-- This will post the form to its own page"-->
<p>Session ID: <input type="text" name="sessionid" /></p>      <!-- Enter Session Id here-->
<p>Module Number: <input type="text" name="moduleid" /></p>      <!-- Enter Module Id here-->
<p>Teacher Username: <input type="text" name="teacherid" /></p>      <!-- Enter Teacher here-->
<p>Student Username: <input type="text" name="studentid" /></p>      <!-- Enter User Id here-->
<p>Grade: <input type="text" name="grade" /></p>      <!-- Enter Grade here-->
<p>Order Results By: <select name="order">
<option value="noorder">Don't Order Results</option>
<option value="ordersessionid">Session ID</option>
<option value="ordermoduleid">Module Number</option>
<option value="orderteacherid">Teacher Username</option>
<option value="orderstudentid">Student Username</option>
<option value="ordergrade">Grade</option>
</select>
<p><input type="submit" value="Submit" /></p>
</form>

<?php

$username="xxx";
$password="xxx";
$database="mobile_app";

mysql_connect('localhost',$username,$password);

@mysql_select_db($database) or die("Unable to select database");

$sessionid = isset ($_POST['sessionid']) ? $_POST['sessionid'] : "";
$moduleid = isset ($_POST['moduleid']) ? $_POST['moduleid'] : "";
$teacherid = isset ($_POST['teacherid']) ? $_POST['teacherid'] : "";
$studentid = isset ($_POST['studentid']) ? $_POST['studentid'] : "";
$grade = isset ($_POST['grade']) ? $_POST['grade'] : "";
$orderfield = isset ($_POST['order']) ? $_POST['order'] : 'default order field';

$sessionid = mysql_real_escape_string($sessionid);
$moduleid = mysql_real_escape_string($moduleid);
$teacherid = mysql_real_escape_string($teacherid);
$studentid = mysql_real_escape_string($studentid);
$grade = mysql_real_escape_string($grade);

$_POST['ordersessionid'] = 'gr.SessionId';

$orderfield = isset ($_POST['order']);
switch ($orderfield) {
    case 'ordersessionid': $orderfield = 'gr.SessionId';
    break;
    case 'ordermoduleid': $orderfield = 'm.ModuleId'; 
    break;
    case 'orderteacherid': $orderfield = 's.TeacherId';
    break;
    case 'orderstudentid': $orderfield = 'gr.StudentId'; 
    break;
    case 'ordergrade': $orderfield = 'gr.Grade';
    break;
}

echo $orderfield;

$result = mysql_query("SELECT * FROM Module m INNER JOIN Session s ON m.ModuleId = s.ModuleId JOIN Grade_Report gr ON s.SessionId = gr.SessionId JOIN Student st ON gr.StudentId = st.StudentId WHERE ('$sessionid' = '' OR gr.SessionId = '$sessionid') AND ('$moduleid' = '' OR m.ModuleId = '$moduleid') AND ('$teacherid' = '' OR s.TeacherId = '$teacherid') AND ('$studentid' = '' OR gr.StudentId = '$studentid') AND ('$grade' = '' OR gr.Grade = '$grade') ORDER BY {$orderfield} ASC");

$num=mysql_numrows($result);    

echo "<table border='1'>
<tr>
<th>Student Id</th>
<th>Forename</th>
<th>Session Id</th>
<th>Grade</th>
<th>Mark</th>
<th>Module</th>
<th>Teacher</th>
</tr>";

while ($row = mysql_fetch_array($result)){

 echo "<tr>";
  echo "<td>" . $row['StudentId'] . "</td>";
  echo "<td>" . $row['Forename'] . "</td>";
  echo "<td>" . $row['SessionId'] . "</td>";
  echo "<td>" . $row['Grade'] . "</td>";
  echo "<td>" . $row['Mark'] . "</td>";
  echo "<td>" . $row['ModuleName'] . "</td>";
  echo "<td>" . $row['TeacherId'] . "</td>";
  echo "</tr>";
}

echo "</table>";

mysql_close();


 ?>

</body>
</html>

Большое спасибо и, пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 14 октября 2011

Эта строка является вашей проблемой:

$orderfield = isset ($_POST['order']);

Вы устанавливаете переменную, которую вы включаете, в значение true или false.

0 голосов
/ 14 октября 2011

вы столкнулись с какой-то проблемой из-за вашего кода только ..:)

$orderfield = isset ($_POST['order']); // Replace this line with below code ;


$orderfield = "";
if(isset($_POST['order'])){

    $orderfield = $_POST['order'];
}

Просто попробуйте этот код ... я думаю, что вы избавитесь от проблемы.

Спасибо.

0 голосов
/ 14 октября 2011

Это происходит потому, что вы определяете $orderfield как isset ($_POST['order']). isset() возвращает логическое значение; он не возвращает значение своего аргумента, даже если переменная, используемая в качестве аргумента, фактически определена. Если вы измените эту строку, чтобы она больше походила на другие строки, включающие isset(), вы заставите ее работать.

$orderfield = isset ($_POST['order']) ? $_POST['order'] : "";

В целях безопасности я рекомендую два дополнительных шага:

  • добавьте к вашему переключателю регистр default, если отправленное поле order не является одним из ожидаемых значений
  • используйте в запросе именованную переменную, отличную от той, которая использовалась для хранения значения POST, чтобы убедиться, что содержимое, введенное в запрос, является только содержимым, которое вы обработали или создали самостоятельно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...