Fehler bei Wertübergabe per Get?!

mammuteffect

Mitglied
Hallo lieber PHP-Gemeinde,
und wieder habe ich kurz vor Ladenschluss ein kniffliges (oder auch nicht) Rätsel, das ich nicht zu lösen vermag.
Folgendes: Um News zu kommentieren wird die Seite index.php?news_id="ZAHL" aufgerufen, die dann ein Formular zum Eintragen enthält.
Nun tritt aber teilweise der Fehler auf, dass in die Datenbank statt der wirklichen ID der News einfach "0" eingetragen wird. Aber, wie gesagt, nur ab und zu. Ich kann mir das nicht erklären, ich hoffe ihr vielleicht. Anbei noch der Code, der es in die Datenbank eintragen sollte :/

PHP:
    elseif ($_SESSION[user_nickname])
        {
        $text = trim($text);
        $text = strip_tags($text);

        $insert_date = time();
        $sql_insert_comment = "INSERT INTO comments (news_id, autor, text, datum) values ('$news_id', '$user_id', '$text', '$insert_date')";
        mysql_query($sql_insert_comment) or die(mysql_error());
        $smarty->assign("comment_notice", 'Ihre Nachricht wurde erfolgreich gesendet! Sie werden gleich weitergeleitet. Falls ihr Browser keine automatische Weiterleitung unterstützt, klicken sie bitte <a href="/index.php">hier</a>.<meta http-equiv="refresh" content="3; URL=index.php">');
        }
 
Also ich bin nicht 100%ig sicher, aber versuche mal diese Schreibweise:
PHP:
 $sql_insert_comment = "INSERT INTO comments (news_id, autor, text, datum) values ('.$news_id.', '.$user_id.', '.$text.', '.$insert_date.')";

Kann sein, dass der Fehler nicht damit zusammenhängt, aber Variablen sollten mit einem Punkt im String eingebunden werden. Falls ich mich irre korrigiert mich bitte.

Gruß,
derPfaff
 
Bei Werten, die per GET-Methode übergeben werden, solltest du mit der $_GET-Variable arbeiten.
PHP:
$sql_insert_comment = "INSERT INTO comments (news_id, autor, text, datum) values ('".mysql_real_escape_string($_GET['news_id'])."', '". mysql_real_escape_string($_GET['user_id'])."', '". mysql_real_escape_string($_GET['text']).', '". mysql_real_escape_string($_GET['insert_date'])."')";
POST analog dazu. Vorher muss natürlich noch geprüft werden, ob die Variablen und Werte damit überhaupt gesetzt sind und ob sie die erwarteten Werte enthalten.
 
Hmm, aber das erklärt alles nicht, warum es manchmal klappt und manchmal nicht, oder?
Könnte es vielleicht sein, dass wenn zB. diese Zeichen ' verwendet werden, die Übergabe mittendrin abgebrochen wird und deswegen die restlichen Werte nicht bzw. default mit 0 eingetragen werden? Allerdings würde da doch auch eher eine Fehlermeldung kommen, nicht?
 
Kann es sein, dass $news_id im Script irgendwo noch einmal definiert wird und die globale Variable $news_id die über die URL kommt überschreibt? Das würde erklären warum es in einigen Scripts geht und in einigen nicht.

Ich würde dir auch empfehlen, Gumbos' Rat zu beherzigen und mit dem $_GET/$_POST-Array zu arbeiten und register_globals auszuschalten.

Ausserdem empfehle ich dir, bei Zugriffen auf Arrays wie $_SESSION/$_GET/$_POST/etc. die Keys in Anführungszeichen zu setzen:
$_SESSION['BeispielFeld'] anstelle von $_SESSION[BeispielFeld]

Funktionieren tut beides, solange du keine Konstante hast die BeispielFeld heisst. Ich erwähne das darum, weil das bei mir mal die Ursache für ein Fehler war und ich stundenlang gesucht habe.
 
Zuletzt bearbeitet:
So Freunde der Sonne, es hat gar nichts mit der Abfrage zu tun sondern ... mit dem Formular auf der Seite davor:

PHP:
<form action="/index.php?news_id={$news.0.id}" 
    <input type=hidden name=news_id value={$news.0.id}>
    <input type=hidden name=mod value=insert_comment>

Bei mir (MIT FIREFOX), wo es klappt, wird alles an die URL mit rangehängt, also auch news_id.
Bei den Leuten, wo es nicht klappt (INTERNET EXPLORER), sieht es allerdings so aus:
URL/index.php?mod=insert_comment&text=hallo ,
also nix mit news_id. Irgendjemand eine Ahnung?



 
Zuletzt bearbeitet:
Zurück