Ergebnisliste sortieren mit Link

mareikiii

Grünschnabel
Hallo allerseits,

versuche gerade verzweifelt meine Ergebnisliste nach den jeweiligen Überschriften zu sortieren!

PHP:
<? 
mysql_connect($sysConfig_host, $sysConfig_db_user, $sysConfig_db_password) or die ("Can`t connect to DB");
mysql_select_db($sysConfig_db) or die ("Can`t select DB `$sysConfig_db`"); 

define ('_NO_OPTION_SELECTED' , 'Please choose one option');
?>
<?

$Zeilen_pro_Seite = 20;


if (!isset($Anfangsposition)) {
  $Anfangsposition = 0;
}


$task=$_REQUEST['type'];

switch ($task)
{

case "0":
    dienstleistungsart();
break;
	
case "1":
	lang();
break;
	
case "2":
    agency();
break;
		
case "3":
    country();
break;
	
case "4":
	location();
break;

default:
?>
  <b>Suchen nach: </b></br></br><br><br>
   <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
    <input type="radio" name="type" value="0" id='t0'>Dienstleistungsart<label for="t0"></label><br/>
   <input type="radio" name="type" value="1" id='t1'><label for="t1">Sprache  </label><br/>
   <input type="radio" name="type" value="2" id='t2'><label for="t2">Agenturen/Freelancer  </label><br/>
   <input type="radio" name="type" value="3" id='t3'><label for="t3"></label>Land  <br/>
   <input type="radio" name="type" value="4" id='t4'><label for="t4"></label>Ort  <br/><br>   
   <input type="text" name="suchbegriff"  /> Suchbegriff eintippen <br> <br>
   <input name="step0" value="Suche starten" type="submit">
   <br>
   <br>
   <br><br>
   <br>
   <br><br>
   <br>
   <br>
   Erklaerung:<br>
   <br>
   Sie muessen eine der Suchoptionen auswaehlen und dann einen Suchbegriff eintippen.<br>
   <br>
   Dienstleistungsart: Bspw.: text translators , interpreters oder text correctors  
   <br>
   Sprache: Einfach die Sprache in Englisch oder Deutsch eintippen.
   <br>
   Agenturen/Freelancer: Einfach Freelancer , agency oder Agentur eintippen
   <br>
   Land: Einfach Land in Deutsch oder Englisch eintippen
   <br>
   Ort: Einfach Ort in Deutsch oder Englisch eintippen
  </form>
<?
}
?>
<?php
function show_files(){?>

<table align="center" width="1000" border=1 cellpadding="0" cellspacing="0">
	<tr align="center">
		<td>
			<strong>ID	</strong>
		</td>
		<td>
			<strong>Vorname</strong>
		</td>
		<td>
			<strong>Nachname	</strong>
		</td>
		<td>
			<strong>Position</strong>
		</td>
		<td >
			<strong>Firma</strong>
		</td>
		<td>
			<strong>Adresse</strong>
		</td>
		<td>
			<strong>PLZ</strong>
		</td>
		<td>
			<strong>Stadt</strong>
		</td>
		<td>
			<strong><a href="">Land</a></strong>
		</td>		
		<td >
			<strong>Telefonnummer</strong>
		</td>
	</tr>
	

<? } ?>



<?php

function lang(){
		
		$suchbegriff = $_REQUEST['suchbegriff'];
		
		$query=" SELECT * from `translators` WHERE langs IN (SELECT lang_id FROM languages WHERE lang_eng like '%$suchbegriff%') OR (SELECT lang_id FROM languages WHERE lang_de like '%$suchbegriff%')";
		
		
		if(isset($_GET['sort']))
		$query .= " ORDER BY ".$_GET['sort'];
		if(isset ($_GET['sortorder']))
		$query .= " ".$_GET['sortorder'];
		
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
?>

Das ganze läuft in etwa so ab:

Es gibt ein Formular wo man 1 Rubrik nach der gesucht werden soll auswählt und dann einen Suchbegriff eingibt. Danach erscheint dann die Ergebnisliste!

Das funktioniert auch alles, nur möchte ich nun die Liste per Klick auf die einzelnen Bereiche (bspw. Sprachen) sortieren!

Und da komm ich nicht weiter ;-(

Wichtig ist vll. noch zu erwähnen, dass searchtra.php (seite der suche) nicht funktioniert, sonder eine suche immer mit index.php/go=searchtra geöffnet wird!

Kann ich einen Paramater and das go=searchtra dranhängen?

Vielen Dank für jegliche Hilfe ;-)

Mareikiii
 
Hi,

Du fragst in Deinem Script 2 GET-Parameter ("sort" und "sortorder") ab, die Du aber nirgends übergibst. Du könntest z.B. die Tabellenüberschriften entsprechend verlinken. Dabei musst Du allerdings beachten, dass die POST-Daten dann im nächsten Scriptaufruf verloren sind. Ein Lösung wäre, mit einer Session zu arbeiten und die Formulardaten da reinzuschreiben.

Eine Alternative wäre, das Sortieren clientseitig per Javascript zu machen. Dann wäre es halt ein Gimmick, das nur Benutzern mit aktiviertem JS zur Verfügung steht.

Kann ich einen Paramater and das go=searchtra dranhängen?

Ja, natürlich:

Code:
index.php?go=searchtra&param1=foo&param2=bar...

LG
 
Also mir würde die Variante mit Sessions glaube besser zutreffen! Mit Javascript ist das schon so eine Sache, weil es bei manchen nicht richtig läuft...

Also muss ich das Wort "suchwort" irgendwie in der session behalten lassen und dann so einen link setzen:

PHP:
<strong><a href="index.php?go=searchtra&type=1&suchbegriff=$suchbegriff&sortorder=DESC">Land</a></strong>

?

Danke
 
Zuletzt bearbeitet:
Hi,

Also muss ich das Wort "suchwort" irgendwie in der session behalten lassen und dann so einen link setzen:

PHP:
<strong><a href="index.php?go=searchtra&type=1&suchbegriff=$suchbegriff&sortorder=DESC">Land</a></strong>

?

Wenn Du "type" und "suchbegriff" mit übergibst, musst Du das nicht in die Session schreiben. Dann würdest Du allerdings die Daten im $_GET-Array finden. Schreib es lieber in die Session und lass die beiden GET-Parameter weg. Übergib nur die Sortierung (da würde jetzt allerdings noch das Feld fehlen, so übergibst Du nur die Reihenfolge...).

LG
 
Ich komm da leider gar nicht mit zurecht :-( Nur Fehler oder es wird nichts angezeigt!

Habe mal den Suchbegriff mit

Code:
session_start();
$_SESSION['suchbegriff'] = $suchbegriff;

gesichert.... Richtige Richtung?
 
Hi,

die Eingaben in die Formularfelder findest Du im PHP-Script im $_POST-Array, also $_POST['suchbegriff']. Ansonsten ist das die Vorgehensweise.

LG
 
Also ich habe da jetzt noch einiges rumprobiert...

Mittels:

PHP:
session_start();
$_SESSION[$task] = $_POST['type'];
$type = $_POST['type'];

$_SESSION[$task] = $_POST['suchbegriff'];
$suchbegriff2 = $_POST['suchbegriff'];

und dann versuche ich folgenden link:

PHP:
	<strong><a href= "index.php?go=searchtra&type='.$type.'&suchbegriff='.$suchbegriff2.'">ID</a>	</strong>

Wenn ich bspw. type=1&suchbegriff=ger eingebe funktioniert die Seite... Nur übernimmt er $type und $suchbegriff2 nicht...

Muss ich dort was anderes machen?

Hier der komplette Code:

PHP:
<?php
require_once($sysConfig_absolute_path."/admin/translators.class.php");

//Zusatzdateien includieren
require_once('/kunden/213597_8050/rp-hosting/1/1/eos3/express-online-solutions/configuration.php');


//Verbindung zur Datenbank herstellen

mysql_connect($sysConfig_host, $sysConfig_db_user, $sysConfig_db_password) or die ("Can`t connect to DB");
mysql_select_db($sysConfig_db) or die ("Can`t select DB `$sysConfig_db`"); 

define ('_NO_OPTION_SELECTED' , 'Please choose one option');

session_start();
$_SESSION[$task] = $_POST['type'];
$type = $_POST['type'];

$_SESSION[$task] = $_POST['suchbegriff'];
$suchbegriff2 = $_POST['suchbegriff'];
//echo $suchbegriff2;

$order = "ASC";
?>
<?

$Zeilen_pro_Seite = 20;


if (!isset($Anfangsposition)) {
  $Anfangsposition = 0;
}


$task=$_REQUEST['type'];

switch ($task)
{

case "0":
    dienstleistungsart();
break;
	
case "1":
	lang();
break;
	
case "2":
    agency();
break;
		
case "3":
    country();
break;
	
case "4":
	location();
break;

default:
?>
  <b>Suchen nach: </b></br></br><br><br>
   <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
    <input type="radio" name="type" value="0" id='t0'>Dienstleistungsart<label for="t0"></label><br/>
   <input type="radio" name="type" value="1" id='t1'><label for="t1">Sprache  </label><br/>
   <input type="radio" name="type" value="2" id='t2'><label for="t2">Agenturen/Freelancer  </label><br/>
   <input type="radio" name="type" value="3" id='t3'><label for="t3"></label>Land  <br/>
   <input type="radio" name="type" value="4" id='t4'><label for="t4"></label>Ort  <br/><br>   
   <input type="text" name="suchbegriff"  /> Suchbegriff eintippen <br> <br>
   <input name="step0" value="Suche starten" type="submit">
   <br>
   <br>
   <br><br>
   <br>
   <br><br>
   <br>
   <br>
   Erklaerung:<br>
   <br>
   Sie muessen eine der Suchoptionen auswaehlen und dann einen Suchbegriff eintippen.<br>
   <br>
   Dienstleistungsart: Bspw.: text translators , interpreters oder text correctors  
   <br>
   Sprache: Einfach die Sprache in Englisch oder Deutsch eintippen.
   <br>
   Agenturen/Freelancer: Einfach Freelancer , agency oder Agentur eintippen
   <br>
   Land: Einfach Land in Deutsch oder Englisch eintippen
   <br>
   Ort: Einfach Ort in Deutsch oder Englisch eintippen
  </form>
<?
}
?>
<?php
function show_files(){?>

<table align="center" width="1000" border=1 cellpadding="0" cellspacing="0">
	<tr align="center">
		<td>
			<strong><a href= "index.php?go=searchtra&type='.$type.'&suchbegriff='.$suchbegriff2.'">ID</a>	</strong>
		</td>
		<td>
			<strong>Vorname	</strong>
		</td>
		<td>
			<strong>Nachname	</strong>
		</td>
		<td>
			<strong>Position</strong>
		</td>
		<td >
			<strong>Firma</strong>
		</td>
		<td>
			<strong>Adresse</strong>
		</td>
		<td>
			<strong>PLZ</strong>
		</td>
		<td>
			<strong>Stadt</strong>
		</td>
		<td>
			<strong>Land</strong>
		</td>		
		<td >
			<strong>Telefonnummer</strong>
		</td>
	</tr>
	

<? } ?>



<?php

function lang(){

		
		$suchbegriff = $_REQUEST['suchbegriff'];
				
		$query="SELECT * from `translators` WHERE langs IN (SELECT lang_id FROM languages WHERE lang_eng like '%$suchbegriff%') OR (SELECT lang_id FROM languages WHERE lang_de like '%$suchbegriff%')";
		
			
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
?>
<?php

function dienstleistungsart(){
		
		$suchbegriff = $_REQUEST['suchbegriff'];
		
		$query=" SELECT * from `translators` WHERE  translator_id IN (SELECT user_id FROM users WHERE user_group IN (SELECT group_id FROM user_groups WHERE group_name LIKE '%$suchbegriff%'))";
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
?>

<?php

function agency(){
		
		$suchbegriff = $_REQUEST['suchbegriff'];
		
		if (stristr($suchbegriff, 'Agentur') OR stristr($suchbegriff, 'agency') ){
		
		$query=" SELECT * from `translators` WHERE type = '0'";
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
		if (stristr($suchbegriff, 'Freelancer')){
		
		$query=" SELECT * from `translators` WHERE type = '1'";
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
		
		}
?>

<?php

function country(){
		
		$suchbegriff = $_REQUEST['suchbegriff'];
		
		$query=" SELECT * from `translators` WHERE  country IN (SELECT country_id FROM countries WHERE country_eng LIKE '%$suchbegriff%' OR country_de like '%$suchbegriff%')";
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
?>

<?php

function location(){
		
		$suchbegriff = $_REQUEST['suchbegriff'];
		
		$query=" SELECT * from `translators` WHERE  city like '%$suchbegriff%'";
		$result=mysql_query($query);
		
		if (!$result) {
			die ('Es ist ein Fehler bei Ihrer Suchanfrage aufgetreten. Bitte versuchen Sie es erneut!');
			}	
		else{
		echo 'Ihre Suche nach <b>'.$suchbegriff.' </b>ergab folgende Treffer:  <br><br>';
		
		show_files();
		
		while($row = mysql_fetch_array($result)) { //NULL ist äquivalent zu false
			//$row ist nun das Array mit den Werten
			echo "<tr align=center>
			<td>{$row['translator_id']}</td>
			<td>{$row['first_name']}</td>
			<td>{$row['last_name']}</td>
			<td>{$row['position']}</td>
			<td>{$row['company']}</td>
			<td>{$row['adress']}</td>
			<td>{$row['zip']}</td>
			<td>{$row['city']}</td>
			<td>{$row['country']}</td>
			<td>{$row['phone']}</td>";
			}
			?></table><?
		}
		}
?>

Danke nochmals
 
Hi,

Also ich habe da jetzt noch einiges rumprobiert...

nicht herumprobieren, Du musst auch verstehen, was Du da eigentlich tust. Überleg mal, was Du wie übergibst. Wenn Du einen Link mit URL-Parametern hast, landen diese Parameter im $_GET-Array, Formularfelder im $_POST-Array. Also hättest Du jetzt Suchbegriff und Typ mal in $_GET und mal in $_POST. Deshalb habe ich Dir geraten, Suchbegriff und Typ aus dem Formular in eine Session zu schreiben (und in der DB-Abfrage dann natürlich auf die Daten aus der Session zurückgreifen) und nur Sortierfeld und -reihenfolge per GET zu übergeben. Damit Du in den Links noch die Sortierreihenfolge switchen kannst, würde ich auch das in die Session schreiben. Du machst es jetzt gerade umgekehrt. Du übergibst im Link den Suchbegriff und Typ, fragst aber $_POST-Daten ab, die in dem Fall leer sind. Die Sortierung übergibst Du gar nicht.

Hier mal ein kleines Beispiel, wie so was aussehen kann:

PHP:
<?php
include 'db.php';
session_start();
if(! empty($_POST['suchbegriff'])) {
   $_SESSION['suchbegriff'] = $_POST['suchbegriff'];
}
if(! empty($_GET['sortfield']) && in_array($_GET['sortfield'], array('id', 'title'))) {
   $_SESSION['sortfield'] = $_GET['sortfield'];
} else {
   $_SESSION['sortfield'] = 'id';
}
if(! empty($_GET['sortorder']) && in_array($_GET['sortorder'], array('asc', 'desc'))) {
   $_SESSION['sortorder'] = $_GET['sortorder'];
} else {
   $_SESSION['sortorder'] = 'asc';
}

// kleines Array zum einfachen Switchen von ASC und DESC
$sortorder['asc'] = 'desc';
$sortorder['desc'] = 'asc';

$queryString = 'SELECT * FROM daten';
if(! empty($_SESSION['suchbegriff'])) {
   $queryString .= ' WHERE title LIKE \'%'
	 . mysql_real_escape_string($_SESSION['suchbegriff'])
	 . '%\'';
}
$queryString .= ' ORDER BY '
	 . $_SESSION['sortfield']
	 . ' ' . $_SESSION['sortorder'];
$result = mysql_query($queryString, $conn);
?>
<form action="search.php" method="post">
      <input type="text" name="suchbegriff" value="<?php echo ! empty($_SESSION['suchbegriff']) ?  htmlspecialchars($_SESSION['suchbegriff']) : ''; ?>">
      <input type="submit" value="suchen">
</form>
<table>
   <tr>
      <td>
	 <strong>
	 <?php
	    echo '<a href="search.php?sortfield=id';
	    if($_SESSION['sortfield'] == 'id') {
	       echo '&amp;sortorder=' . $sortorder[$_SESSION['sortorder']] . '">ID</a>';
	    } else {
	       echo '&amp;sortorder=asc">ID</a>';
	    }
	 ?>
	 </strong>
      </td>
      <td>
	 <strong>
	 <?php
	    echo '<a href="search.php?sortfield=title';
	    if($_SESSION['sortfield'] == 'title') {
	       echo '&amp;sortorder=' . $sortorder[$_SESSION['sortorder']] . '">Titel</a>';
	    } else {
	       echo '&amp;sortorder=asc">Titel</a>';
	    }
	 ?>
	 </strong>
      </td>
   </tr> 
   <?php
      if($result != false) {
	 while($row = mysql_fetch_assoc($result)) {
	    echo '<tr>';
	    echo '<td>' . $row['id'] . '</td>';
	    echo '<td>' . $row['title'] . '</td>';
	    echo '</tr>';
	 }
      }
   ?>
</table>

In dem Beispiel würden der Einfachheit halber alle Daten ausgegeben, wenn kein Suchbegriff eingegeben wurde.

LG
 
Zurück