-
09.11.11 19:59 #16
- 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:
Handelt es sich nun aber um eine Checkbox, wird, egal was ich abfrage, der Kommentar immer eingeblendet.PHP-Code:if (!empty ($_POST['geschlecht']) && !empty ($_POST['saison']) && $_POST[geschlecht'] == 'm' && $_POST['saison'] == '2010/11') {
echo "Kommentar"; }
Code :1
<input type="checkbox" name="weltcup[]" value="Sprint"> Sprint
Entsprechend deinem Tipp hierzu habe ich die Abfrage wie folgt modifiziert:
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:PHP-Code:if (!empty ($_POST['geschlecht']) && !empty ($_POST['saison']) && $_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' && (in_array('Sprint', $_POST['weltcup']))) {
echo "Kommentar ...";}
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
-
@ 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:
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:&& @in_array('Sprint', $_POST['weltcup'])
Somit spar ich mir dasPHP-Code:if(@$variable == "a")
Ob das aber so'n guter Stil ist will ich nicht behauptenPHP-Code:if(isset($variable) && $variable == "a")

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. Wennzutrifft, dann kann die Variable nicht empty sein.PHP-Code:$_POST['geschlecht'] == 'm'
Ungetesteter Vorschlag also:
PHP-Code:if ($_POST['geschlecht'] == 'm' && $_POST['saison'] == '2010/11' && (@in_array('Sprint', $_POST['weltcup']))) {
echo "Kommentar ...";}
Für die Übereinstimmung von Niederschrift und Hirninhalt.
-
11.11.11 17:24 #18
- 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
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.PHP-Code:error_reporting(E_ALL);
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
-
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
packen, weil innerhalb des Zweiges immer alle post-angaben (bis auf Checkboxen) des Formulars verfügbar sind.PHP-Code:if(isset($_POST['name-Attribut_des_Submitbuttons'])){
// Kram
}
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.
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.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 ...";}
Für die Übereinstimmung von Niederschrift und Hirninhalt.
-
Wenn du mehrere verschiedene Kombinationen hast, und jeweils einen speziellen Kommentar willst, würde ich das eher so aufbauen:
gruß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 ...";
}
}
-
13.11.11 11:01 #21
- 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.
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.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?
@ 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
-
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"
€: Mir fällt auf, du darfst hier beim Jahr kein Slash machen. Das müsste man abändern... Also einfach statt 2010/11 201011PHP-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.";
?>
und die andere Datei baust du dann so auf:
oder noch kürzer...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];
}
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.PHP-Code:if(isset($_POST['geschlecht']) && isset ($_POST['saison']) && isset($_POST['weltcup']))
{
require("./kommentare.inc.php");
echo $comment[$_POST['geschlecht'],$_POST['saison'],$_POST['weltcup']];
}
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)
-
17.11.11 19:07 #23
- 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. Zumoniert 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.PHP-Code:echo $comment[$_POST['geschlecht'],$_POST['saison'],$_POST['weltcup']];
Viele Grüße
hawaiian
-
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
und der Quellcode: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.";
sogar getestet, also das funktioniert.PHP-Code:echo $comment[$_POST['geschlecht'].$_POST['saison'].$_POST['weltcup']];
-
18.11.11 19:23 #25
- 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
-
HTML Doku aus Kommentaren erstellen
Von mschlegel im Forum .NET CaféAntworten: 7Letzter Beitrag: 04.07.08, 11:22 -
Properties Datei mit Kommentaren schreiben
Von iNstinct im Forum JavaAntworten: 2Letzter Beitrag: 26.11.07, 07:43 -
Problem beim HInzufügen von Kommentaren
Von heimatlied im Forum PHPAntworten: 12Letzter Beitrag: 29.03.07, 15:51 -
´Spammen bei Kommentaren verhindern
Von StefanR im Forum PHPAntworten: 7Letzter Beitrag: 24.05.04, 16:16 -
Nummerierung von Kommentaren
Von Zipper02 im Forum PHPAntworten: 8Letzter Beitrag: 26.08.02, 14:05



3Danke

Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren