Zur Navigation

Sortierung mit Radio-Button

1 uwe

Hallo,
ich verwende folgendes Script um eine Textdatei zu sortieren.

Jetzt will ich oben auf der Seite 2 Radio-Button für
Aufsteigend und Absteigend haben.
(Die Werte sollen auch stehen bleiben, wenn man die Sortierung aufgerufen hat)
In dem Spript habe ich schon 2 Bereiche mit einem
Anfang eingefügt.
(// ab hier neu !!!!!!!! und bis hier neue!!!!!!!!!!!!!!!!);

Gruss Uwe
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="de-de">
<head>
 <meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<HTML>
<HEAD>
 <TITLE>Lesen sortieren-2</TITLE>

</HEAD>
<BODY>
 <h2>Suchbegriffe</h2>

<br><br>
--Auf die Kopfzeile klicken ---> dann ändert sich die Sortierung
(Kopfzeilentext in php)

// ab hier neu !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p>
    <input type="radio" name="sortierung" value="aufsteigend"> aufsteigend</input><br />
    <input type="radio" name="sortierung" value="absteigend"> absteigend</input><br /><br />
  </p> 
</form>
// bis hier neu !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;

<?php
$lines = file('topsuchworte.inc');
$array = array();
$sort = $_GET['sort'];
if(!isset($sort)){
    $sort = 'firstname';
}
foreach($lines as $line){
    $explode = explode("|",$line);
    $array['firstname'][] = $explode[0];
    $array['surname'][] = $explode[1];
    $array['job'][] = $explode[2];

}
// zum Text anzeigen des arrays     print_r($array);
echo "<hr>\n";

// ab hier neu !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;
if ( isset ($_POST['sortierung']) ) {
    if ($_POST['sortierung'] == "aufsteigend") {
         { asort($array[$sort]);}
else { arsort($array[$sort]); }
    }
}
// bis hier neu !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;



// original asort($array[$sort]);
//Rückwärts sortiert;
//arsort($array[$sort]);
echo "<table border='1'>\n";
echo "  <tr>\n";

// die nächste Zeile ist bei 3 Spalten
echo "\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=firstname'>Firstname</a></td>\n\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=surname'>Nachname</a></td>\n\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=job'>Datum</a></td>\n";

echo " </tr>\n";
foreach($array[$sort] as $key=>$ray){
    echo ' <tr>';
    echo "\t<td>".$array['firstname'][$key]."</td>\n";
    echo "\t<td>".$array['surname'][$key]."</td>\n";
    echo "\t<td>".$array['job'][$key]."</td>\n";
    echo " </tr>\n";
}
echo '</table>';
?> 

</BODY>
</HTML>

08.04.2008 22:30

2 Jörg Kruse

Hier sind die Klammern falsch verschachtelt:

if ( isset ($_POST['sortierung']) ) {
    if ($_POST['sortierung'] == "aufsteigend") {
         { asort($array[$sort]);}
else { arsort($array[$sort]); }
    }
}

So wär's korrekt:

if ( isset ($_POST['sortierung']) ) {
    if ($_POST['sortierung'] == "aufsteigend") {
         asort($array[$sort]);
    }
} else { 
    arsort($array[$sort]);
}

08.04.2008 22:38

3 uwe

Hallo,
habe ich geändert.
Aber das sortieren reagiert darauf nicht.

(Und der Klick auf den Button verschwindet der auch wieder.)
Soweit ich gelesen habe muss der ausgwählte Wert wieder mit $_SERVER['PHP_SELF']
an den Radio-Button übergeben werden mit Value.

Gruss
Uwe

08.04.2008 22:55

4 Jörg Kruse

Ich hatte nur auf die syntaktische Richtigkeit geachtet. So macht es wohl mehr Sinn:

if ( isset ($_POST['sortierung']) ) {
    if ($_POST['sortierung'] == "aufsteigend") {
         asort($array[$sort]);
    } else { 
         arsort($array[$sort]);
    }
}

(Und der Klick auf den Button verschwindet der auch wieder.)

Da kannst nach Prüfung, ob die betreffende Sortierung übermittelt wurde, noch ein checked="checked" einfügen

08.04.2008 23:06

5 uwe

Hallo Jörg,
es passiert nichts.
Ich glaube das Problem liegt woanders:

Das Script ruft eine Tabelle auf. Mit einem Klick auf die Kopfzeile wird diese Spalte als Sortierspalte sofort aktiviert.
Hier sollen dann die Radio-Button zum Einsatz kommen.
Die bestimmen dann die Sortierung in der Spalte.

Gruss
Uwe

09.04.2008 09:54

6 Jörg Kruse

Die Werte der Radio-Buttons werden übermittelt, wenn du auf einen (nicht vorhandenen) Submit-Button des Formulars klickst, in welchem die Buttons integriert sind. Wenn du auf einen der Links klickst, werden dagegen nur die Parameter im Query String des Links übermittelt.

Wenn beide Parameter sort und sortierung gemeinsam übertragen werden sollen, müssen sie entweder gemeinsam in dem Query String eines Links oder gemeinsam in einem Formular enthalten sein.

09.04.2008 10:54 | geändert: 09.04.2008 10:54

7 uwe

Hallo Jörg,
ich habe jetzt eine 2. Kopfzeile eingefügt und eine neue Variable angelegt. Aber da ist noch ein Fehler drin.

Gruss
Uwe
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="de-de">
<head>
 <meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<HTML>
<HEAD>
 <TITLE>Lesen sortieren-2</TITLE>
</style>
</HEAD>
<BODY>
 <h2>Sortieren</h2>


<br><br>
--Auf die Kopfzeile klicken ---> dann ändert sich die Sortierung
(Kopfzeilentext in php)


<?php
$lines = file('topsuchworte.inc');
$array = array();
$sort = $_GET['sort'];
$aufab = $_GET['aufab'];
if(!isset($sort)){
    $sort = 'firstname';
// wenn nicht angegeben ist, dann aufsteigend;
sort($array[$sort]);}

foreach($lines as $line){
    $explode = explode("|",$line);
    $array['firstname'][] = $explode[0];
    $array['surname'][] = $explode[1];
    $array['job'][] = $explode[2];

}
// zum Text anzeigen des arrays     print_r($array);
echo "<hr>\n";



if($aufab = "aufsteigend") {asort($array[$sort]);}
if($aufab = "absteigend") {arsort($array[$sort]);}
// zum Test die Sortierung angzeigen;
echo $aufab;
echo "<table border='1'>\n";
echo "  <tr>\n";

echo "\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=firstname&aufab=aufsteigend'>Aufsteigend Vorname</a></td>\n\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=surname&aufab=aufsteigend'>Aufsteigend Nachname</a></td>\n\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=job&aufab=aufsteigend'>Job aufsteigend</a></td>\n";
echo " </tr>\n";
echo "  <tr>\n";
echo "\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=firstname&aufab=absteigend'>Absteigend Vorname</a></td>\n\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=surname&aufab=absteigend'>Absteigend Nachname</a></td>\n\t<td align='center' bgcolor=\"#CCCCFF\"><a href='".$_SERVER['PHP_SELF']."?sort=job&aufab=absteigend'>Aufsteigend Job</a></td>\n";

echo " </tr>\n";
foreach($array[$sort] as $key=>$ray){
    echo ' <tr>';
    echo "\t<td>".$array['firstname'][$key]."</td>\n";
    echo "\t<td>".$array['surname'][$key]."</td>\n";
    echo "\t<td>".$array['job'][$key]."</td>\n";
    echo " </tr>\n";
}
echo '</table>';
?>


</BODY>
</HTML>
[/code]

10.04.2008 11:14

8 Jörg Kruse

Hier wird noch ein leeres Array sortiert:

if(!isset($sort)){
    $sort = 'firstname';
// wenn nicht angegeben ist, dann aufsteigend;
sort($array[$sort]);}

Denn danach wird das Array ja erst aufgebaut:

foreach($lines as $line){
    $explode = explode("|",$line);
    $array['firstname'][] = $explode[0];
    $array['surname'][] = $explode[1];
    $array['job'][] = $explode[2];

}

10.04.2008 18:38

9 uwe

Hallo Jörg,
danke, habe den Fehler gefunden.
War (im nachhinein ganz simpel)

if($aufab = "aufsteigend") {asort($array[$sort]);}
if($aufab = "absteigend") {arsort($array[$sort]

es muss das doppelte Gleichheitszeichen sein.

if($aufab == "aufsteigend") {asort($array[$sort]);}
if($aufab == "absteigend") {arsort($array[$sort]);}

Gruss
Uwe


10.04.2008 19:48

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]