Formular wird falsch abgesendet

Das Statement war doch nur ein Beispiel, damit du siehst, was ich mit den Verkettungsoperatoren meine.
Das hat mit PDO nichts zu tun.

Nunja dieses PDO scheint ja aber nicht zu funktionieren :stress:

[quote=“Mgier”]
@hoffman: Wie sollte man dann bei einer dynamischen Seite am besten vorgehen, auf der man praktisch immer Parameter and die url dranhängt?[/quote]

Einfach die Parameter mit ins Formular schreiben, etwa mit versteckten input-Elementen.
Ist zwar etwas unbequem, aber das hat man sich letztlich selber eingebrockt, wenn man
bei ‘normalen’ Seiten einfach vortäuscht, sie wären von einem Formular abgeschickt worden,
was eben der Fall ist, wenn man GET-Parameter an die URI anhängt.

Um jetzt zu entscheiden, ob es formal noch in Ordnung ist, GET-Parameter bei action
anzuhängen, wenn man das Formular per GET verschickt, müßte man sich verschiedene
Spezifikationen angucken, im Zweifelsfalle ist auch da nicht definiert, was ein korrektes
Verhalten ist - das Darstellungsprogramm könnte einfach nur die Parameter senden, die
im Formular stehen oder diese auch an die in ‘action’ anhängen. Meine Vermutung geht dahin,
daß es zur Enstehung von HTTP gar nicht vorgesehen war, die GET-Parameter so zu nutzen,
wie das viele Leute bei URIs zu PHP-Skripten tun. Wenn diese Praxis dann damit kollidiert,
daß wirklich mal wie ursprünglich gedacht ein Formular losgeschickt wird, wird es formal
wirklich knifflig, was man besser vermeiden sollte, indem man dann alle Parameter ins
Formular einträgt.

Ich hatte auch schon bei ein paar Seiten Spaß damit, wo ich das Formular per POST
versenden wollte, aber ebenfalls normalerweise GET-Parameter angehängt habe.
Das habe ich dann eben doch ins Formular geschrieben und bei der fraglichen Ziel-Adresse
eben POST statt GET ausgewertet - für alle Parameter, auch wenn dies das Skript etwas
verkompliziert hat ;o)

@hoffmann
POST ist einfach gesagt POST^^ Es hängt eigene Daten nach dem Header an, und macht letzten Endes auch ein GET. POST impliziert GET daher erweitert GET. Nur POST gibt es nicht.

Genauso kann man “/index.php?id=123” verwenden und das Formular via GET absenden, dann werden die Formularfelder dahinter noch dran gehängt. Das macht auch jeder Browser eigl. richtig.

GET hat auch nix mit ? und & zu tun, das ist alles dem Webserver überlassen. GET ist nur ne anfrage eines Pfades oder what ever. Zeichen sind nicht soweit beschränkt.

Nun für mich wird das hier leicht unübersichtlich langsam :astonished: .
Ihr redet hier von GET in POST usw… dürfte man da mal kurz erfahren wo ihr das her habt? Vielen dank :slight_smile:.

//UPDATE:
An der PDO mal das „. NOW() .“ auf ‚NOW()‘ geändert und ui nach absenden:

Notice: Undefined variable: db_host in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 112 Notice: Undefined variable: db_name in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 112 Notice: Undefined variable: db_user in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 112 Notice: Undefined variable: db_pass in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 112 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'www-data'@'localhost' (using password: NO)' in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php:112 Stack trace: #0 /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php(112): PDO->__construct('mysql:host=;dbn...', NULL, NULL) #1 /var/www/vhosts/antribute.eu/httpdocs/themes/antributeV2/body.tpl(57): include('/var/www/vhosts...') #2 /var/www/vhosts/antribute.eu/httpdocs/index.php(27): require('/var/www/vhosts...') #3 {main} thrown in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 112

//UPDATE2:
Problem behoben ich hatte nur da vergessen die Variablen zu setzten… funktioniert nun aber dennoch nicht! :ps:

Das ist hier eine Glaubensdiskussion :wink:

Naja, um zu deinem (Verständnis-)Problem zu kommen:

INSERT INTO tbl (datum, bla, blubb) VALUES (NOW(), 'bla', 'blubb')

Das hier ist hat nichts mit PHP zu tun. Du kannst das auch bei phpmyadmin einfügen und es wird funktionieren. NOW() ist eine Funktion(?) von Mysql, die ebenso wie der Rest der Anfrage rein von Mysql interpretiert wird, von PHP wird das nur übergeben. PDO ist dann wohl eine Art, das zu übermitteln.

Mfg :wink2:

Das das im phpMyAdmin geht weiß ich auch… :nutz:
Nur fakt ist das er scheinbar garnicht das ganze macht…

Zumal mich juckt warum er das anzeigt:
Notice: Trying to get property of non-object in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 42

Gibt es den eine möglichkeit zu Überprüfen was Apache/PHP mit dem Formular da anstellt? (Serverseitig vielleicht?)

Kann man sich das ganze Mal live ansehen bzw könntest du den jetzigen SourceCode nochmal hochladen? Dass nichts eingetragen wird, könnte aus dem Fehler mit $blog resultieren)

Mfg :wink2:

Live hier:
antribute.eu/?p=blog&mode=view&id=12

Nochmal den aktuellen Code:
pastebin.com/eDaPLUdm

Du hast für das Objkt $blog eine while Schleife(Zeile 8 - 26):

[code] while($blog = mysql_fetch_object($entry))
{

}[/code]

$blog->id(Zeile 42) befindet sich aber außerhalb dieser while-Schleife. Behebe das, dann machen wir mit PDO weiter.

Mfg :wink2:

Ok hab ich weg… nun wird das Formular ohne Fehlerrückgabe übermittelt.
Aber es kommt halt nix in Datenbank an.

Auf:
antribute.eu/?p=komcheck

Sieht man ALLE Kommentare (dort überprüfe ich nicht auf display=yes)

Hast du schonmal das mysql_error() - Äquivalent nach der Abfrage ausgegeben? Müsste wohl php.net/manual/de/pdo.errorinfo.php sein, ich habe aber keine Ahnung…

Nun da ich mich ja selbst mit PDO null auskenne lass ich das mal lieber sein… und warte da auf den ersteller von dem PDO.

So umgestellt auf das andere:

if(isset($_GET['action']) AND 'commentpost' == $_GET['action']) { mysql_query("insert into blog_kommentare (blog_id, display, datum, name, email, homepage, naricht) values (". $_GET['id'] .", 'NO', NOW(), ". $_POST['form-name'] .", ". $_POST['form-email'] .", ". $_POST['form-url'] .", ". $_POST['form-comment'] .")"); }

Damit kommt derzeit auch nix an…

Mach mal

nach der Abfrage.

Ich glaube aber, dass du Strings in Anführungsstriche stellen musst, à la

Gut da kam sogar ein Fehler dabei raus:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@antribute.eu, http://antribute.eu, All hail Botan!)' at line 1

Was mir gerade noch auffällt ist das man über das Formular gut und gerne MySQL Inputs machen könnte :stress:

Das sollte man natürlich auch unterbinden, auf jeden Fall liegt hier das Problem mit den Anführungsstrichen vor, da es sich um Strings handelt.

[quote=“White-Tiger”]@hoffmann
POST ist einfach gesagt POST …[/quote]

Eine schöne Tautologie ;o)
Ich habe auch nicht erst gestern, sondern schon im letzten Jahrtausend angefangen, mich
mit HTML etc zu beschäftigen, von daher ist es nicht das erste Mal, daß mir solche
Protokollfragen unterkommen.

HTTP und HTML wurden ja zusammen spezfiziert.
Da man sich bei HTML entscheiden muß, ob man ein Formular per POST oder GET verschickt,
gibt es von der reinen Lehre her nur ein entweder oder, da ein sowohl als auch so praktisch
gar nicht vorgesehen ist.
Es stimmt allerdings auch, daß der Anhängsel mit den GET-Parametern zur URI gehört, daher
ist es auch nicht falsch, das zu notieren, es ist eben wohl nur undefiniert, was dann damit
passieren soll - weil ja per HTML-Voraussetzung die Formulardaten entweder als
POST-Parameter oder als GET-Parameter verschickt werden und nicht teilweise so und
teilweise anders. Es ist also gar nicht definiert, ob ein Darstellungsprogramm in solch einem
Falle die GET-Parameter senden muß oder die POST-Parameter oder beides.
Es ist wohl auch nicht definiert, ob der server damit rechnen muß, daß bei einer Anfrage beide
Arten von Parametern auftreten könnten, der könnte also je nach Programmierung auch nur
einen Parametersatz an das Zielskript weiterleiten.
Auch wenn man das Formular per GET verschickt, ist das problematisch, denn die
HTML-Spezifikation schreibt vor, daß dann an die in action angegebene URI ein Fragezeichen
angehängt wird und dahinter der Formulardatensatz - das ergibt aber keinen Sinn, wenn die
URI in action bereits ein Fragezeichen enthält - denn sie darf insgesamt nur ein Fragezeichen
enthalten.
Anhängen ohne Fragezeichen wäre gemäß HTML falsch, ein korrekt arbeitendes Programm
könnte also das Fragezeichen und den Teil dahinter bis ggf. zum # streichen und durch ein
eigenes Fragezeichen und den Formulardatensatz ersetzen. Das korrekt arbeitende Programm
könnte auch sagen, daß es nicht möglich ist, eine korrekte URI zu erzeugen und das
Formular nicht versenden. Ich vermute mal, die meisten Programme arbeiten im Sinne von
HTML fehlerhaft und hängen in dem Falle den Formulardatensatz ohne Fragezeichen an.
Man kann sich aber nicht drauf verlassen, daß alle Programme so mutwillig fehlerhaft
programmiert sind.
Von daher ist das alles ein großes Feld für inkonsistentes, undefiniertes Verhalten von
Programmen, was man eben recht einfach umgehen kann, wenn man sich gar nicht erst
drauf einläßt :o) Vereinfacht dann auch die Diskussion und die Ursachenforschung, wenn etwas
nicht funktioniert. Da erspart man sich Spekulationen darüber, was wo die undefinierten
Sachen für Konsequenzen haben könnten.

Nun habe verschiedenes ausprobiert mit " hängt es die Seite auf und mit ’ kommt das gleiche raus :smoke:. Hier mal wie es aussieht, vielleicht hab ich auch einfach nur vertauscht was du meinst :susp: :

if(isset($_GET['action']) AND 'commentpost' == $_GET['action']) { mysql_query("insert into blog_kommentare ('blog_id', 'display', 'datum', 'name', 'email', 'homepage', 'naricht') values (". $_GET['id'] .", "NO", NOW(), ". $_POST['form-name'] .", ". $_POST['form-email'] .", ". $_POST['form-url'] .", ". $_POST['form-comment'] .")"); echo mysql_error(); }

Vielleicht doch ein paar mehr Grundlagen aneignen, bevor man sowas realisieren will? :confused:

$sql = "INSERT INTO blog_kommentare ( blog_id, display, datum, name, email, homepage, naricht ) VALUES ( ".intval($_GET['id']).", 'no', NOW(), '".mysql_real_escape_string($_POST['form-name'])."', '".mysql_real_escape_string($_POST['form-email'])."', '".mysql_real_escape_string($_POST['form-url'])."', '".mysql_real_escape_string($_POST['form-comment'])."' )"; $qry = mysql_query($sql) or die(mysql_error());
Nichtsdestotrotz würde ich das Skript ganz neu schreiben. Das ist doch ziemlich vermurkst, das Ganze.

Edit: Es heißt „Nachricht“ :wink:

Danke hummer… das mit diesem Naricht/Nachricht ist immer so eine Sache bei mir xD.

Nun es ist das erste mal das ich sowas komplett von „hand“ schreibe. Hab ja früher immer die Formfeld-Generator von Dreamweaver genutzt… (nutze zwar immernoch den guten alten DW CS3 aber nur weil ich mich an das SyntaxHighlighting davon gewöhnt hab :stress: ).

Ich mach das ganze ja auch nur privat und nicht jeden Tag von daher passieren mir ja immer wieder Leichtsinnsfehler oder ich vergesse einfach mal wie man was nochmal genau gemacht hat.

//UPDATE:
Na upps! Das ging übrigens schon… nur hat der liebe Zimt nur 1 Datensatz anzeigen lassen:
antribute.eu/?p=komcheck

Jetzt wird das alles schön angezeigt :O!
Sowohl über PDO als auch über das normale :slight_smile:!

Daher danke ich hiermal noch hummer, Mgier und Hoffman der sich hier mit WhiteDragon über POST und GET streitet (sorry wenn hier jemand falsch geschrieben wurde :hail: )