+ Antworten
Ergebnis 1 bis 15 von 15

Thema: PHP: Dynamische Vorauswahl klappt und klappt nicht?

  1. #1
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420

    PHP: Dynamische Vorauswahl klappt und klappt nicht?

    Zu meinem Problem - ich habe diesen folgenden Codeschnipsel:

    PHP-Code:
    // Statusmöglichkeiten
    $cat_status_desc['x'] = 'Alle';
    $cat_status_desc[0] = 'Intern';
    $cat_status_desc[1] = 'Öffentlich';
    $cat_status_desc[2] = 'Archiviert';

        
    $tocheck = (isset($_POST['status']))
            ? 
    $_POST['status']
            : 
    'x';

        
    $output    =    '<select name="status">' "\n";
        
        foreach(
    $cat_status_desc AS $status_id => $status_desc)
        {
            
    $output .= '<option' . ($tocheck == $status_id ' selected="selected"' '') . ' value="' $status_id '">' db2cont($status_desc) . '</option>' "\n";        
        }

        
    $output .= '</select>'
    Sprich ich definiere ein Array mit diversen Werten und lasse daraus mit foreach() ein SELECT erstellen. Soweit, so gut.

    Das Problem kommt mit dem automatischen Selektieren eines Eintrages. Wenn noch keinerlei Daten (POST) übertragen wurden, beinhaltet $tocheck ja nichts weiter als den String "x". Also müsste er ja den Eintrag im foreach() auswählen, der auch das "x" enthält ($status_id).

    Was passiert aber? Es wird einmal korrekterweise der Eintrag "Alle" mit "x" ausgewählt UND zusätzlich "Intern" mit dem Wert 0 ...

    Auch wenn ich das Formular dann abschicke und "Alle" auswähle, markiert er wieder "Alle" und "Intern". Bei den anderen Feldern gibt es kein Problem.

    Wieso passiert das? Ein "x" ist doch nicht gleich 0 ('x' == 0)? Oder überseh ich grad etwas?

    Wenn ich anstelle von "x" ein -10 vergebe, funktioniert es tadellos. Aber warum mit dem "x" nicht?

    Ich benutze lokal PHP 5.2 ... falls das von Interesse ist.
    Geändert von Boris (12.05.2008 um 15:06 Uhr)
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  2. #2
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Wieso das passiert ist mir grad auch nicht so klar. Aber ein "$tocheck === $status_id" behebt Dein Problem.
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  3. #3
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Nein, tut es eben nicht. Wenn ich den === Operator nehme, wird zwar "Alle" (x) korrekt markiert, dann aber 0, 1 und 2 nicht mehr.

    Ich versteh nur Bahnhof heute
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  4. #4
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Zitat Zitat von Boris Beitrag anzeigen
    Nein, tut es eben nicht. Wenn ich den === Operator nehme, wird zwar "Alle" (x) korrekt markiert, dann aber 0, 1 und 2 nicht mehr.
    Also dieser Code:
    PHP-Code:
    <?php
    // Statusmöglichkeiten
    $cat_status_desc['x'] = 'Alle';
    $cat_status_desc[0] = 'Intern';
    $cat_status_desc[1] = 'Öffentlich';
    $cat_status_desc[2] = 'Archiviert';

        
    $tocheck = (isset($_POST['status']))
            ? 
    $_POST['status']
            : 
    2;

        
    $output    =    '<select name="status">' "\n";
        
        foreach(
    $cat_status_desc AS $status_id => $status_desc)
        {
            
    $output .= '<option' . ($tocheck === $status_id ' selected="selected"' '') . ' value="' $status_id '">' $status_desc '</option>' "\n";        
        }

        
    $output .= '</select>';  
    echo 
    $output;
    ?>
    erzeugt folgenden Quelltext:
    HTML-Code:
    <select name="status">
    <option value="x">Alle</option>
    <option value="0">Intern</option>
    <option value="1">Öffentlich</option>
    <option selected="selected" value="2">Archiviert</option>
    </select>
    Du darfst dann natürlich auch die Zahlen nicht als String zuweisen sondern als numerischen Wert (: (int)"2";). "===" vergleicht ja auch den Typ der Variable.
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  5. #5
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    PHP-Code:
    <?php

    // Statusmöglichkeiten
    $cat_status_desc[0] = 'Alle';
    $cat_status_desc[1] = 'Intern';
    $cat_status_desc[2] = 'Öffentlich';
    $cat_status_desc[3] = 'Archiviert';

    // defaultwert fuer 'alle' setzen, falls kein post.wert uebergeben wurde
    $x trim($_POST['status'])!='' $_POST['status'] : 0;

    // options aufbauen
    for($i=0$i<count($cat_status_desc); $i++){
        
    $sel $x==$i " selected=\"selected\"" '';
        
    $options.= sprintf("<option%s>%s</option>"$sel$cat_status_desc[$i]);
    }

    // selector ausgeben
    echo sprintf("<select name=\"status\">%s</select>\n"$options);

    ?>
    was spricht gegen eine solche loesung?
    Geändert von theo (12.05.2008 um 15:22 Uhr) Grund: sorry ... kleiner fehler drin
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  6. #6
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Du darfst dann natürlich auch die Zahlen nicht als String zuweisen sondern als numerischen Wert (: (int)"2". "===" vergleicht ja auch den Typ der Variable.
    Das weiß ich ja auch, nur geht selbst auch das nicht. Das ist es ja eben, was ich nicht verstehe.

    was spricht gegen eine solche loesung?
    Weil ich die 0 für "Intern" brauche?
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  7. #7
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Zitat Zitat von Boris Beitrag anzeigen
    Das weiß ich ja auch, nur geht selbst auch das nicht. Das ist es ja eben, was ich nicht verstehe.
    Was geht denn an dem Beispiel (php -> html) von mir oben genau nicht?
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  8. #8
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    Zitat Zitat von Boris Beitrag anzeigen
    Weil ich die 0 für "Intern" brauche?
    aber geht man mal nur vom html aus, so wird der selector doch eh auf den ersten eintrag gesetzt. wenn der nun gar kein value hat und du nur auf die tatsache pruefst, ob das formular versendet wurde, dann ist, wenn $_POST['status'] keinen wert hat, der erste eintag uebergeben worden.
    das sollte alle probleme loesen ...
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  9. #9
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Was geht denn an dem Beispiel (php -> html) von mir oben genau nicht?
    Wenn ich mit deinem Code als Vorauswahl 2 nehme, funktioniert es soweit. Wenn ich aber das Formular dann abschicke, wird nichts mehr ausgewählt.

    Nehm ich als Vorauswahl das X, wird auch nichts ausgewählt.

    Das ändert auch nichts, wenn ich die Zahlentypen explizit mit (int) vorgebe.
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  10. #10
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    das sollte alle probleme loesen
    Das Problem lässt sich auch "lösen", indem ich für "alle" halt -10 definiere. Ich will aber wissen, warum es nicht geht wie ich mir das denke - aus reinem Wissensdurst.
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  11. #11
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Zitat Zitat von Boris Beitrag anzeigen
    Wenn ich mit deinem Code als Vorauswahl 2 nehme, funktioniert es soweit. Wenn ich aber das Formular dann abschicke, wird nichts mehr ausgewählt.

    Nehm ich als Vorauswahl das X, wird auch nichts ausgewählt.

    Das ändert auch nichts, wenn ich die Zahlentypen explizit mit (int) vorgebe.
    Ich glaub, die Sonne ist zu stark und ich verstehe das Problem deswegen nicht
    PHP-Code:
    <?php
    // Statusmöglichkeiten
    $cat_status_desc['x'] = 'Alle';
    $cat_status_desc[0] = 'Intern';
    $cat_status_desc[1] = 'Öffentlich';
    $cat_status_desc[2] = 'Archiviert';

    $output "<form action='".$PHP_SELF."' method='post'>";

        
    $tocheck = (isset($_POST['status']) && $_POST['status'] != 'x')
            ? (int)
    $_POST['status']
            : 
    'x';

        
    $output    .=    '<select name="status">' "\n";
        
        foreach(
    $cat_status_desc AS $status_id => $status_desc)
        {
            
    $output .= '<option' . ($tocheck === $status_id ' selected="selected"' '') . ' value="' $status_id '">' $status_desc '</option>' "\n";        
        }

        
    $output .= '</select><input type="submit"></form>';  
    echo 
    $output;
    ?>
    Gibt es damit immernoch ein Problem?
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  12. #12
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Ah, das zusätzliche ... AND $_POST['status'] != 'x' hat es gebracht

    Ich glaub ich hab zu lang am Rechner gesessen - in den letzten Tagen etwas immer über 14 Stunden pro Tag
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  13. #13
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    ok ... fuer deinen wissensdurst noch eine loesung von mir
    PHP-Code:
    <?php

    echo $_POST['status'];

    // Statusmöglichkeiten
    $cat_status_desc['x'] = 'Alle';
    $cat_status_desc[0] = 'Intern';
    $cat_status_desc[1] = '&Ouml;ffentlich';
    $cat_status_desc[2] = 'Archiviert';

    // defaultwert fuer 'alle' setzen, falls kein post.wert uebergeben wurde
    $x trim($_POST['status'])!='' $_POST['status'] : 'x';

    // options aufbauen
    while(list($key,$val) = each($cat_status_desc)){
        
    $sel = (string)$x===(string)$key " selected=\"selected\"" '';
        
    $options.= sprintf("<option%s value=\"%s\">%s</option>"$sel$key$val);
    }

    // selector ausgeben
    $selector sprintf("<select name=\"status\">%s</select>\n"$options);
    $selector.= "<input type=\"submit\" name=\"submit\" value=\"senden\">";

    // formular ... zum testen  (c:
    echo sprintf("<form action=\"{$_SERVER['PHP_SELF']}\" method=\"post\">%s</form>"$selector);

    ?>
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  14. #14
    TP-Greis Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Boris lebt für das TP und seine User Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    Danke ... auch ne Variante, aber brrrr ... find ich fürchterlich zu lesen
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  15. #15
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    Zitat Zitat von Boris Beitrag anzeigen
    Danke ... auch ne Variante, aber brrrr ... find ich fürchterlich zu lesen
    tell me why ...
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51