Variablen überprüfen
-
Hallo!
Ich habe in meinem Menü Buttons um die Sprache zu ändern.
Auf bestimmten Seiten sollen die Buttons immer funktionieren. Wenn aber in der URL die Variable id gesetzt wurde, dann sollen Sie keinen Link enthalten (sofern es keinen datensatz gibt).
Lokal hatte es funktioniert, aber dann nicht mehr, weil ich einen Fehler unterdrücken musste.Ich gehe auf alle seiten über
index.php?page=seite&lang=spracheHier der betroffene Code aus dem Menü:
/* Für den deutschen Bereich werden alle Seiten überprüft */ if ($_GET['page'] == "mail" || $_GET['page'] == "search" || $_GET['page'] == "index" || ($_GET['page'] == "news" && !isset($_GET['id'])) || ($_GET['page'] == "aboutus" && !isset($_GET['id'])) || $_GET['page'] == "projects" || $_GET['page'] == "support" || $_GET['page'] == "contact" || $_GET['page'] == "imprint") { echo '<a href="index.php?page='.$_GET['page'].'&lang=de'; //{START}[1] Wenn weitere Variablen gesetzt wurden (de) if (isset($_GET['offset'])) { echo '&offset='.$_GET['offset'].''; } else { } if (isset($_GET['id'])) { echo '&id='.$_GET['id'].''; } else { } //{ENDE}[1] Wenn weitere Variablen gesetzt wurden (de) echo '"><img border="0" src="../images/languages/de.bmp" width="21" height="19" alt="Deutsch/German" title="Deutsch/German"></a> '; } elseif (isset($cc_de)) { echo '<a href="index.php?page='.$_GET['page'].'&lang=de'; //{START}[2] Wenn weitere Variablen gesetzt wurden (de) if (isset($_GET['offset'])) { echo '&offset='.$_GET['offset'].''; } else { } if (isset($_GET['id'])) { echo '&id='.$_GET['id'].''; } else { } //{ENDE}[2] Wenn weitere Variablen gesetzt wurden (de) echo '"><img border="0" src="../images/languages/de.bmp" width="21" height="19" alt="Deutsch/German" title="Deutsch/German"></a> '; } else { echo '<img border="0" src="../images/languages/de.bmp" width="21" height="19" alt="n/a" title="n/a"> '; } /**********************************************************/ /* Für den englischen Bereich werden alle Seiten überprüft */ if ($_GET['page'] == "mail" || $_GET['page'] == "search" || $_GET['page'] == "index" || ($_GET['page'] == "news" && !isset($_GET['id'])) || ($_GET['page'] == "aboutus" && !isset($_GET['id'])) || $_GET['page'] == "projects" || $_GET['page'] == "support" || $_GET['page'] == "contact" || $_GET['page'] == "imprint") { echo '<a href="index.php?page='.$_GET['page'].'&lang=en'; //{START}[3] Wenn weitere Variablen gesetzt wurden (en) if (isset($_GET['offset'])) { echo '&offset='.$_GET['offset'].''; } else { } if (isset($_GET['id'])) { echo '&id='.$_GET['id'].''; } else { } //{ENDE}[3] Wenn weitere Variablen gesetzt wurden (en) echo '"><img border="0" src="../images/languages/en.bmp" width="21" height="19" alt="Englisch/English" title="Englisch/English"></a> '; } elseif (isset($cc_en)) { echo '<a href="index.php?page='.$_GET['page'].'&lang=en'; //{START}[4] Wenn weitere Variablen gesetzt wurden (en) if (isset($_GET['offset'])) { echo '&offset='.$_GET['offset'].''; } else { } if (isset($_GET['id'])) { echo '&id='.$_GET['id'].''; } else { } //{ENDE}[4] Wenn weitere Variablen gesetzt wurden (en) echo '"><img border="0" src="../images/languages/en.bmp" width="21" height="19" alt="Englisch/English" title="Englisch/English"></a> '; } else { echo '<img border="0" src="../images/languages/en.bmp" width="21" height="19" alt="n/a" title="n/a"> '; } /**********************************************************/
Und aus der Funktion.php
//{START} Überprüfen der Datensätze für die navigation (Content Control) if(isset($_GET['id'])) { $cc_de = mysql_query("SELECT dateid FROM main WHERE language='de' AND dateid='".mysql_escape_string($_GET['id'])."'") or die(mysql_error()); $cc_en = mysql_query("SELECT dateid FROM main WHERE language='en' AND dateid='".mysql_escape_string($_GET['id'])."'") or die(mysql_error()); } //{ENDE} Überprüfen der Datensätze für die navigation (Content Control)
Wäre super, wenn mir jemand helfen könnte.
Wubbel
-
Könntest du evtl. den Code mal etwas vereinfachen und überflüssiges entfernen?! Was genau sollte er denn machen und was macht er statt dessen? Und was für einen Fehler musstest du unterdrücken?
-
Fehler:
Also er hat mir immer eine Notice ausgegeben, wenn id nicht gesetzt wurde (SEHR unschön).
Um das zu unterdrücken, hab ich (wie man bei der Funktion.php sehen kann) einfach den Code in eine if-Schleife gepackt, da ich keine Änderung an der php.ini durchführen kann.if (isset($_GEt['if']
etc.Was er machen soll:
Dieser Script sol folgendes tun:
1.) Überprüfen, ob die Variable "id" in der URL gesetzt wurde (ist dies der Fall soll in der Funktion.php überprüft werden, ob ein datensatz mit der ID vorliegt.
Wenn ja -> Link verfügbar machen
Wenn nein -> Nur ein Bild (ohne Link) anzeigen
2.) Wenn der Link erzeugt werden darf, prüft das Script noch, ob die Variablen
-"offset"
-"id"
gesetzt wurden und fügt sie zum Link hinzu, damit man sich exakt die selbe Seite übersetzen lassen kann.Ich versuche jetzt den Code zu vereinfachen:
tpl_menue.php
if ($_GET['page'] == "mail" || $_GET['page'] == "search" || $_GET['page'] == "index" || ($_GET['page'] == "news" && !isset($_GET['id'])) || ($_GET['page'] == "aboutus" && !isset($_GET['id'])) || $_GET['page'] == "projects" || $_GET['page'] == "support" || $_GET['page'] == "contact" || $_GET['page'] == "imprint") { echo '<a href="index.php?page='.$_GET['page'].'&lang=de'; [...] echo '"><img border="0" src="../images/languages/de.bmp" width="21" height="19" alt="Deutsch/German" title="Deutsch/German"></a> '; } elseif (isset($cc_de)) { echo '<a href="index.php?page='.$_GET['page'].'&lang=de'; [...] echo '"><img border="0" src="../images/languages/de.bmp" width="21" height="19" alt="Deutsch/German" title="Deutsch/German"></a> '; } else { echo '<img border="0" src="../images/languages/de.bmp" width="21" height="19" alt="n/a" title="n/a"> '; }
functions.php
//{START} Überprüfen der Datensätze für die navigation (Content Control) if(isset($_GET['id'])) { $cc_de = mysql_query("SELECT dateid FROM main WHERE language='de' AND dateid='".mysql_escape_string($_GET['id'])."'") or die(mysql_error()); $cc_en = mysql_query("SELECT dateid FROM main WHERE language='en' AND dateid='".mysql_escape_string($_GET['id'])."'") or die(mysql_error()); } //{ENDE} Überprüfen der Datensätze für die navigation (Content Control)
-
Du hast immer noch nicht gesagt, was der Code (so wie er jetzt ist) macht, was er aber nicht machen soll bzw. fälschlicherweise nicht macht
Deine if-Bedingung könntest du mit in_array deutlich übersichtlicher machen
-
Wubbel schrieb:
Fehler:
Also er hat mir immer eine Notice ausgegeben, wenn id nicht gesetzt wurde (SEHR unschön).
Um das zu unterdrücken, hab ich (wie man bei der Funktion.php sehen kann) einfach den Code in eine if-Schleife gepackt, da ich keine Änderung an der php.ini durchführen kann.dazu gibts folgendes, um die notices abzuschalten (was dann in der produktion zu empfehlen wäre :))
error_reporting(E_ALL ^ E_NOTICE);
-
Wobei ein Programmierer, der etwas auf seinen Ehrenkodex hält, alle Fehler anstellt und dann so programmiert, dass trotzdem keine kommen. :p
-
Es ist so, dass er bei allen Seiten den Link angibt. Wenn aber ID gesetzt wurde und KEIN Datensatz diese ID enthält, gibt er den Link trotzdem an.
Ich möchte ID bei news und den anderen Seiten ausschließen, nur weiß ich nicht wie das zu machen ist, da es bisher nicht funktioniert hat:
|| (\_GET['page'] == "news" && !isset(_GET['id'])) ||
Wobei ein Programmierer, der etwas auf seinen Ehrenkodex hält, alle Fehler anstellt und dann so programmiert, dass trotzdem keine kommen.
Jo das will ich ja auch.
-
hast du mal in_array ausprobiert - ansonsten: setze evtl. mal entsprechend der von dir gewünschten Logik Klammern um zusammengehörige ||
siehe: Operator-Rangfolge
-
Dasd schrieb:
Wobei ein Programmierer, der etwas auf seinen Ehrenkodex hält, alle Fehler anstellt und dann so programmiert, dass trotzdem keine kommen. :p
das ist leider nicht immer möglich, besonders, wenn man zb mit fremden klassen/libs arbeitet (PEAR::DB wirft zb unmengen solcher notices...)