Allahu Akbar
Allahu Akbar

Reputation: 29

PHP sort table when submit button is clicked

I want to be able to sort my table as ASC in a field when the submit button is clicked.

I have used an array function to get the information from a SQL database, I have tried making a sort function but when I click 'submit' nothing happens.

This is my attempt of creating the submit button:

 <h1> Courses </h1>
<form name="Table Properties" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Order by Week
<button type="submit" name="week" class="button" <?php echo $value='1'; ?>"> Sort Week </button>
</form>
<?php 
if(isset($_POST['week'])){
        $query="SELECT * FROM `classes` ORDER BY `classes`.`week` ASC";
   }

When I click submit the table remains the same.

Here is my table connect information

$con = mysql_connect("host", "username", "password");
if (!$con) 
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("username", $con);
$sql = "SELECT * FROM `classes`";
$myData = mysql_query($sql, $con);
echo "<table border=1>
<tr>
<th> Name 1 </th>
<th> Name 2 </th>
<th> Name 3 </th>
<th> Name 4 </th>
</tr>";
while ($record = mysql_fetch_array($myData)){
    echo "<tr>";
    echo"<td>" . $record['name 1'] . "</td>";
    echo"<td>" . $record['week'] . "</td>";
    echo"<td>" . $record['name 3'] . "</td>";
    echo"<td>" . $record['name 4'] . "</td>";
    echo "</tr>";
}
echo "</table>";
mysql_close($con);
}
?>

I asked a similar question in the past but I think they misunderstood due to lack of full information.

Upvotes: 0

Views: 2880

Answers (4)

Eddi
Eddi

Reputation: 821

You define your action, when the submit button is pressed, but don't actually use it. You don't need the php part after your form. Try to edit your table connect information:

...
mysql_select_db("username", $con);
if(isset($_POST['week'])){
    $sql="SELECT * FROM `classes` ORDER BY `classes`.`week` ASC";
}
else{
    $sql = "SELECT * FROM `classes`";
}
$myData = mysql_query($sql, $con);
...

Upvotes: 0

john
john

Reputation: 567

try this code

$con = mysql_connect("host", "username", "password");
if (!$con) 
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("username", $con);
$sql = "SELECT * FROM `classes`";

if(isset($_POST['week'])){
        $sql="SELECT * FROM `classes` ORDER BY `classes`.`week` ASC";
   }

$myData = mysql_query($sql, $con);
echo "<table border=1>
<tr>
<th> Name 1 </th>
<th> Name 2 </th>
<th> Name 3 </th>
<th> Name 4 </th>
</tr>";
while ($record = mysql_fetch_array($myData)){
    echo "<tr>";
    echo"<td>" . $record['name 1'] . "</td>";
    echo"<td>" . $record['week'] . "</td>";
    echo"<td>" . $record['name 3'] . "</td>";
    echo"<td>" . $record['name 4'] . "</td>";
    echo "</tr>";
}
echo "</table>";
mysql_close($con);
}
?>

Upvotes: 0

Bang
Bang

Reputation: 929

You have to alter your original query. $sql = "SELECT * FROM classes";

Let's summarize :

Your form :

<h1> Courses </h1>
<form name="Table Properties" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Order by Week
<button type="submit" name="week" class="button" <?php echo $value='1'; ?>"> Sort Week </button>
</form>

When you submit :

<?php

$orderString = ''; // default 
if (isset($_POST['week'])){
    $orderString = "`classes`.`week` ASC";
}

Your display :

$con = mysql_connect("host", "username", "password");
if (!$con) 
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("username", $con);
$sql = "SELECT * FROM `classes`";
// now check order
if ($orderString !== '') {
    // Concatenate
    $sql .= ' ORDER BY ' . $orderString;
}
$myData = mysql_query($sql, $con);
echo "<table border=1>
<tr>
<th> Name 1 </th>
<th> Name 2 </th>
<th> Name 3 </th>
<th> Name 4 </th>
</tr>";
while ($record = mysql_fetch_array($myData)){
    echo "<tr>";
    echo"<td>" . $record['name 1'] . "</td>";
    echo"<td>" . $record['week'] . "</td>";
    echo"<td>" . $record['name 3'] . "</td>";
    echo"<td>" . $record['name 4'] . "</td>";
    echo "</tr>";
}
echo "</table>";
mysql_close($con);
}
?>

Upvotes: 1

Oswald
Oswald

Reputation: 31685

Add an ORDER BY clause to the SQL statement in the "table connect information".

Upvotes: 0

Related Questions