Hallöle,
ich knoble nun schon seid ich glaub 1-2 Monaten zusammen mit jemand anderem daran warum ein gewisses Formular nicht dort landet wo es landen soll (um ehrlich zu sein: Niemand weiß wo es landet, denn es landet nirgendwo…).
Bei dem Formular handelt sich um das Kommetar-Formular einer News/Blog Seite das pardu nicht funktionieren will. Da weder der Programmierer der PDO noch ich rausfinden können woran es liegt frage ich hier mal nach (da ja auch in der Vergangenheit hier oftmals jemand wusste!).
Ich werde hier mal nur den Teil des Scriptes einfügen und zwar der des Formulares, die PDO sowie ein 3. Teil der zum Prüfen da war was das Formular da absendet danach kommt ein Pastebin Link mit der Kompletten Datei.
auf den allerersten blick, ohne mir was angesehen zu haben: bist du sicher, dass du richtig abfragst?
$_POST[] schonmal per vardamp ausgegeben?
ich habe nämlich den verdacht, dass du nach zb “email” suchst, das ding aber unter “form-email” angekommen ist…
die labelzuordnung ist falsch - for muss sich auf eine id, nicht einen name beziehen.
es würde sicherlich auch nichts schaden, das ganze hübsch mit foo=“bar” zu schreiben - anführungszeichen. required=“required”… ich weiß dass das nich bei allen html-varianten unbedingt erforderlich ist, es sollte aber mit sicherheit auch kein schaden sein
Jo, wenn da “form-email” als Name steht, sollte man auch “form-email” verwenden.
Außerdem solltet ihr ein bisschen sauberer Arbeiten um mögliche Fehler von vornherein zu vermeiden, wie emil schon sagte, nutzt für Attribute Anführungsstriche etc.pp.
Anzuprangern habe ich dann evt noch den unübersichtlichen Programmierstil.
Dutzendfache echo Anweisung fördern nicht unbedingt die Übersichtlichkeit, und wenn es nicht übersichtlich ist, macht man leicht Fehler, die schwer zu erkennen sind.
Aber gut, das ist eure Angelegenheit.
Nun das es noch so unübersichtlich ist das ist wahr. Derzeit auch noch viel am Aufräumen und erstmal alles programmieren .
Das ich bei einigen Attributen keine Anführungsstriche verwende liegt einfach daran das ich dabei nach dem Schema vorging wie es in dem Buch über HTML5 wo ich habe auch gemacht wurde.
Das das alles in echo drin steht kommt ja daher das das ganze in if Verpackt in einer Datei abläuft.
Die Abfragen hab ich jetzt mal überarbeitet, aber fakt ist das immernoch nichts ankommt .
Eher frage ich mich ob es denn auch machbar ist was ich/wir da vorhaben das das ganze Formular ja an eine andere Stelle der Seite weitergeleitet wird und dann wieder zum Beitrag zurück (zurück tuts noch garnicht… das kommt jetzt erst wenn das endlich abgesendet wird).
Ich vermute mal, die meisten server und browser werden das netterweise interpretieren.
Formal ist es aber wohl undefiniert, GET und POST gleichzeitig zu verwenden, denn entweder
man schickt das Formular per GET oder per POST los, beides zusammen geht nicht.
Man sollte also an die URI innerhalb von action sicher keine GET-Parameter anhängen, denn
solche würden ja vom Formular selbst kommen.
Im Grunde fälschen die angehängten GET-Parameter bei der URI eine Formularübertragung,
was natürlich keinen Sinn ergibt, wenn man wirklich ein Formular losschickt und schon gar nicht,
wenn man es per POST losschickt.
Da deuten sich also (X)HTML-Verständnisprobleme an, die man allerdings häufiger sehen kann,
weswegen ich mal davon ausgehe, daß einige Programme solche Autorenfehler irgendwie
zu kompensieren suchen, was aber nichts daran ändert, daß es ein Fehler ist und daß die
Kompensation nicht immer die gleiche sein muß oder überhaupt durchgeführt wird.
Ich würde einfach mal empfehlen, alles aufzuräumen und das erstmal alles im Formular
unterzubringen und dies dann testweise per GET loszuschicken.
Man kann dann anhand der URI direkt sehen, was der browser wirklich ausliefert und kann
dann recht einfach vergleichen, was der server über PHP interpretiert.
Falls ich dasrichtig verstanden habe…
Du vergibst bei action="…" den Parameter mode=view. So wird die Abfrage aber wohl nie den elseif-Teil erreichen, da mode=view immer zutrifft, wenn das Formular abgeschickt wird.
[code]if( (isset($_GET[‚mode‘])) AND ($_GET[‚mode‘] == ‚view‘) ) {
}else if(isset($_GET[‚action‘]) == ‚commentpost‘){ //einfach mal kopiert, gehört natürlich dementsprechend ausgebessert
}else if(…){
}
[/code]
PS: Also da schreib ja ich noch übersichtlicheren Code, und das heißt was
@hoffman: Wie sollte man dann bei einer dynamischen Seite am besten vorgehen, auf der man praktisch immer Parameter and die url dranhängt?
@Mgier: Nein der Parameter mode=view wird da nicht vergeben.
Dieses “mode” ist dazu da um zu bestimmen ob er nun alle Einträge (Übersicht) oder nur den einzelnen Beitrag anzeigen soll (mode=view).
In der URL sieht das dann also so aus:
index.php?p=blog&mode=view&id=12
So als Beispiel bei “action” übergibt das formular ja dann folgende URI:
Nur derzeit grübel ich darüber was mit folgendem Fehler gemeint ist:
Notice: Trying to get property of non-object in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 42
Ok hab das jetzt in eigene if() rein… nun kommt nach dem Absenden:
Fatal error: Call to undefined function NOW() in /var/www/vhosts/antribute.eu/httpdocs/content/pages/blog.php on line 110
//EDIT:
Total vergessen: Kommt weiterhin nix an in Datenbank.
Hier mal 2 Links 1x der Blog (bzw. News) wo ich es derzeit Teste und eine andere Datei die einfach nur den Datenbank inhalt ausgibt offtopic: meine Lightning ist umgefallen…: