• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Radio Buttons innerhalb eines php-Skripts

tkoenig

Neues Mitglied
Hallo zusammen,

ich habe innerhalb eines php-Skripts (keine HTML-Datei) eine Reihe Radio Buttons für eine wählbare Sortierung der Datensätze deklariert (siehe Code-Auszug unten). Nachdem eine Sortierung ausgewählt wurde, soll der entsprechende Button gecheckt angezeigt werden. Allerdings scheinen meine Inputs keinen validen "Abschluss" zu haben, denn wenn ich einen Button anklicke, dann wird immer zunächst kurz der Button unmittelbar davor gecheckt und dann erst der richtige. Auch treten jetzt Probleme im weiteren Skriptverlauf auf. So bleiben Selection Field nach dem Aufklappen nicht mehr geöffnet, sondern schließen sich sofort wieder. Auch das könnte damit zusammenhängen, dass die Inputs nicht abgeschlossen, sondern irgendwie noch "aktiv" sind. Hoffentlich war das alles einigermaßen verständlich, bin nicht so der Crack ;)

Übrigens tritt dieses Problem nur mit Mozilla Firefox auf, mit Internet Explorer funktioniert es.

PHP:
...

echo '<label>';
  echo 's<input type="radio" name="sort" value="s"';
  if($_POST['sort']=='s') { echo " checked='checked'"; }
echo '</label>';

echo '<label>';
  echo 'b<input type="radio" name="sort" value="b"';
  if($_POST['sort']=='b') { echo " checked='checked'"; }
echo '</label>';

...
 
Deine input-Felder werden nicht geschlossen. Ergänze hier

PHP:
echo '</label>';

mal noch ein > - also:

PHP:
echo '></label>';

Btw. halte ich es für fragwürdig ein input-Feld von label umgeben zu lassen. label dient in HTML zur Beschriftung von Formularfeldern, steht also immer vor oder nach diesen - umgibt sie aber nicht.

Und deine Frage wäre vermutlich besser im HTML-Bereich aufgehoben da es dir offenbar um eine Darstellung im Browser auf Grund scheinbar fehlerhaft erzeugten HTML-Codes geht.
 
Halleluja!

Dass da wo ein > fehlt, auf die Idee kam ich natürlich auch. Ich vermutete ja, dass die Inputs nicht vernünftig abgeschlossen werden. Aber ich verrat jetzt hier lieber nicht, wie und wo ich damit experimentiert habe :-) Mit echo '></label>'; funktioniert es jedenfalls.

Die Sache mit dem Label stimmt auch, geht auch ohne.

Und ins php-Forum hab ich's gepostet, weil es sich um ein reines php-Skript handelt.

Trotzdem Danke.
 
Selbst wenn es sich um ein PHP-Script handelt, entscheidend ist was Du für ein Problem hast. Dein Problem bestand in der Anzeige im Browser. PHP ist dafür nicht verantwortlich sondern der (von PHP erzeugte) HTML-Quellcode. Also poste nächstes mal den von dir erzeugten HTML-Code oder verwende gleich einen HTML-Validator - da fällt so etwas sofort auf ;)
 
Hi!

Wie gesagt, ich bin noch nicht so der Crack, um das immer richtig einordnen zu können. Sorry dafür. Eine kleine (php-)Sache hab ich aber im Zusammenhang mit meiner Sortierung noch noch...

Grundsätzlich funktioniert jetzt alles soweit. Die ausgewählte Sortierung wird aber nur so lange "gehalten", bis eine Änderung an den Datensätzen vorgenommen wird. Danach geht die Auswahl wohl verloren und es wird wieder wie ganz zu Anfang nach id sortiert. Hier ein Auszug des Codes:

PHP:
...
function anzeigen($db_erg)
...
if (isset($_POST['sort']))
  {
    switch ($_POST['sort'])
      {
        case 'n': echo "&nbsp;&nbsp;&nbsp;<i>neueste oben</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY id DESC";
        break;
        case 'b': echo "&nbsp;&nbsp;&nbsp;<i>bearbeiter</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY bearbeiter";
        break;
        case 's': echo "&nbsp;&nbsp;&nbsp;<i>status</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY status";
        break;
        case 'w': echo "&nbsp;&nbsp;&nbsp;<i>wichtigkeit</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY prio";
        break;
      }
  }
else
  {
    echo '&nbsp;&nbsp;&nbsp;<i>neueste oben</i>';
    $sql = "SELECT * FROM aufgaben ORDER BY id DESC";
  }
$db_erg = mysql_query($sql);
...
elseif(isset($_POST['del']))
  {
    mysql_query("DELETE FROM aufgaben WHERE id = " . $_POST['data_id']);
    mysql_query("COMMIT");
    anzeigen($db_erg);
  }
...

Nach der Änderung rufe ich die Funktion anzeigen($db_erg) wieder auf und nach meinem Verständnis sollte $sql hier immer noch den zuletzt gewählten Wert haben. Hat er aber nicht, sondern die else-Variante kommt zum Zug. Hat jemand eine Idee? Vielen Dank dafür im Voraus.

Thomas
 
Und so hab ich's auch schon verucht:

PHP:
...
function anzeigen($db_erg)
...
if (isset($_POST['sort']))
  {
    switch ($_POST['sort'])
      {
        case 'n': echo "&nbsp;&nbsp;&nbsp;<i>neueste oben</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY id DESC";
        break;
        case 'b': echo "&nbsp;&nbsp;&nbsp;<i>bearbeiter</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY bearbeiter";
        break;
        case 's': echo "&nbsp;&nbsp;&nbsp;<i>status</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY status";
        break;
        case 'w': echo "&nbsp;&nbsp;&nbsp;<i>wichtigkeit</i>";
        $sql = "SELECT * FROM aufgaben ORDER BY prio";
        break;
      }
  }
else
  {
    echo '&nbsp;&nbsp;&nbsp;<i>neueste oben</i>';
  }
if (empty($sql))
  {
    $sql = "SELECT * FROM aufgaben ORDER BY id DESC";
  }
$db_erg = mysql_query($sql);
...
elseif(isset($_POST['del']))
  {
    mysql_query("DELETE FROM aufgaben WHERE id = " . $_POST['data_id']);
    mysql_query("COMMIT");
    anzeigen($db_erg);
  }
...

Gleiches Resultat. Obwohl ich mir hier sicher war, dass $sql nicht leer sein kann :?

Thomas
 
Das hab ich schon getan. Ganz am Ende der Funktion anzeigen hat die Variable $sql den korrekten, vorher ausgewählten Wert. Dann kommt die Verarbeitung (in meinem Beispiel das Löschen eines Datensatzes) und danach wieder zurück zur Funktion anzeigen. Hier ist $sql offensichtlich wieder empty.
 
Hm, ich habe das hier ganz am Anfang und ganz am Ende der Anzeige eingefügt:
PHP:
echo '<pre>'; 
print_r($_POST); 
echo '</pre>';
Angezeigt wurde jeweils ein leeres Array. Danach habe ich nach Wichtigkeit sortiert und [sort]=>w wurde angezeigt. Danach habe ich auf Datensatz löschen geklickt und es wurde eben diese Aktion angezeigt, das [sort]=>w aber nicht mehr. Bin ich auf der richtigen Fährte??
 
Bin ich auf der richtigen Fährte??
Die Frage erübrigt sich doch wohl, oder? Und wenn du mal überlegst, warum hinterher nichts mehr im $_POST-Array steht, könntest du darauf kommen, dass das Script dann ja nicht mehr vom Formular aufgrufen wird. Entweder das Sortier-Flag an die URL hängen oder Sessions benutzen.
 
Ich hänge fest!
Nicht falsch verstehen, ich will keinen fertigen Code von Euch. Aber die Grundstruktur, wie man die Sache mit Sessions lösen kann, wäre schön. Momentan ist die Ausgangssituation bei mir die gleiche wie vorher. Sobald ich die Funktion "anzeigen" verlasse und nach der Datenverarbeitung an deren Anfang zurück komme, ist der Variableninhalt von $_SESSION unbekannt.
Danke schonmal
Thomas
 
Du hast in allen Scripten, in denen du auf die Session zugreifen willst, ein session_start(); am Anfang?
Du hast in dem Script, in dem das erste Mal das Sortierungsflag per Post ankommt, den Wert in die Session geschrieben?
Du greifst ansonsten nur noch auf die Session-Daten zu?
PHP:
<?php

   session_start();
   
   if (isset($_POST['sort']))
     $_SESSION['sort'] = $_POST['sort'];
     
        
   if (isset($_SESSION['sort']))
   {
      switch ($_SESSION['sort'])
      {
        case 'n': echo "&nbsp;&nbsp;&nbsp;<i>neueste oben</i>";
                  $order = "ORDER BY id DESC";
                  break;
        case 'b': echo "&nbsp;&nbsp;&nbsp;<i>bearbeiter</i>";
                  $order = "ORDER BY bearbeiter";
                  break;
        case 's': echo "&nbsp;&nbsp;&nbsp;<i>status</i>";
                  $order = "ORDER BY status";
                  break;
        case 'w': echo "&nbsp;&nbsp;&nbsp;<i>wichtigkeit</i>";
                  $order = "ORDER BY prio";
                  break;
      }
  }
  else
  {
    echo '&nbsp;&nbsp;&nbsp;<i>neueste oben</i>';
    $order = "ORDER BY id DESC";
  }
  
  $query = "Select
               `dies`,
               `das`,
               `jenes`
             from
               `tabelle`
             $order";
             
  $result = mysql_query($query)
     or die ("MySQL-Error: " . mysql_error());
?>
 
Zuletzt bearbeitet von einem Moderator:
Ich denke, das Problem ist, dass es sich hier nur um EIN einziges Skript handelt. Ja. den session_start(); hab ich drin und ja, den Wert hab ich eingangs folgendermaßen gesetzt:
PHP:
if (empty($_SESSION['sort']))
  {
    $_SESSION['sort'] = "SELECT * FROM aufgaben ORDER BY id DESC";
  }
else
  {
    $_SESSION['sort'] = $_SESSION['sort'];
  }
 
Habe dir ein Beispiel in meinen vorherigen Beitrag geschrieben.
PHP:
$_SESSION['sort'] = $_SESSION['sort'];
Dass ist absolut sinnbefreit.
 
:-? Sinnbefreit, dacht ich mir, war die Verzweiflung. :grin:
Danke Dir für das Bsp. Versuche das heut Abend mal umzusetzen.
 
Hi,
konnte es nicht abwarten und hab's direkt versucht - und alles ist gut!
Mein sinnbefreites IF-Gebilde ersetzt durch Deines und bei der Buttonabfrage für IF und SWITCH jeweils $_SESSION statt $_POST.
Und das wichtigste: Ich hab's verstanden :wink:
Vielen Dank nochmals für die Hilfestellung.
Thomas
 
Zurück
Oben