PHP ausgabe sortieren

sandroP

Erfahrenes Mitglied
Hallo,

ich will die Antwort aus meiner PHP abfrage sortieren.
bisher wird gleich bei der auswertung sortiert über "order by"

- ich will aber, dass es oberhalb der angezeigten ausgabe tabelle eine sortierfunktion gibt.

irgendwie so?
<p>Ergebnis Sortieren nach: <input type="radio" name="sortieren" value="preis" checked>Preis <input type="radio" name="sortieren" value="ort">Ort <input type="radio" name="sortieren" value="sterne">Sterne</p>


______________________________________________
hier mein php formular mit Order by:

<html>
<body>
<?php

// deklaration/definition der Variablen
$preis = isset($_POST["preis"]) ? $_POST["preis"] : null;
$sterne = isset($_POST["sterne"]) ? $_POST["sterne"] : null;
$see = isset($_POST["see"]) ? $_POST["see"] : null;
$sortieren = isset($_POST["sortieren"]) ? $_POST["sortieren"] : null;
$ort = isset($_POST["ort"]) ? $_POST["ort"] : null;
$verpflegung = isset($_POST["verpflegung"]) ? $_POST["verpflegung"] : null;
$airfn = isset($_POST["airfn"]) ? $_POST["airfn"] : null;


mysql_connect();
mysql_select_db("firma");

if(!empty($ort)){

$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";
$sqlab .= " AND sterne >= '".$sterne."'";
$sqlab .= " AND see <= '".$see."'";
$sqlab .= " AND airfn <= '".$airfn."'";
$sqlab .= " AND verpflegung <= '".$verpflegung."'";
$sqlab .= " AND(";
foreach ($ort AS $key => $_value){
if( !empty( $_value ) ) {
$sqlab .= ($key>0?" OR":"")." ort = '".$_value."'";
}
}
$sqlab .= ")";



$sqlab .= " order by $sortieren";

$res = mysql_query($sqlab);
$num = mysql_num_rows($res);
if ($num==0) echo "keine passenden Datensätze gefunden";


// Tabellenbeginn
echo "<table border='0' bgcolor='#FEF08D' >";


// Tabelleninhalt

while ($zeile = mysql_fetch_assoc($res))
{
echo "<tr>";
// Überschrift
echo "<tr bgcolor='#F1D247'> <td align='center' valign='middle'><b>$zeile[typ] $zeile[name]</b></td> <td align='center'>Preis ab: $zeile[preis] € &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $zeile[sterne] Sterne</td> <td align='center'>Ort: $zeile[ort]</td></tr>";

// Inhalt
echo '<td align="center" valign="middle" bgcolor="#FEF08D"><img src="'.$zeile['bild'].'" width="150" height="100"></td>';
echo "<td align='center' valign='middle' bgcolor='#FEF08D' width='300'>$zeile[beschreibung]</td>";
echo '<td align="center" valign="middle" bgcolor="#FEF08D"><a href="'.$zeile['infoseite'].'">Infoseite</a></td>';
echo "</tr>";
}
// Tabellenende
echo "</table>";

}
else{
echo "Bitte Ort waehlen!";
}


?>
</body>
</html>




Danke fürs nachdenken im Vorraus
 
Hallo

es gibt bestimmt mehrere Möglichkeiten, dies zu realiseren.

Ein kleines ganz einfaches Beispiel ist folgendes:

Man übergibt das Feld und die Sortierungsmethode über den Link.

PHP:
<a href="<?php echo $_SERVER['PHP_SELF']?>?sort=<?php echo $ordnen ?>&feld=dasfeld">dasfeld <?php echo $linktext ?></a>

Über die Variable $feld kann man nun das Sortierungsfeld übergeben oder eine entsprechende Variable. Letztendlich sollte aber in $strfeld das Feld ankommen, wonach sortiert werden soll. Da uns nur 2 Sortiermethoden zur Verfügung stehen (DESC ASC), kann man $strsort abfragen und die entsprechenden Parameter wieder mit der anderen Methode füttern.

PHP:
$strfeld = isset($_GET['feld']) ? $_GET['feld'] : 'id'; 
	$strsort = isset($_GET['sort']) ? $_GET['sort'] : 'desc'; 
	$ordnen = "asc";
	$linktext = "aufteigend sortieren";
	
	if($strsort == "asc"){
			$linktext = "absteigend sortieren";
			$ordnen= "desc";
			}

Die Abfrage für die SQL sieht dann folgendermaßen aus:

PHP:
  $sql = "SELECT id, thema, inhalt from tabelle order by $strfeld $strsort";
		//[...]
 
danke erst mal...

ich bin neuling und muss mal ganz doof nachfragen.

was schreibe ich wohin?

-aus dem suchformular nehme ich die die sortier radios raus? richtig?
-kommt das alles in mein PHP code? und wenn an welche stelle?


ich habe eigentlich nur "fast"keine Ahnung
 
Hallo

in meinem Beispiel wird der Parameter nicht über ein Formular übergeben sondern über die URL.

Wenn Du z.B. die Datensätze in einer Tabelle ausgibst, kann Du in die 1. Zeile der zu sortierenden Spalten einen entsprechenden Link setzen.
 
hallo lucie,

du wirst mich sicher für doof oder was auch immer halten, aber ich hab wohl einfach keien ahnung.
ich hab versucht das ganze zum laufen zu bringen, bin aber kläglich gescheitert.

ich poste dir nochmal mal eingabe und ausgabe formular.
-die suche im eingabeformular kommt weg?
-und was kommt nun im antwort php wo hin?


danke



ausgabe:
<html>
<body>
<?php

// deklaration/definition der Variablen
$preis = isset($_POST["preis"]) ? $_POST["preis"] : null;
$sterne = isset($_POST["sterne"]) ? $_POST["sterne"] : null;
$see = isset($_POST["see"]) ? $_POST["see"] : null;
$sortieren = isset($_POST["sortieren"]) ? $_POST["sortieren"] : null;
$ort = isset($_POST["ort"]) ? $_POST["ort"] : null;
$verpflegung = isset($_POST["verpflegung"]) ? $_POST["verpflegung"] : null;
$airfn = isset($_POST["airfn"]) ? $_POST["airfn"] : null;
$pool = isset($_POST["pool"]) ? $_POST["pool"] : null;
$klima = isset($_POST["klima"]) ? $_POST["klima"] : null;


mysql_connect();
mysql_select_db("firma");

if(!empty($ort)){

$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";
$sqlab .= " AND sterne >= '".$sterne."'";
$sqlab .= " AND see <= '".$see."'";
$sqlab .= " AND airfn <= '".$airfn."'";
$sqlab .= " AND verpflegung >= '".$verpflegung."'";
$sqlab .= " AND pool >= '".$pool."'";
$sqlab .= " AND klima >= '".$klima."'";
$sqlab .= " AND(";
foreach ($ort AS $key => $_value){
if( !empty( $_value ) ) {
$sqlab .= ($key>0?" OR":"")." ort = '".$_value."'";
}
}
$sqlab .= ")";



$sqlab .= " order by $sortieren";

$res = mysql_query($sqlab);
$num = mysql_num_rows($res);
if ($num==0) echo "keine passenden Datensätze gefunden";


// Tabellenbeginn
echo "<table border='0' bgcolor='#FEF08D' >";


// Tabelleninhalt

while ($zeile = mysql_fetch_assoc($res))
{
echo "<tr>";
// Überschrift
echo "<tr bgcolor='#F1D247'> <td align='center' valign='middle'><b>$zeile[typ] $zeile[name]</b></td> <td align='center'>Preis ab: $zeile[preis] € &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $zeile[sterne] Sterne</td> <td align='center'>Ort: $zeile[ort]</td></tr>";

// Inhalt
echo '<td align="center" valign="middle" bgcolor="#FEF08D"><img src="'.$zeile['bild'].'" width="150" height="100"></td>';
echo "<td align='center' valign='middle' bgcolor='#FEF08D' width='300'>$zeile[beschreibung]</td>";
echo '<td align="center" valign="middle" bgcolor="#FEF08D"><form action = "info.php" method = "post">
<p><input type="hidden" name="info" value="$zeile[kundennummer]"><input type="submit" name="info" value="Informationen">
</p>
</form></td>';
echo "</tr>";
}
// Tabellenende
echo "</table>";

}
else{
echo "Bitte Ort waehlen!";
}


?>
</body>
</html>


eingabe:
<html>
<body>
Anzeige der Unterkünfte mit einem Preis&nbsp;zwischen:
<form action = "ud08.php" method = "post">



<p>Preis bis: <select name="preis" size="1">
<option value="99999999">egal</option>
<option value="10">bis 10 Euro</option>
<option value="20">bis 20 Euro</option>
<option value="30">bis 30 Euro</option>
<option value="40">bis 40 Euro</option>
<option value="50">bis 50 Euro</option>
<option value="75">bis 75 Euro</option>
<option value="100">bis 100 Euro</option>
<option value="150">bis 150 Euro</option>
<option value="200">bis 200 Euro</option>
</select></p>
<p> &nbsp;&nbsp;Festeinstellung für&nbsp;typ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hotel Name: typ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wert: Hotel</p>



<p>Sterne mind. <select name="sterne" size="1">
<option value="0">egal</option>
<option value="1">1 Stern</option>
<option value="2">2 Sterne</option>
<option value="3">3 Sterne</option>
<option value="4">4 Sterne</option>
<option value="5">5 Sterne</option>
</select></p>
<p>Verpflegung&nbsp;mind.&nbsp; <select name="verpflegung" size="1">
<option value="1">egal</option>
<option value="2">Frühstück</option>
<option value="3">Halbpension</option>
<option value="4">Vollpension</option>
</select></p>
<p>Entfernung zum Bodensee <select name="see" size="1">
<option value="99999">egal</option>
<option value="0">direkte am See</option>
<option value="100">bis 100 Meter</option>
<option value="250">bis 250 Meter</option>
<option value="500">bis 500 Meter</option>
<option value="1000">bis 1 km</option>
<option value="2000">bis 2 km</option>
<option value="5000">bis 5 km</option>
<option value="10000">bis 10 km</option>
</select></p>
<p>Enternung zum Flughafen FN <select name="airfn" size="1">
<option value="99999">egal</option>
<option value="10">bis 10 km</option>
<option value="25">bis 25 km</option>
<option value="50">bis 50 km</option>
<option value="100">bis 100 km</option>
<option value="150">bis 150 km</option>
<option value="200">bis 200 km</option>
</select></p>
<p>Region/Land </p>
<p>Bitte Orte auswählen: <input type="checkbox" name="ort[ ]" value="Lindau">Lindau <input type="checkbox" name="ort[ ]" value="Meersburg">Meersburg <input type="checkbox" name="ort[ ]" value="Friedrichshafen">Friedrichshafen</p>
<p>Ausstattung: <input type="checkbox" name="klima" value="Klimaanlage">Klimaanlage <input type="checkbox" name="pool" value="Pool">Pool</p>
<p>Ergebnis Sortieren nach: <input type="radio" name="sortieren" value="preis" checked>Preis <input type="radio" name="sortieren" value="ort">Ort <input type="radio" name="sortieren" value="sterne">Sterne <input type="radio" name="sortieren" value="see">entfernung zum See </p>



<input type = "submit">
<input type = "reset">
</form>
</body>
</html>
 
Hi

ich sehe jetzt nicht, dass Du an Deiner Ausgabe irgendwas verändert hast. :)

Schau Dir dies an, so könnte eine Sortierungsseite aussehen. Man kann auch Pfeile reinbauen, die aufsteigend und absteigend kenntlich machen und und und... Dies ist eine ganz einfache Version bzw. Möglichkeit.

http://dw.fem-exakt.de/sortieren.php

Hier der Script-Code:
PHP:
<?
 include("connection/db.conf.php");

function getQuotetext($s){
    $txt=get_magic_quotes_gpc() ? stripslashes($s) : $s; 
	return $txt;
}
		
	$strfeld = isset($_GET['feld']) ? $_GET['feld'] : 'kursid'; 
	$strsort = isset($_GET['sort']) ? $_GET['sort'] : 'desc'; 
	$ordnen = "asc";
	$linktext = "aufteigend sortieren";
	
	if($strsort == "asc"){
			$linktext = "absteigend sortieren";
			$ordnen= "desc";
			} 
	

  // Select-Statement zum Auslesen der Daten
 $sql = sprintf("SELECT kursid,beginn,themen from seminar order by %s %s",
  		getQuotetext($strfeld),
		getQuotetext($strsort));
		
  $rs = mysql_query($sql);
  $row = mysql_fetch_array($rs);
  echo $sql."<hr>";

?>
<table border>
<tr><td>
<a href="<?php echo $_SERVER['PHP_SELF']?>?sort=<?php echo $ordnen ?>&feld=kursid">Kurs <?php echo $linktext ?></a></td><td>
<a href="<?php echo $_SERVER['PHP_SELF']?>?sort=<?php echo $ordnen ?>&feld=beginn">Beginn <?php echo $linktext ?></a></td>
<td><a href="<?php echo $_SERVER['PHP_SELF']?>?sort=<?php echo $ordnen ?>&feld=themen">Thema <?php echo $linktext ?></a></td></tr>
<?php do { ?>
<tr><td><?php echo $row[0]?></td><td><?php echo $row[1]?></td><td><?php echo $row[2]?></td></tr>
<?
   }
   while ($row=mysql_fetch_array($rs));
mysql_free_result($rs);
mysql_close($db);
 ?>
</table>
 
Zuletzt bearbeitet:
Hallo,
ich lass das glaub... dann gibt es eben keine sortierfunktion.

-- ich hab da noch ne letzte frage: kann ich das nicht über das formular wie ganz oben
im Quellcode realisieren?
- im fehlen dann eben die Daten aus dem Eingabe teil.
- kann ich die nicht in einer Variablen speichern und
dann wieder nutzen?

<html>
<body>
<form name="form1" method="post" action="ud08.php">
<p>Ergebnis Sortieren nach: <input type="radio" name="sortieren" value="preis" checked>Preis <input type="radio" name="sortieren" value="ort">Ort <input type="radio" name="sortieren" value="sterne">Sterne <input type="radio" name="sortieren" value="see">entfernung zum See <input type="submit" name="sortieren" value="sortieren"></p>
</form>
<p><?php

// deklaration/definition der Variablen
$preis = isset($_POST["preis"]) ? $_POST["preis"] : null;
$sterne = isset($_POST["sterne"]) ? $_POST["sterne"] : null;
$see = isset($_POST["see"]) ? $_POST["see"] : null;
$sortieren = isset($_POST["sortieren"]) ? $_POST["sortieren"] : null;
$ort = isset($_POST["ort"]) ? $_POST["ort"] : null;
$verpflegung = isset($_POST["verpflegung"]) ? $_POST["verpflegung"] : null;
$airfn = isset($_POST["airfn"]) ? $_POST["airfn"] : null;
$pool = isset($_POST["pool"]) ? $_POST["pool"] : null;
$klima = isset($_POST["klima"]) ? $_POST["klima"] : null;

mysql_connect();
mysql_select_db("firma");

if(!empty($ort)){

$sqlab = "SELECT name, infoseite, bild, typ, sterne, ort, preis, beschreibung FROM gastgeber";
$sqlab .= " WHERE preis <= '".$preis."'";
$sqlab .= " AND sterne >= '".$sterne."'";
$sqlab .= " AND see <= '".$see."'";
$sqlab .= " AND airfn <= '".$airfn."'";
$sqlab .= " AND verpflegung >= '".$verpflegung."'";
$sqlab .= " AND pool >= '".$pool."'";
$sqlab .= " AND klima >= '".$klima."'";
$sqlab .= " AND(";
foreach ($ort AS $key => $_value){
if( !empty( $_value ) ) {
$sqlab .= ($key>0?" OR":"")." ort = '".$_value."'";
}
}
$sqlab .= ")";

$sqlab .= " order by $sortieren";

$res = mysql_query($sqlab);
$num = mysql_num_rows($res);
if ($num==0) echo "keine passenden Datensätze gefunden";

// Tabellenbeginn
 
Hi,

Variablen, die Du an die URL hängst sind auf der Server-Variablen $_GET und nicht $_POST (POST bei Formular-Variablen) verfügbar.

Hoffe das hilft.

Gruß tyg3r
 
Du meinst ich muss in der info.php

$knum = isset($_POST["knum"]) ? $_POST["knum"] : null;

ändern zu?

$knum = isset($_get["knum"]) ? $_get["knum"] : null;



und dann geht es

Ich habe von PHP nicht so viel Ahnung, deshalb die dummen Fragen
 
In Deinem Link ist die Variable "section" definiert.
info.php?section=$sqlab

Die mußt Du natürlich als GET-Var auch in info.php auswerten:
$section = isset($_GET["section"]) ? $_GET["section"] : null;

Wobei ich grade sehe, dass Du einen SQL String an die URL hängst ... $sqlab
Überleg erstmal, was Du da genau übergeben willst.

Gruß tyg3r
 
Zurück