[gelöst] Fehlermeldung nach Login vermeiden
am 14.10.2009 - 21:13 Uhr in
Hallo,
ich habe folgendes Problem:
ich habe eine Seite (z.B. www.example.com/seite1.php?id=3), die einen dem Link beigefügten Parameter (hier: id=3) per $_GET aufruft und dann in einer Datenbank nachschaut, ob dort ein Eintrag mit ID=3 existiert. Wenn nicht, dann erfolgt die Anzeige der Fehlermeldung "ID wurde nicht gefunden" per drupal_set_message.
Das funktioniert eigentlich auch gut.
Leider kommt es auch zur Anzeige obiger Fehlermeldung, nachdem man sich von dieser Seite aus in Drupal angemeldet hat (per Login-Block in der linken Spalte).
Wieso?
Kann ich diese Fehlermeldung nach dem Login unterdrücken und wenn ja, wie?
Vielen Dank im Voraus.
Gruß,
Nick Dilis
Anbei der grobe Aufbau des Codes:
if (isset($_GET['id'])) { $id = $_GET['id'] + 0; } else { $id = 0; }
$ergebnis = db_query('SELECT wert1, wert2 FROM {TABELLENNAME} WHERE id = %d',$id);
if ($row = db_fetch_object($ergebnis)) {
echo $row->wert1;
}
else {
drupal_set_message('Diese ID existiert nicht!','error');
}
- Anmelden oder Registrieren um Kommentare zu schreiben

Was willst Du erreichen?
am 15.10.2009 - 12:48 Uhr
Hallo,
Ich habe nicht verstanden, was Du erreichen möchtest. Beschreib das doch mal ganz allgemein. Es würde mich wunden, wenn es dafür in Drupal nicht bereits schon eine Lösung geben würde.
Schöne Grüße,
| comm-press.de
Ralf Hendel
Hallo, ok, dann versuche ich
am 15.10.2009 - 23:56 Uhr
Hallo,
ok, dann versuche ich noch einmal, das Problem zu schildern:
1. Aufruf der seite "seite1.php?id=3" (3 ist hier ein Beispiel; der Wert ist dynamisch)
2. die Seite wird geladen, der Wert der id wird ausgelesen (id=>3), in einer Datenbank wird geschaut, ob eine Zeile existiert, in der eine id den Wert 3 hat.
Wenn ja, Ausgabe der Werte des entsprechenden Datenbankeintrags; wenn nein, Anzeige des Fehlers 'ID existiert nicht' per drupal_set_message.
3. Obiger Code funktioniert: Ein Datenbankeintrag mit ID = 3 existiert, die Zeile aus der Datenbank wird ausgegeben. Der Fehler 'ID existiert nicht' wird also logischerweise nicht angezeigt. Allerdings...
4. ... Jetzt das Problem: wenn ich als nicht angemeldeter Besucher diese Seite (seite1.php?id=3) aufgerufen habe, so wird die Seite zunächst korrekt dargestellt (Ausgabe der Zeile aus Datenbank, keine Anzeige des Fehlers 'ID existiert nicht'). Melde ich mich aber auf dieser Seite (seite1.php?id=3) über den Standard-Login-Block in der linken Menü/Navigationsleiste an, so erscheint auf der Seite (seite1.php?id=3) nach erfolgter Anmeldung plötzlich die Fehlermeldung 'ID existiert nicht' und darunter die Ausgabe der Ergebnisse aus der Datenbank.
Warum ist dies so und wie kann ich die Anzeige des Fehlers vermeiden?
Ich hoffe, dass die Formulierung verständlicher war.
Danke und Gruß,
Nick Dilis
Beschreib bitte die Funktion, nicht Deinen Code
am 16.10.2009 - 08:10 Uhr
Moin!
Beschreib doch bitte umgangsprachlich Dein gewünschtes Ziel: das, was Du erreichen möchtest, nicht Deinen Algorithmus.
Was möchtest Du auf der Seite erreichen?
Schöne Grüße,
| comm-press.de
Ralf Hendel
Moin, entweder Sie
am 16.10.2009 - 20:04 Uhr
Moin,
entweder Sie verstehen mich nicht oder ich bin zu blöde um mich richtig auszudrücken.
Ich glaube aber, daß meine Frage war, warum beschriebenes Problem auftritt.
Ich glaube auch gechrieben zu haben, daß ich auf dieser Seite gerne errreichen möchte, dass der beschriebene Fehler nach dem Login nicht mehr auftritt.
Der Algoritmus wurde aufgeführt, um das evtl. durch meinen Code verursachte Problem ausfindig zu machen.
Schöne Grüße.
Nick Dilis
Ist das ein Bug in Drupal?
am 19.10.2009 - 11:09 Uhr
Hallo zusammen,
ist das beschriebene Problem ein Bug in Drupal?
Ist der beschriebene Fehler bei anderen auch schon aufgetreten?
Was passiert bei einem Login in Drupal mit übergebenen Parametern?
Wie kann ich die Anzeige der Fehlermeldung nach eínem Login von dieser Seite aus vermeiden?
Danke und Gruß,
Nick Dilis
Meldung
am 19.10.2009 - 11:48 Uhr
ist das beschriebene Problem ein Bug in Drupal?
Nein.
Ist der beschriebene Fehler bei anderen auch schon aufgetreten?
Nicht, das ich wüsste. Es sei denn, jemand verwendet exakt den von Dir gezeigten Code.
Was passiert bei einem Login in Drupal mit übergebenen Parametern?
Sie werden ausgewertet.
Wie kann ich die Anzeige der Fehlermeldung nach eínem Login von dieser Seite aus vermeiden?
Ändere Deinen Code dahingehend, dass die Fehlermeldung nicht angezeigt wird, wenn kein Parameter übergeben wurde.
Momentan gibst Du die Fehlermeldung nämlich auch aus, wenn der Parameter "id" überhaupt nicht existiert.
Setz die Klammerung richtig, dann funktioniert das auch.
hth,
Stefan
--
sei nett zu Deinem Themer
Verstehe ich nicht ganz
am 19.10.2009 - 13:16 Uhr
Hallo Stefan,
zunächst danke für Dein Posting.
Alllerdings habe ich mit folgender Zeile doch definiert, daß id => 0 ist, falls im Link der Parameter id nicht aufgeführt und somit nicht ausgelesen werden kann.
Wenn also in der Datenbank keine id mit dem Wert 0 vorkommt, müsste die Fehlermeldung angezeigt werden, nicht aber die Werte aus der Datenbank. Beides zusammen ist doch mit dem if else ausgeschlossen.
Könntest Du mir den Beispielcode bitte so abändern, dass er aus Deiner Sicht funktionieren sollte?
Tausend Dank!
Grüße,
Nick Dilis
Dein Code ist irgendwie sehr
am 19.10.2009 - 13:29 Uhr
Dein Code ist irgendwie sehr verwirrend ....
<?php
if (isset($_GET['id']))
{
$id = $_GET['id'] + 0;
}
else
{
$id = 0;
}
$ergebnis = db_query('SELECT wert1, wert2 FROM {TABELLENNAME} WHERE id = %d',$id);
if ($row = db_fetch_object($ergebnis)) {
echo $row->wert1;
}
else {
drupal_set_message('Diese ID existiert nicht!','error');
}
?>
Warum so kompliziert, warum nicht einfach
<?phpif (isset($_GET['id']))
{
$id = $_GET['id'] + 0;
$ergebnis = db_query('SELECT wert1, wert2 FROM {TABELLENNAME} WHERE id = %d',$id);
if ($row = db_fetch_object($ergebnis))
{
echo $row->wert1;
}
}
else
{
drupal_set_message('Diese ID existiert nicht!','error');
}
?>
wozu musst du die ID noch auf Null setzen. Und wenn keine ID übergeben wird, wieso soll dann trotzdem eine Datenbank-Abfrage gemacht werden? Das sind so die Frage nach dem Sinn dieses Codes, der schon mehrmal hier erfragt wurde.
Edit: Worin liegt eigentlich der Sinn von
<?php$id = $_GET['id'] + 0;
?>
Meldung
am 19.10.2009 - 13:40 Uhr
Dein Code ist irgendwie sehr verwirrend ....
Dafür tut Deiner genau das, was er nicht soll :-). Und zwar wird die Fehlermeldung nur dann angezeigt, wenn keine Id übergeben wurde. Sie soll (vermute ich jetzt einfach mal) jedoch nur dann angezeigt werden, wenn
a) eine Id übergeben und
b) diese Id nicht gefunden wurde.
Also so:
<?phpif (isset($_GET['id']) && is_numeric($_GET['id']))
{
$id = $_GET['id'];
$ergebnis = db_query('SELECT wert1, wert2 FROM {TABELLENNAME} WHERE id = %d',$id);
if ($row = db_fetch_object($ergebnis)) {
echo $row->wert1;
}
else {
drupal_set_message('Diese ID existiert nicht!','error');
}
}
?>
Edit: Worin liegt eigentlich der Sinn von
<?php$id = $_GET['id'] + 0;
?>
Das soll eine Konvertierung des übergebenen Wertes nach int erwirken. Besser (und definitiv sicherer) ist jedoch eine Überprüfung mittels
is_numeric.hth,
Stefan
--
sei nett zu Deinem Themer
Hallo Stefan, Tausend Dank,
am 19.10.2009 - 14:29 Uhr
Hallo Stefan,
Tausend Dank, ich glaube so funktioniert das (Getestet wird später).
Viele Grüße,
Nick Dilis
Hat so geklappt, Danke! [k.T.]
am 19.10.2009 - 16:43 Uhr
Hat so geklappt, Danke! [k.T.]