tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
24
ZUGRIFFE
908
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    hawaiian hawaiian ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Ort
    Kempten (Bayern)
    Beiträge
    27
    Wunderbar, es klappt. Und zwar perfekt. Ich bin begeistert. Habe alle Abfragevariationen durchprobiert. Dir, para_noid, herzlichen Dank für deine Hilfe. Und deine Erläuterungen haben mich auch den Lösungsweg verstehen lassen.

    Darf ich jetzt nochmals mein anderes Problem aufgreifen? Da ging es darum, bei bestimmten Formularabfragen Zusatzinfos (ich bezeichne sie auch hier als Kommenatre) ebenfalls aus einer externen Datei einzublenden. Das funktioniert einwandfrei mit folgendem Code:

    PHP-Code:
    if (!empty ($_POST['geschlecht']) && !empty ($_POST['saison']) && $_POST[geschlecht'] == 'm' && $_POST['saison'] == '2010/11') {
        echo "Kommentar"; } 
    Handelt es sich nun aber um eine Checkbox, wird, egal was ich abfrage, der Kommentar immer eingeblendet.

    Code :
    1
    
    <input type="checkbox" name="weltcup[]" value="Sprint"> Sprint

    Entsprechend deinem Tipp hierzu habe ich die Abfrage wie folgt modifiziert:

    PHP-Code:
    if (!empty ($_POST['geschlecht']) && !empty ($_POST['saison']) && $_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' && (in_array('Sprint'$_POST['weltcup']))) {
      echo 
    "Kommentar ...";} 
    Und auch diese Lösung war eine grundsätzlich erfolgreiche! Bei meinen Tests habe ich aber festgestellt, dass immer dann, wenn die Checkbox nicht mit abgefragt wird, folgende zwei Hinweise kommen:

    Notice: Undefined index: weltcup ...

    Warning: in_array() expects parameter 2 to be array, null given ...

    Beide beziehen sich auf die Zeile mit dem obigen Code. Sie sind mir zwar in etwa verständlich (ich habe auch schon derartige Hinweis- bzw. auch Fehlermeldungen selbst lösen können), hier ist es mir bisher allerdings noch nicht gelungen. Ich probier's noch weiter, aber vielleicht hast du ja noch einen abschließenden Tipp ...

    Viele Grüße
    hawaiian
     

  2. #17
    Avatar von para_noid
    para_noid para_noid ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    144
    @ erster Punkt: schön

    @ zweiter Punkt:

    da du "in etwa verständlich" schriebst, hol ich nochmal den Erklärbär hervor: wenn keine Checkbox gesetzt ist existiert das Array $_POST['weltcup'] nicht. Du müsstest bei solchen Optionen also immer erst abfragen, ob es $_POST['weltcup'] überhaupt gibt (mit isset). Weniger Schreibarbeit bei selben Resultat für die Abfrage wäre ein @ vor die Funktion zu setzen:

    PHP-Code:
    && @in_array('Sprint'$_POST['weltcup']) 
    Das @ ist der s.g. Fehler-Kontroll-Operator, der die Fehlerausgabe unterdrückt. Ich nutze ihn oft um Variablen (meistens Sessions) auf Werte zu prüfen, ohne zu wissen, ob die Variable überhaupt existent ist:

    PHP-Code:
    if(@$variable == "a"
    Somit spar ich mir das

    PHP-Code:
    if(isset($variable) && $variable == "a"
    Ob das aber so'n guter Stil ist will ich nicht behaupten


    Bei deinem Beispiel bin ich mir nicht ganz sicher, ob auch vor $_POST['weltcup'] auch ein @ müsste oder ob die Fehlermeldung über die Funktion abgefangen würde, kann hier grad nicht testen.

    Du könntest den Code noch ein bisschen verringern, wenn du die empty-Fragen vorher weglässt. Wenn
    PHP-Code:
     $_POST['geschlecht'] == 'm' 
    zutrifft, dann kann die Variable nicht empty sein.

    Ungetesteter Vorschlag also:

    PHP-Code:
    if ($_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' && (@in_array('Sprint'$_POST['weltcup']))) {
      echo 
    "Kommentar ...";} 
    hawaiian bedankt sich. 
    Für die Übereinstimmung von Niederschrift und Hirninhalt.

  3. #18
    hawaiian hawaiian ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Ort
    Kempten (Bayern)
    Beiträge
    27
    Das Vorgehen mit dem Fehler-Kontroll-Operator @ kannte ich bis jetzt nicht. Der gleiche Effekt wird erreicht, wenn ich
    PHP-Code:
    error_reporting(E_ALL); 
    auf 0 setze. Die Notices und Warnings sind dann verschwunden, die Ursache damit allerdings noch nicht. Mit isset hatte ich es schon probiert, allerdings noch keinen Erfolg gehabt. Da mache ich wohl noch irgendetwas falsch. Aber ich probier's fleißig weiter.

    Dein Tipp, den Code zu verringern, indem ich empty weglasse, führt übrigens auch zu dem Hinweis: Undefined Index ... hm, jetzt kommt mir in diesem Zusammenhang noch eine andere Idee. Muss ich mal testen.

    para_noid, ich möchte mich nochmals herzlich für deine Mühe bedanken. Mein Ziel, die beiden "Ergebniskommentare" zu definieren, ist dank deiner Hilfe erreicht worden. Und mit den beiden Fehlerhinweisen komme ich, denke ich, schon noch klar.

    Viele Grüße
    hawaiian
     

  4. #19
    Avatar von para_noid
    para_noid para_noid ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    144
    Gern geschehen. Das mit der Fehlermeldung wundert mich doch etwas, da empty nach meinem Wissen nicht abfragt, ob eine Variable gesetzt ist.

    Ich weiß nicht ob du das bereits so hast, aber wenn du mit mehreren Prüfungen auf eine mögliche Formularabsendung zugreifen möchtest, würd ich das Ganze immer in ein

    PHP-Code:
    if(isset($_POST['name-Attribut_des_Submitbuttons'])){
    // Kram

    packen, weil innerhalb des Zweiges immer alle post-angaben (bis auf Checkboxen) des Formulars verfügbar sind.
    Die Gleichsetzung von @ mit no-error-reporting würd ich zwar nicht so sehen, aber das war auch nur ein Vorschlag hinsichtlich Codeverringerung. Funktionieren muss es ja erstmal.

    PHP-Code:
    if (isset($_POST['geschlecht']) && isset ($_POST['saison']) && isset($_POST['weltcup']) && $_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' &&  in_array('Sprint'$_POST['weltcup'])) {
      echo 
    "Kommentar ...";} 
    Hattest du das so probiert? Isset gibt btw auch false zurück, wenn der index weltcup existiert, aber der Wert null ist. Vllt hakt es ja da.
     
    Für die Übereinstimmung von Niederschrift und Hirninhalt.

  5. #20
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Wenn du mehrere verschiedene Kombinationen hast, und jeweils einen speziellen Kommentar willst, würde ich das eher so aufbauen:

    PHP-Code:
    if(isset($_POST['geschlecht']) && isset ($_POST['saison']) && isset($_POST['weltcup']))
    {
        if(
    $_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' &&  in_array('Sprint'$_POST['weltcup']))
        {
             echo 
    "Kommentar ...";
        }
        elseif(
    $_POST['geschlecht'] == 'w' && $_POST['saison'] == '2009/10' &&  in_array('Sprint'$_POST['weltcup']))
        {
             echo 
    "Kommentar2 ...";
        }
        
    //falls keines von alldem zutrifft, was hier eher nicht passieren wird
        
    else
        {
             echo 
    "Ungültige Kombination ausgewählt ...";
        }

    gruß
     

  6. #21
    hawaiian hawaiian ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Ort
    Kempten (Bayern)
    Beiträge
    27
    So, Fragen und Probleme endgültig gelöst. Alles klappt nun reibungslos und fehlerfrei. Und ich ärgere mich über mich selber.

    PHP-Code:
    if (isset($_POST['geschlecht']) && isset ($_POST['saison']) && isset($_POST['weltcup']) && $_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' && in_array('Sprint', $_POST['weltcup'])) {
    echo "Kommentar ...";}

    Hattest du das so probiert?
    Genau so hatte ich es getestet. Na ja, fast. Ich hatte schlichtweg, wohl bedingt durch hin- und herkopieren, das dritte isset unterschlagen. Und trotz mehrmaligem Korrekturlesen nicht bemerkt. Erst, als ich deinen Code über den meinen gelegt und Zeichen für Zeichen verglichen habe, ist mir das aufgefallen. Tut mir leid, dass ich dadurch nochmals unnötige Helferzeit beansprucht habe.

    @ Lime:
    Danke auch für deinen Vorschlag. Ich merke ihn mir vor. Was ich als Kommentare bezeichne, sind Zusatzinfos unterschiedlichen Charakters und Aufbaus, zum Teil auch Tabellen mit mehrzeiligem Inhalt. Allein für die Saison 2010/11 wird die externe Datei so um die 500 Zeilen umfassen. Mit elseif würde ich, glaube ich, den Überblick verlieren. Darum habe ich mich hier für die Einbindung verschiedener externer Dateien entschieden und auch eine jeweils eigenständige Kommentardefinition.

    Viele Grüße und nochmals danke
    hawaiian
     

  7. #22
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Mh, aber wie ich das verstehe nimmst du für jeden individuellen Kommentar nochmal die kompletten "!empty()" mit? Das ist eigentlich recht sinnloser Code. Oder verstehe ich das falsch?

    Möglich wär auch eine Bastelei, dreidimensionale Arrays zur Ausgabe des Kommentars... Jedoch etwas kompliziert dann. Mit Arrays hab ich es grundlegend eh nicht sonderlich, aber nen Versuch wäre es wert.

    leg eine Datei an, z.B. "kommentare.inc.php"
    PHP-Code:
    <?PHP
    $comment
    [w,200910,weltcup] = "Kommentar für weibliche Sieger des Weltcups im Jahre 2009/10.";
    $comment[m,201011,weltcup] = "Kommentar für männliche Sieger des Weltcups im Jahre 2010/11.";
    ?>
    €: Mir fällt auf, du darfst hier beim Jahr kein Slash machen. Das müsste man abändern... Also einfach statt 2010/11 201011

    und die andere Datei baust du dann so auf:
    PHP-Code:
    if(isset($_POST['geschlecht']) && isset ($_POST['saison']) && isset($_POST['weltcup'])) 

        
    $geschlecht $_POST['geschlecht'];
        
    $saison $_POST['saison'];
        
    $weltcup $_POST['weltcup'];

        require(
    "./kommentare.inc.php");
        echo 
    $comment[$geschlecht,$saison,$weltcup];

    oder noch kürzer...
    PHP-Code:
    if(isset($_POST['geschlecht']) && isset ($_POST['saison']) && isset($_POST['weltcup'])) 

        require(
    "./kommentare.inc.php");
        echo 
    $comment[$_POST['geschlecht'],$_POST['saison'],$_POST['weltcup']];

    Ich habs nicht ausprobiert, müsste theoretisch aber funktionieren. So hast du nicht immer einen kompletten neuen elseif für jeden Kommentar, sondern nur eine neue Array-Variable mit verschiedenen Eigenschaften.
    Die Kommentar-Datei müsstest du halt "gut" strukturieren, damit du den Überblick behältst.
    €: Ja ganz vergessen, warum ich da ne zweite Datei für gemacht hab: nur damit der Code "rein" bleibt und du den Inhalt schön vom Code trennst...

    Gruß
    Geändert von Lime (13.11.11 um 11:19 Uhr)
     

  8. #23
    hawaiian hawaiian ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Ort
    Kempten (Bayern)
    Beiträge
    27
    @ Lime
    Aus Zeitgründen komme ich erst heute dazu, mich für deinen ergänzenden Tipp zu bedanken. Zu
    PHP-Code:
    echo $comment[$_POST['geschlecht'],$_POST['saison'],$_POST['weltcup']]; 
    moniert php ein Komma und erwartet stattdessen eine schließende Klammer ( ] ). Auch die "lange" Version führt zu dieser Fehlermeldung. Ich teste mal noch weiter und merke mir deinen Vorschlag auf jeden Fall vor.

    Viele Grüße
    hawaiian
     

  9. #24
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    372
    Dass die kurze Version nicht funktioniert, war mir irgendwo klar... So schlau kann PHP kaum sein. *g*
    Aber die lange Version müsste eigentlich schon funktionieren, es sei denn PHP beherrscht keine dreidimensionalen Arrays... Das hab ich noch von C# intus.
    Die Alternative wäre, die ganzen "Bedingungen" zusammenzufassen...

    komentare.inc.php
    PHP-Code:
    $comment['w200910weltcup'] = "Kommentar für weibliche Sieger des Weltcups im Jahre 2009/10.";
    $comment['m201011weltcup'] = "Kommentar für männliche Sieger des Weltcups im Jahre 2010/11."
    und der Quellcode:
    PHP-Code:
    echo $comment[$_POST['geschlecht'].$_POST['saison'].$_POST['weltcup']]; 
    sogar getestet, also das funktioniert.
    hawaiian bedankt sich. 

  10. #25
    hawaiian hawaiian ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Ort
    Kempten (Bayern)
    Beiträge
    27
    Ja, jetzt funktioniert's, der Fehler ist beseitigt. Dann werde ich mich mal an die Arbeit machen ...

    Vielen Dank
    hawaiian
     

Ähnliche Themen

  1. HTML Doku aus Kommentaren erstellen
    Von mschlegel im Forum .NET Café
    Antworten: 7
    Letzter Beitrag: 04.07.08, 11:22
  2. Properties Datei mit Kommentaren schreiben
    Von iNstinct im Forum Java
    Antworten: 2
    Letzter Beitrag: 26.11.07, 07:43
  3. Problem beim HInzufügen von Kommentaren
    Von heimatlied im Forum PHP
    Antworten: 12
    Letzter Beitrag: 29.03.07, 15:51
  4. ´Spammen bei Kommentaren verhindern
    Von StefanR im Forum PHP
    Antworten: 7
    Letzter Beitrag: 24.05.04, 16:16
  5. Nummerierung von Kommentaren
    Von Zipper02 im Forum PHP
    Antworten: 8
    Letzter Beitrag: 26.08.02, 14:05