Formular- Bei erfolg....
Jürgen
- php
Hallo!
Erstmal bin ich ein Anfänger in PHP.
Ich versuch gerade folgendes:
<?php
if($_POST['submit']) {
if(!$_POST['name']) {
echo "Bitte gib deinen Namen ein!";
}
if(!$_POST['news']) {
echo "Nachricht musst schon schreiben!";
}
}
?>
<FORM ACTION="<?=$PHP_SELF?>" METHOD="POST" NAME="newsentry">
Your name:<BR>
<INPUT TYPE="text" SIZE="30" NAME="name"><BR>
The News:<BR>
<TEXTAREA NAME="news" COLS="40" ROWS="5"></TEXTAREA><BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Post it!"><BR>
</FORM>
Das klappt auch alles wunderbar.
Wo ich aber nicht drauf komme ist wie kann ich bei erfolg folgendes ausgeben
echo "<b>Nachricht hinzugefügt!</b>\n";
Sprich wenn beide Felder ausgefüllt wurden soll er die Nachricht auspucken.
Ok das einzige was mir eingefallen ist wäre exit; zu benutzen, aber das will ich nicht weil da zwing ich den user jedesmal auf den back button zu klicken.
Wie kann ich das machen?
Und noch eine Frage, der User gibt jetzt zb. im news feld einen langen text ein und vergisst seinem Namen einzufügen, wie kann ich dafür sorgen das der von Ihm eingebene Text nicht verloren geht sondern er nur nch seinen Namen einzugeben braucht.
Vielen Dank schon mal im voraus!
Liebe Grüße aus Wien,
Jürgen
hallo ebenfalls,
Sprich wenn beide Felder ausgefüllt wurden soll er die Nachricht auspucken.
Lustig. Die Lösung steht nämlich bereits in deinem Script ;-)
folgendes:
mit
if($_POST['submit']) {
if(!$_POST['name']) {
echo "Bitte gib deinen Namen ein!";
}
if(!$_POST['news']) {
echo "Nachricht musst schon schreiben!";
}
}
fragst du ab, ob deine Eingabefelder (input und textarea) leer sind und reagierst darauf. Jetzt brauchst du doch bloß abfragen, ob sie gefüllt sind und ebenfalls darauf zu reagieren, gelle ? Das bedeutet, daß du einfach bloß eine weitere if-Abfrage schreiben mußt, bei der das Anführungszeichen in
if(!$_POST['name']) {
und
if(!$_POST['news']) {
fortgelassen wird. Natürlich mußt du dann noch das korrekte "echo" hinschreiben
Und noch eine Frage, der User gibt jetzt zb. im news feld einen langen text ein und vergisst seinem Namen einzufügen, wie kann ich dafür sorgen das der von Ihm eingebene Text nicht verloren geht sondern er nur nch seinen Namen einzugeben braucht.
indem du statt
echo "Bitte gib deinen Namen ein!";
ein kleines zusätzliches Anzeigefensterchen öffnen läßt, das den Hinweis auf den vergessenen Namen enthält
Grüße aus Berlin
Christoph S.
Hallo auch von mir,
Und noch eine Frage, der User gibt jetzt zb. im news feld einen langen text ein und vergisst seinem Namen einzufügen, wie kann ich dafür sorgen das der von Ihm eingebene Text nicht verloren geht sondern er nur nch seinen Namen einzugeben braucht.
indem du statt
echo "Bitte gib deinen Namen ein!";
ein kleines zusätzliches Anzeigefensterchen öffnen läßt, das den Hinweis auf den vergessenen Namen enthält
Das würde ich besser sein lassen, wenn es nur eines unter sehr wenigen JavaScripts ist - _Ich_ müßte dann den Text trotzdem neu eingeben...außer..Du setzt einen Zurück-Link, der als OnClick-Event ein "history.back();" erhält - Mir ist bisher kein Browser untergekommen, der bei einer Zurück-Funktion nicht den Formularinhalt wieder da hätte.
Diese Lösung würde also wohl schneller gehen, wenn Du aber eine sichere Lösung willst solltest Du dem Formular die Werte zurückgeben:
Viel Erfolg
Thomas
hi,
Das würde ich besser sein lassen, wenn es nur eines unter sehr wenigen JavaScripts ist
wie kommst du denn auf Javascript ? Es geht um PHP ...
_Ich_ müßte dann den Text trotzdem neu eingeben
bitte, ein Mann muß tun, was ein Mann tun muß
wenn Du ... eine sichere Lösung willst solltest Du dem Formular die Werte zurückgeben:
- eine Datei mit zufälligem Namen erzeugen, den Text da reintun und dem Form per URL-Parameter den Namen mitteilen
ok. Dann muß bloß noch die "Datei mit zufälligem Namen" bei Nichtbedarf wieder gelöscht bzw. bei tatsächlichem Bedarf in ein neues Fensterchen geladen werden - ähm, hatten wir das mit dem neuen Fensterchen nicht schonmal ?
- einen Cookie setzen
och na nicht doch, für diese Winzigkeit muß nicht gleich noch ein Keks her
- allgemein mit Session-Funktionen arbeiten
guter Rat, aber bei dieser sehr einfachen Konstruktion nicht zwingend nötig und für den Fragesteller (vielleicht) noch zu schwierig
- in ein verstecktes Formular die Daten schaufeln
dafür würde auch eine Variable genügen
... und dann mit Grafik-Buttons (oder auch normalen) den Nutzer zum Ursprungs-Formular zurückschicken.
ähm ... aber die Daten sind ja jetzt in einem "versteckten Formular", und der Nutzer sieht sie eben scheinbar nicht mehr. Also muß auch mit den Daten noch was passieren, oder ?
Christoph S.
Das würde ich besser sein lassen, wenn es nur eines unter sehr wenigen JavaScripts ist
wie kommst du denn auf Javascript ? Es geht um PHP ...
Entschuldige falls ich was übersehen habe, aber bisher habe ich neue Fenster eigentlich immer per JavaScript auf sinnvolle Größe getrimmt. Hast Du besser Vorschläge für "kleine Fenster"?
_Ich_ müßte dann den Text trotzdem neu eingeben
bitte, ein Mann muß tun, was ein Mann tun muß
Eben.
wenn Du ... eine sichere Lösung willst solltest Du dem Formular die Werte zurückgeben:
- eine Datei mit zufälligem Namen erzeugen, den Text da reintun und dem Form per URL-Parameter den Namen mitteilen
ok. Dann muß bloß noch die "Datei mit zufälligem Namen" bei Nichtbedarf wieder gelöscht bzw. bei tatsächlichem Bedarf in ein neues Fensterchen geladen werden - ähm, hatten wir das mit dem neuen Fensterchen nicht schonmal ?
Kleiner Denkfehler oder Mißverständniss der Funktion:
1. Formular wird falsch ausgefüllt.
2. Überprüfung des Forms, feststellung das falsch.
3. Ausgabe dieser Info.
4. Anbieten eines Links um zurück zu gehen.
5. Ausfüllen, wobei alte Werte übernommen wurden
Wenn auf Position 4 ein Zufallsstring (Zufallszahl, mit chr() in Zeichen gewandelt und verkettung von 7 oder 8 Zeichen) erzeugt wird, nach überprüfung auf Existenz die Datei angelegt und der Inhalt reingeschrieben wird kann aller Code mehrfach genutzt werden.
Dann brauch man nämlich nur genau ein Formular und eine Überprüfung desselbigen; das Form muß lediglich überprüfen ob per URL (also mit GET) ein Dateiname übergeben wurde und diese auslesen + löschen (ok, hatte ich vergessen).
Ein neues Fenster ist nicht wirklich günstig, weil dann das Formular neu erstellt werden muß (ohne sonstiges Seitendesign bzw. ohne Includes), die neue Überprüfung muß dort stattfinden und erzeugt noch ein Fenster ....
- einen Cookie setzen
och na nicht doch, für diese Winzigkeit muß nicht gleich noch ein Keks her
Nö, war nur ein Vorschlag. Ob "Winzigkeit" aber richtig ist ist die Frage - es geht schließlich lt. Originalbeitrag um viel Text. Wenn ich nur 2 Zeilen verliere ist das was anderes als ein Kurzroman...
- allgemein mit Session-Funktionen arbeiten
guter Rat, aber bei dieser sehr einfachen Konstruktion nicht zwingend nötig und für den Fragesteller (vielleicht) noch zu schwierig
Mag sein, wenn aber noch mehr Funktionen benötigt werden kommt man irgendwann meist doch dahin. Und gesammelte Ideen haben noch nie geschadet.
- in ein verstecktes Formular die Daten schaufeln
dafür würde auch eine Variable genügen
Aber nicht in der URL! Die Länge der GET-Variablen hängt ziemlich deutlich vom Browser ab - und wenn für http://www.irgendeinedomain.de/scripts/guestbook.php?text=Hierkommteinlangertextmit%20Urlencodeten%20Sonderzeichen
nur 2048 Zeichen zur Verfügung stehen sieht es schon bei Gästebüchern oft eng aus. POST ist da wirklich unbeschränkt.
... und dann mit Grafik-Buttons (oder auch normalen) den Nutzer zum Ursprungs-Formular zurückschicken.
ähm ... aber die Daten sind ja jetzt in einem "versteckten Formular", und der Nutzer sieht sie eben scheinbar nicht mehr. Also muß auch mit den Daten noch was passieren, oder ?
Na sicher - in obigem Punkt 4 wird ein Button angeboten "Go back", wodurch das Formular an das Formularscript übergeben wird, die Daten landen per POST eben dort und können wieder eingefügt werden.
Alles Klar?
Thomas
hi,
bisher habe ich neue Fenster eigentlich immer per JavaScript auf sinnvolle Größe getrimmt. Hast Du besser Vorschläge für "kleine Fenster"?
"bessere" sicher nicht, aber "andere". Was in Javascript mit "window.open()" möglich ist, geht mit PHP schließlich auch, und mit sehr ähnlichem Code. Für die Kurzmitteilung, daß ein Eintrag vergessen wurde, braucht man allerdings nicht zwingend ein eigenes "kleines Fenster", dafür reicht ein Alert.
Kleiner Denkfehler oder Mißverständniss der Funktion:
- Formular wird falsch ausgefüllt.
- Überprüfung des Forms, feststellung das falsch.
- Ausgabe dieser Info.
- Anbieten eines Links um zurück zu gehen.
- Ausfüllen, wobei alte Werte übernommen wurden
Wenn auf Position 4 ein Zufallsstring (Zufallszahl, mit chr() in Zeichen gewandelt und verkettung von 7 oder 8 Zeichen) erzeugt wird, nach überprüfung auf Existenz die Datei angelegt und der Inhalt reingeschrieben wird kann aller Code mehrfach genutzt werden.
Dann brauch man nämlich nur genau ein Formular und eine Überprüfung desselbigen; das Form muß lediglich überprüfen ob per URL (also mit GET) ein Dateiname übergeben wurde und diese auslesen + löschen (ok, hatte ich vergessen).
ahso. Ich hab gesehen, daß da was fehlte, kam aber nicht drauf.
Ein neues Fenster ist nicht wirklich günstig
richtig, und das hab ich auch nicht behauptet. Wie oben bereits angeführt, genügt bei etwas niedriger angesetztem Layout-Anspruch ein "alert"
dafür würde auch eine Variable genügen
Aber nicht in der URL! Die Länge der GET-Variablen hängt ziemlich deutlich vom Browser ab - und wenn für http://www.irgendeinedomain.de/scripts/guestbook.php?text=Hierkommteinlangertextmit%20Urlencodeten%20Sonderzeichen
nur 2048 Zeichen zur Verfügung stehen sieht es schon bei Gästebüchern oft eng aus. POST ist da wirklich unbeschränkt.
Ich bin auch von POST ausgegangen, für GET sehe ich keinen zwingenden Anlaß. Wenn tatsächlich GET genommen wird, hast du recht.
Alles Klar?
mir schon *g*
Christoph S.
Hallo alle zusammen!
Erstmal vielen herzlichen Dank für die rege Beteiligung und unmengen an tips, tricks etc...
Ich denke mir mal ich bin euch eine erklärung schuldig.
Es geht um folgendes:
Ich könnte hergehen und phpnuke downloaden, hab es innerhalb von 15 minuten laufen (zuhause, sonst dauert es etwas länger wegen dem uploaden) und habe dann ein sehr beeindruckendes CMS das echt was drauf hat. Oder auch nicht...
Nun ist es aber so das ich wissen möchte wie etwas funktioniert und deshalb hab ich phpnuke wieder gelöscht. Alles.
Gut, wie lernt man PHP....ich hab gott weiss wo herum gesurft, etliche sogenannte "tutorials" gelesen die in Wirklichkeit keine tutorials sind sondern nur code mit 2 Zeilen erklärung was der komplette code tut ohne das man weiss warum und wieso etc..
Das einzig wirkliche extrem sinnvolle und wirklich für JEDEN zu empfehlende tutorial ist das von Kevin Yank auf sitepoint.com. (Building a Database-Driven Website Using PHP and MySQL ).
Nachteil dabei ist nur das das ganze ohne "authentication" gemacht wird.
Also möchte ich nun selbst ganz klein anfangen und erstmal versuchen ein kleines simples script zu schreiben welches mir ermöglicht news über ein formular zu schreiben dessen inhalt in einer MySQL datenbank gespeichert wird und auf der website dynamisch erstellt wird.
Wenn ich das mal geschafft habe gehe ich dann zum nächsten schritt indem ich edit und delete links hinzufügen möchte, und dann möchte ich versuchen das ganze zu schützen (davor fürchte ich mich am meisten da es ja in PHP leider nichts gibt was wirklich sicher ist. Wer mir nicht glaubt sollte mal das hier lesen http://www.securereality.com.au/studyinscarlet.txt da kommt einem das pure fürchten.
Aber egal, man muss ja nicht alles immer so kompliziert machen.
So ich hoffe nun ist jedem klar was ich erreichen will mit diesem meinem allersten selbst geschriebenen script. (ich weiss für euch sicher nichts besonderes aber jeder muss ja mal irgendwo anfangen :)
Ich werd jetzt mal versuchen ob irgend eine der vorgeschlagenen Lösungen funktoniert betreffende der ersten Frage, dann widme ich mich dem zweiten.
Nochmals vielen Dank für Eure Zeit und Hilfe.
Liebe Grüße aus Wien,
Jürgen
Moin,
davor fürchte ich mich am meisten da es ja in PHP leider nichts gibt was wirklich sicher ist. Wer mir nicht glaubt sollte mal das hier lesen http://www.securereality.com.au/studyinscarlet.txt da kommt einem das pure fürchten.
Das würde ich so nicht sagen. Es ist zwar schon ein bisschen her dass ich den verlinkten Text gelesen haben, aber wenn ich mich recht entsinne war da nichts bei was man nicht durch ein paar einfache Regeln verhindern hätte können:
Das sollte im Prinzip den größten Teil der potentiellen Sicherheitsprobleme abdecken und ist, wenn man es sich erstmal angewöhnt hat, gar nicht so schwer durchzuziehen.
--
Henryk Plötz
Grüße von der Ostsee
Hallo Jürgen
Das klappt auch alles wunderbar.
Wo ich aber nicht drauf komme ist wie kann ich bei erfolg folgendes ausgeben
echo "<b>Nachricht hinzugefügt!</b>\n";
Du brauchst (ich bleibe bei deinem Code) zum IF-Zweig einen else-Zweig:
if($_POST['submit']) {
if(!$_POST['name']) {
echo "Bitte gib deinen Namen ein!";
}
if(!$_POST['news']) {
echo "Nachricht musst schon schreiben!";
}
}
else {echo "<b>Nachricht hinzugefügt!</b>\n";}
Und noch eine Frage, der User gibt jetzt zb. im news feld einen langen text ein und vergisst seinem Namen einzufügen, wie kann ich dafür sorgen das der von Ihm eingebene Text nicht verloren geht sondern er nur nch seinen Namen einzugeben braucht.
Dann mußt du den Inhalt an die andere Datei weitereichen (per Formular, an den URL angehängt (Methode get also http://www.wasauchimmer.com/datei.php?text=blaablbal) oder per Sessionvariablen
Gruss Sven
hi,
Du brauchst (ich bleibe bei deinem Code) zum IF-Zweig einen else-Zweig:
das kann er zwar machen, aber nicht so, wie du es vorschlägst, sondern so:
if($_POST['submit']) {
if(!$_POST['name']) {
echo "Bitte gib deinen Namen ein!";
}
if(!$_POST['news']) {
echo "Nachricht musst schon auch noch schreiben ;-)";
}
else {
if($_POST['name']) {
echo "danke $name, deine Nachricht wurde ...";
}
if (irgendwas) {
}
}
Christoph S.
Hallo Christoph,
das kann er zwar machen, aber nicht so, wie du es vorschlägst, sondern so:
[...]
Yep - da hast du wohl recht - das war wohl nix ;) - sorry!
Manchmal sollte man vor dem Tippen etwas mehr überlegen oder zweimal draufschauen.
Sven