ERLEDIGT
NEIN
NEIN
ANTWORTEN
27
27
ZUGRIFFE
1920
1920
EMPFEHLEN
-
Hallo zusammen,
da ich nun schon unzählbare Foren durchkämmt und viel an meinem Quellcode rumprobiert habe, poste ich mein Problem nun einfach mal selbst und hoffe, dass ich so eine Lösung finde...
Aktueller Stand:
Es geht darum, dass ich für eine Website ein Gästebuch erstellt habe. Dazu gibt es ein Formular mit den Feldern Name, Email und Beitrag. Unter dem Formular gibt es noch den Button "speichern".
Wenn ich in alle Felder etwas eintrage, klappt das mit dem Speichern auch alles einwandfrei.
Das Problem:
Das Problem ist jetzt aber, dass die Eingabe nicht gespeichert wird, sobald ein Feld leer bleibt. Das Formular wird nach dem Klicken auf "speichern" ohne die vorher getätigten Einträge erneut angezeigt.
Deshalb möchte ich gerne beim Klick auf "speichern" überprüfen, ob in alle Felder etwas eingetragen wurde. Falls ein Feld leer ist, soll eine Fehlerausgabe erscheinen, welche z.B. ausgibt "Bitte geben Sie Ihren Namen ein.".
Der evtl. schon eingegebene Text in den anderen Feldern soll dabei nicht gelöscht, sondern weiter angezeigt werden, damit der User nicht noch ein mal von vorne anfangen muss.
Ein Auszug vom Quellcode:
Um das Ganze kurz zu verdeutlichen...
Da ich ein blutiger Anfänger bin und noch nicht so wirklich durchblicke, weiß ich nicht, ob der letzte Teil (das was nach dem else kommt) überhaupt richtig ist... Ich habe einfach mal versucht, es irgendwie logisch anzugehen...PHP-Code:<?php
if ( $_POST['Name'] != "" && $_POST['Email'] != "" && $_POST['Beitrag'] != "")
{
$sql .= " INSERT INTO gbuch ";
$sql .= " SET ";
$sql .= " Name ='". $_POST['Name'] ."', ";
$sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
date_default_timezone_set('Europe/Berlin');
$sql .= " Datum ='". date("Y-m-d H:i:s") ."', ";
$sql .= " Beitrag='". $_POST['Beitrag'] ."' ";
echo "<h2>Eintrag gespeichert</h2>";
//Zugriff auf die MySQL Datenbank:
//...
// ausführen des mysql-Befehls/Speichern der Daten
//...
} // if-Bedingung zu Ende
//Falls ein Feld leer ist und vorher schon mal auf speichern gedrückt wurde, Fehlerausgabe...
else
{
if ($_POST['schon_mal_gespeichert'] == "submit" )
{
if ( $_POST['Name'] == "" )
{
echo "Bitte geben Sie Ihren Namen ein!";
}
if ( $_POST['Email'] == "" )
{
echo "Bitte geben Sie Ihre Email-Adresse ein!";
}
if ( $_POST['Beitrag'] == "" )
{
echo "Bitte geben Sie einen Text ein!";
}
}
Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte!
Vielen Dank schon mal im voraus für eure Mühe!
Liebe Grüße!
-
Du könntest in die Inputfelder folgendes machen:
HTML-Code:<input type="text" name="feld" value="<?php echo (isset($_POST['feld'])?$_POST['feld']:''; ?> />Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
28.06.10 08:08 #3
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Also für die Prüfung der Felder teile ich das immer auf:
Wobei dieser Code natürlich nur ausgeführt wird, wenn vorher der Submit Button gedrückt wurde.PHP-Code:$fehler = 0;
$fehlertext = "";
If (!isset($_POST['Name']) Or Trim($_POST['Name']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Namen an.<br>";
}
If (!isset($_POST['Email']) Or Trim($_POST['EMail']) == "") {
$fehler = 1;
$fehlertext = ."Bitte geben Sie Ihre EMail Adresse an.<br>";
}
If (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") {
$fehler = 1;
$fehlertext = ."Bitte geben Sie einen Beitrag ein.<br>";
}
If ($fehler == 0) {
$sql .= " INSERT INTO gbuch ";
$sql .= " SET ";
$sql .= " Name ='". $_POST['Name'] ."', ";
$sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
date_default_timezone_set('Europe/Berlin');
$sql .= " Datum ='". date("Y-m-d H:i:s") ."', ";
$sql .= " Beitrag='". $_POST['Beitrag'] ."' ";
}
Zum Prüfen bin ich immer "zu faul". Ich schreib einfach immer nur:<input type="text" name="feld" value="<?php echo (isset($_POST['feld'])?$_POST['feld']:''; ?> />
Gruß ThomasHTML-Code:<input type="text" name="feld" value="<?php echo @$_POST['feld'];" ?> />Geändert von tombe (28.06.10 um 08:55 Uhr)
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
28.06.10 09:00 #4
- Registriert seit
- Mar 2009
- Beiträge
- 47
Nach dem submit einfach vor dem einspeichern in die Datenbank mit
einem if überprüfen ob die variablen übergeben wurden bzw ob etwas
reingeschrieben wurde.
Wenn nicht Fehlermeldung ausgeben, wenn alles ausgeführt wurde
weiter fortfahren wie geplant.
Normalerweise ist das die einfachste (vll. nicht schönste) Methode.Man steckt immer im "Misthaufen", nur die Tiefe ändert sich.
-
Hallo!
Erst ein mal vielen Dank für die schnelle Hilfe und vor allem den Quellcode!
Ich habe jetzt mal probiert, alles einzufügen, aber ich bekomme bzgl. des Inputs noch eine Fehlermeldung...
Diese HTML Zeile habe ich auf das jeweilige Feld angepasst:
Aber es kommt die Fehlermeldung:HTML-Code:<input name="Name" value="<?php echo (isset($_POST['Name'])?$_POST['Name']:' ' ;?>" size="50" maxlength="150" type="text">
Parse error: syntax error, unexpected ';' in /Applications/XAMPP/xamppfiles/htdocs/gaestebuch-eintrag2.php on line 30
Irgendwas in der Syntax muss da glaube ich falsch sein, oder ich hab das einfach falsch eingefügt
LG
Ich habe es noch mal so ausprobiert:
<input name="Name" value="<?php echo @$_POST['Name']; ?>" size="50" maxlength="150" type="text">
Dann wird das Formular zwar wieder angezeigt, aber es kommt keine Fehlermeldung, wenn ich nichts eintrage und auf speichern klicke...
Könnte mir jemand vielleicht den kompletten Code geben?
Ich blicke irgendwie nicht, wo ich was eintragen muss...
-
28.06.10 12:46 #6
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Das vorangestellte "@" verhindert die Fehlermeldung wenn es die Variable $_POST["xyz"] nicht gibt.
Sie verhindert nicht das eine "selbsterstellte" Fehlermeldung wie z.B. "Bitte geben Sie Ihren Namen ein" ausgegeben wird.
Zeig du mal deinen kompletten Code dann findet sich der Fehler sicher schnell.Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Hupps
da hab ich wohl eine Klammer vergessen
Den Wert zu prüfen find ich allerdings schöner als einfach nur die Fehler zu überdecken bzw gar nicht anzeigen zu lassen. Das ist für mich faul programmiertHTML-Code:<input name="Name" value="<?php echo (isset($_POST['Name']))?$_POST['Name']:'Bitte etwas eingeben' ;?>" />
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
ah ok...das "@" habe ich übersehen...
Hier ist mein Code:
PHP-Code:<!-- Formular Darstellung -->
<form name="" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="text/html">
<p>Name:<br>
<input name="Name" value="<?php echo $_POST['Name']; ?>" size="50" maxlength="150" type="text">
</p>
<p>E-Mail-Adresse:<br>
<input name="Email" value="" size="50" maxlength="150" type="text">
</p>
<p>Beitrag:<br>
<textarea name="Beitrag" rows="10" cols="50"></textarea>
</p>
<input name="" value="speichern" type="submit">
</form>
<!-- Daten speichern, wenn alle Felder ausgefüllt wurden-->
<?php
$fehler = 0;
$fehlertext = "";
If (!isset($_POST['Name']) Or Trim($_POST['Name']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Namen an.<br>";
}
If (!isset($_POST['Email']) Or Trim($_POST['EMail']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihre EMail Adresse an.<br>";
}
If (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie einen Beitrag ein.<br>";
}
If ($fehler == 0) {
$sql .= " INSERT INTO gbuch ";
$sql .= " SET ";
$sql .= " Name ='". $_POST['Name'] ."', ";
$sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
date_default_timezone_set('Europe/Berlin');
$sql .= " Datum ='". date("Y-m-d H:i:s") ."', ";
$sql .= " Beitrag='". $_POST['Beitrag'] ."' ";
echo "<h2>Eintrag gespeichert</h2>";
//Zugriff auf die MySQL Datenbank:
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'root' );
define ( 'MYSQL_KENNWORT', '' );
define ( 'MYSQL_DATENBANK', 'gaestebuch' );
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link )
{
die('keine Verbindung zur Zeit möglich - später probieren ');
}
$db_sel = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
// ausführen des mysql-Befehls/Speichern der Daten
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
if($sql && mysql_affected_rows() > 0)
{
?>
<p>Vielen Dank für Ihren Eintrag!<br>
<?php
}
?>
</p>
<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
<?php }
echo '<p><a href="gaestebuch.php">Gästebuch anzeigen</a></p>';
exit;
exit;
?>
-
28.06.10 12:54 #9
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
@timestamp:
Das ist nicht faul programmiert sondern es ist notwendig.
Mit dem vorangestellten "@" vor der POST-Variablen wird nur verhindert das ein Fehler angezeigt wird weil die Variable nicht gesetzt ist. Dies ist immer dann der Fall wenn das Formular zum erstem Mal aufgerufen wird.
Es wäre ziemlich blöd wenn man die Meldung "Bitte geben Sie Ihren Namen ein!" anzeigt nur weil die Seite erstmals angezeigt wird.Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
28.06.10 12:59 #11
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
So müsste es gehen:
Übrigens: Dein Formular und der Button selber haben keinen Namen. Das kann auch zu Problemen führen !PHP-Code:<!-- Formular Darstellung -->
<form name="" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="text/html">
<p>Name:<br>
<input name="Name" value="<?php echo @$_POST['Name']; ?>" size="50" maxlength="150" type="text">
</p>
<p>E-Mail-Adresse:<br>
<input name="Email" value="<?php echo @$_POST['Email']; ?>" size="50" maxlength="150" type="text">
</p>
<p>Beitrag:<br>
<textarea name="Beitrag" rows="10" cols="50"><?php echo @$_POST['Beitrag']; ?></textarea>
</p>
<input name="" value="speichern" type="submit">
</form>
<!-- Daten speichern, wenn alle Felder ausgefüllt wurden-->
<?php
$fehler = 0;
$fehlertext = "";
If (isset[$_POST["Speichern"])) {
If (!isset($_POST['Name']) Or Trim($_POST['Name']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihren Namen an.<br>";
}
If (!isset($_POST['Email']) Or Trim($_POST['EMail']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie Ihre EMail Adresse an.<br>";
}
If (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") {
$fehler = 1;
$fehlertext = "Bitte geben Sie einen Beitrag ein.<br>";
}
If ($fehler == 0) {
$sql .= " INSERT INTO gbuch ";
$sql .= " SET ";
$sql .= " Name ='". $_POST['Name'] ."', ";
$sql .= " Email ='". $_POST['Email'] ."', ";
// UTC Zeit festlegen:
date_default_timezone_set('Europe/Berlin');
$sql .= " Datum ='". date("Y-m-d H:i:s") ."', ";
$sql .= " Beitrag='". $_POST['Beitrag'] ."' ";
echo "<h2>Eintrag gespeichert</h2>";
//Zugriff auf die MySQL Datenbank:
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'root' );
define ( 'MYSQL_KENNWORT', '' );
define ( 'MYSQL_DATENBANK', 'gaestebuch' );
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link )
{
die('keine Verbindung zur Zeit möglich - später probieren ');
}
$db_sel = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
// ausführen des mysql-Befehls/Speichern der Daten
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
if($sql && mysql_affected_rows() > 0)
{
?>
<p>Vielen Dank für Ihren Eintrag!<br>
<?php
}
?>
</p>
<p>Beim Eintragen ist ein Fehler aufgetreten.<br>
<?php }
echo '<p><a href="gaestebuch.php">Gästebuch anzeigen</a></p>';
exit;
exit;
}
?>Geändert von tombe (28.06.10 um 13:05 Uhr)
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Ich habe dem Formular jetzt einen Namen gegeben und den Quellcode so wie oben eingefügt.
Es treten aber folgende Probleme auf:
- wenn nichts in die Felder engetragen wurde und ich auf speichern klicke, passiert nichts, ausser dass der link "Gästebuch anzeigen" unter dem Formular erscheint
=> es wird keine Fehlermeldung ausgegeben
- wenn in alle Felder etwas eingetragen wurde und ich auf speichern klicke, kommt nicht mehr die Ausgabe "Vielen Dank für ihren EIntrag" und die Daten werden auch nicht im Gästebuch gespeichert..
Jetzt bin ich total verwirrt...wieso geht das auf ein mal nicht mehr^
-
Dazu bleibt nur zu sagen, dass die Verwendung von $_SERVER["PHP_SELF"] ziemlich unsicher ist und vermieden werden sollte. Wer möchte, kann ja mal folgendes bei sich lokal ausprobieren.
und das dann mit folgender URL aufrufen:HTML-Code:<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> <input type="submit" /> </form>
Code :1
http://localhost/pfadZurDatei/index.php/"></form><script type="text/javascript">alert("you got XSS'ed");</script><form>Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
So funktioniert das bei mir. Ich hab den Code mal nebenbei etwas formatiert, damit er besser lesbar ist

HTML-Code:<?php error_reporting(E_ALL); ?> <!-- Formular Darstellung --> <form action="./" method="post"> <p>Name:<br> <input name="Name" value="" size="50" maxlength="150" type="text"> </p> <p>E-Mail-Adresse:<br> <input name="Email" value="" size="50" maxlength="150" type="text"> </p> <p>Beitrag:<br> <textarea name="Beitrag" rows="10" cols="50"></textarea> </p> <input name="speichern" value="speichern" type="submit"> </form> <!-- Daten speichern, wenn alle Felder ausgefüllt wurden--> <?php $fehler = 0; $fehlertext = ""; if (isset($_POST["speichern"])) { if (!isset($_POST['Name']) Or Trim($_POST['Name']) == "") { $fehler = 1; $fehlertext = "Bitte geben Sie Ihren Namen an.<br>"; } if (!isset($_POST['Email']) Or Trim($_POST['Email']) == "") { $fehler = 1; $fehlertext = "Bitte geben Sie Ihre EMail Adresse an.<br>"; } if (!isset($_POST['Beitrag']) Or Trim($_POST['Beitrag']) == "") { $fehler = 1; $fehlertext = "Bitte geben Sie einen Beitrag ein.<br>"; } if ($fehler == 0) { $sql = " INSERT INTO gbuch "; $sql .= " SET "; $sql .= " Name ='". $_POST['Name'] ."', "; $sql .= " Email ='". $_POST['Email'] ."', "; // UTC Zeit festlegen: date_default_timezone_set('Europe/Berlin'); $sql .= " Datum ='". date("Y-m-d H:i:s") ."', "; $sql .= " Beitrag='". $_POST['Beitrag'] ."' "; echo "<h2>Eintrag gespeichert</h2>"; //Zugriff auf die MySQL Datenbank: define ( 'MYSQL_HOST', 'localhost' ); define ( 'MYSQL_BENUTZER', 'root' ); define ( 'MYSQL_KENNWORT', '' ); define ( 'MYSQL_DATENBANK', 'gaestebuch' ); $db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT); if ( ! $db_link ){ die('keine Verbindung zur Zeit möglich - später probieren '); } $db_sel = mysql_select_db( MYSQL_DATENBANK ) or die("Auswahl der Datenbank fehlgeschlagen"); // ausführen des mysql-Befehls/Speichern der Daten $db_erg = mysql_query( $sql ); if ( ! $db_erg ){ die('Ungültige Abfrage: ' . mysql_error()); } if($sql && mysql_affected_rows() > 0){ ?> <p>Vielen Dank für Ihren Eintrag!<br> <p><a href="gaestebuch.php">Gästebuch anzeigen</a></p> <?php } ?> </p> <p>Beim Eintragen ist ein Fehler aufgetreten.<br> <?php } else echo $fehlertext; } ?>
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
Also bei mir funktioniert das nicht.....
Jetzt werde ich beim Klick auf speichern immer auf die Index Seite zurückgeleitet....
Ähnliche Themen
-
GET-Eingabe überprüfen
Von Dörti.Hermi im Forum PHPAntworten: 4Letzter Beitrag: 08.02.08, 17:56 -
Formularfelder überprüfen
Von FLASHStyler im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 05.10.07, 08:02 -
GET eingabe auf URL überprüfen
Von kase im Forum PHPAntworten: 13Letzter Beitrag: 11.08.07, 15:57 -
Formularfelder überprüfen!
Von soa im Forum PHPAntworten: 3Letzter Beitrag: 20.06.05, 00:24 -
3 Formularfelder überprüfen
Von stefanrichardmueller im Forum PHPAntworten: 2Letzter Beitrag: 25.07.04, 23:37





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren