bin neu hier und habe folgendes dummes Problem:
Ich möchte über eine Webseite realisieren, das sich User in eine mysql
Datenbank eintragen können.
Folgendes Script habe ich verfasst:
<?
$Name = $_POST["Name"];
$Level = $_POST["Level"];
$Rang = $_POST["Rang"];
$Email = $_POST["Email"];
if (($Name == "") OR ($Level == "") OR ($Rang == "") OR ($Email == "")) {
echo "Fehler: Eintrag unvollständig.";
die;
}
include ("dbconnect.php");
$sql_befehl = mysql_query("INSERT INTO tabelle (Name,Level,Rang,Email)
VALUES
('".$_POST['Name']."','".$_POST['Level']."','".$_POST['Rang']."','".$_POST['Email']."')");
if($sql_befehl)
{ echo "Dein Eintrag wurde in die Warteliste hinzugefügt."; }
mysql_close($datenbank);
?>
Das Problem ist jetzt, dass wenn ich alle Felder im Formular ausgefüllt
habe und auch Abschicken klicke, jedesmal die Meldung kommt Eintrag
unvollständig....
Da aber alle Felder ausgefüllt wurden, dürfte die Meldung gar nicht
kommen, sondern die Daten müssten verarbeitet werden, meiner Meinung
nach, denn die Abfrage sollte ja nur erscheinen, wenn jemand ein Feld
nicht ausgefüllt hat.
Kann mir hier jemand auf die Sprünge helfen?
Vielen Dank schon mal :-)
LG
Petra
>
> <?
>
> $Name = $_POST["Name"];
> $Level = $_POST["Level"];
> $Rang = $_POST["Rang"];
> $Email = $_POST["Email"];
>
> if (($Name == "") OR ($Level == "") OR ($Rang == "") OR ($Email == "")) {
> echo "Fehler: Eintrag unvollständig.";
> die;
> }
>
>
> include ("dbconnect.php");
>
>
> $sql_befehl = mysql_query("INSERT INTO tabelle (Name,Level,Rang,Email)
> VALUES
> ('".$_POST['Name']."','".$_POST['Level']."','".$_POST['Rang']."','".$_POST['Email']."')");
>
>
> if($sql_befehl)
> { echo "Dein Eintrag wurde in die Warteliste hinzugefügt."; }
>
>
> mysql_close($datenbank);
> ?>
>
> Das Problem ist jetzt, dass wenn ich alle Felder im Formular ausgefüllt
> habe und auch Abschicken klicke, jedesmal die Meldung kommt Eintrag
> unvollständig....
>
> Da aber alle Felder ausgefüllt wurden, dürfte die Meldung gar nicht
> kommen, sondern die Daten müssten verarbeitet werden, meiner Meinung
> nach, denn die Abfrage sollte ja nur erscheinen, wenn jemand ein Feld
> nicht ausgefüllt hat.
>
> Kann mir hier jemand auf die Sprünge helfen?
>
Ja Poste mal BITTE das ganze Formular!
Mfg Enrico
>
> Ja Poste mal BITTE das ganze Formular!
>
>
Mfg Enrico
PS.: Ah ja und die Verwendete PHP Version auch gleich mit.
Du hast auch den Verdacht, dass sein Formular ein get und
kein post macht?
@Petra - du könnest ja mal ein print_r($_GET) und
print_r($_POST) in die Fehlergeschichte setzen, damit Du
siehst was ankommt.
Viele Grüße
Thomas
Warum definierst du oben die Variablen $Name, $Level usw und verwendest
dann doch die $_POST-Variablen?
Außerdem sollte ALLES, was in MySQL-Queries kommt mit
mysql_real_escape_string() behandelt werden, sonst hast du gleich dein
erstes Sicherheitsloch. ;)
> Das Problem ist jetzt, dass wenn ich alle Felder im Formular ausgefüllt
> habe und auch Abschicken klicke, jedesmal die Meldung kommt Eintrag
> unvollständig....
Ein var_dump($_POST) vor dem if-Statement sollte dir sagen ob was mit
POST ankommt. Für Firefox gibt's auch die UrlParams-Extension:
https://addons.mozilla.org/firefox/addon/1290
Gruß
> Außerdem sollte ALLES, was in MySQL-Queries kommt mit
> mysql_real_escape_string() behandelt werden, sonst hast du gleich dein
> erstes Sicherheitsloch. ;)
Nicht ALLES, sondern nur Strings werden mit mysql_real_escape_string()
vorbereitet.
Für Ganzzahlen verwendet man intval() oder (int).
Für andere Datentypen sind andere Maskierungs-/Validierungsmaßnahmen
erforderlich.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · e-Commerce · Joomla! Content Management |
------------------------------------------------------------------
> David Fuhr schrieb:
>
>> Außerdem sollte ALLES, was in MySQL-Queries kommt mit
>> mysql_real_escape_string() behandelt werden, sonst hast du gleich dein
>> erstes Sicherheitsloch. ;)
>
> Nicht ALLES, sondern nur Strings werden mit mysql_real_escape_string()
> vorbereitet.
> Für Ganzzahlen verwendet man intval() oder (int).
> Für andere Datentypen sind andere Maskierungs-/Validierungsmaßnahmen
> erforderlich.
Wir reden von MySQL. Da kannst Du getrost alles mit
mysql_real_escape_string() behandeln. Den Rest erledigt die DB. Die sagt
Dir schon Bescheid, wenn die Daten nicht passen.
Gruß. Claus
> <?
Short Open Tags sind bäh. Solltest Du Dir abgewöhnen. Manche Provider
lassen sie erst gar nicht zu.
> $sql_befehl = mysql_query("INSERT INTO tabelle (Name,Level,Rang,Email)
> VALUES
> ('".$_POST['Name']."','".$_POST['Level']."','".$_POST['Rang']."','".$_POST['Email']."')");
Auweia!
Erst einmal sollte man Daten, die von außen kommen, _niemals_ ungeprüft
bzw. ungefiltert weiterreichen, sondern sie vorher so behandeln, dass
sie keinen Unfug anrichten können. In diesem Fall wäre
mysql_real_escape_string() die richtige Methode.
Alternativ würde ich Dir empfehlen, Dich auch mit PDO auseinander zu
setzen. Damit erledigen sich solche Probleme von ganz alleine.
> Das Problem ist jetzt, dass wenn ich alle Felder im Formular ausgefüllt
> habe und auch Abschicken klicke, jedesmal die Meldung kommt Eintrag
> unvollständig....
Hast Du mal geprüft, welche Daten tatsächlich ankommen? print_r() oder
var_dump() helfen Dir dabei.
Gruß. Claus
>> Nicht ALLES, sondern nur Strings werden mit mysql_real_escape_string()
>> vorbereitet.
>> Für Ganzzahlen verwendet man intval() oder (int).
>> Für andere Datentypen sind andere Maskierungs-/Validierungsmaßnahmen
>> erforderlich.
>
> Wir reden von MySQL. Da kannst Du getrost alles mit
> mysql_real_escape_string() behandeln. Den Rest erledigt die DB. Die sagt
> Dir schon Bescheid, wenn die Daten nicht passen.
Deswegen ist das noch lange nicht sauber (und damit empfehlenswert).
> Claus Reibenstein schrieb:
>
>> Niels Braczek schrieb:
>>
>>> Für andere Datentypen sind andere Maskierungs-/Validierungsmaßnahmen
>>> erforderlich.
>>
>> Wir reden von MySQL. Da kannst Du getrost alles mit
>> mysql_real_escape_string() behandeln. Den Rest erledigt die DB. Die sagt
>> Dir schon Bescheid, wenn die Daten nicht passen.
>
> Deswegen ist das noch lange nicht sauber (und damit empfehlenswert).
Das steht außer Zweifel. Nur "erforderlich" sind die von Dir genannten
Maßnahmen bei MySQL nicht.
Gruß. Claus
>> <?
> Short Open Tags sind bäh. Solltest Du Dir abgewöhnen.
Warum werden dann in allen Beispielen und in der Dokumentation vom Zend
Framework genau diese bösen Short-Tags benutzt? Wenn man die Nachteile
kennt und keine Software für jeden 0815-Webspace baut, dann sind die
Short-Tags eigentlich auch eine feine Sache.
>> $sql_befehl = mysql_query("INSERT INTO tabelle (Name,Level,Rang,Email)
>> VALUES
>> ('".$_POST['Name']."','".$_POST['Level']."','".$_POST['Rang']."','".$_POST['Email']."')");
> Erst einmal sollte man Daten, die von außen kommen, _niemals_ ungeprüft
> bzw. ungefiltert weiterreichen, sondern sie vorher so behandeln, dass
> sie keinen Unfug anrichten können.
ACK!
> Alternativ würde ich Dir empfehlen, Dich auch mit PDO auseinander zu
> setzen. Damit erledigen sich solche Probleme von ganz alleine.
Bitte was? Auch mit PDO hat man diese Probleme, wenn man Werte nicht
entsprechend maskierst. Wenn du Prepared Statements meinst dann gebe ich
dir Recht, allerdings hat das mit PDO nichts zutun.
Das ist das ganze Formular.
es gibt eine normale HTML Eingabeseite und die übergibt die Daten per
POST an dieses Script hier.
Das HTML sieht so aus:
<html>
<head>
<title></title>
</head>
<body>
<form name="Tafelrunde" action="speichern.php" methode="post"> <font
face="arial" size="3">
Name: <input name="name" type="text" size="10" maxsize="40" <p> Level:
<input name="level" type="text" size="2" maxsize="2" <p> Rang: <input
name="rang" type="text" size="10" maxsize="10" <p>
Email:<input name="email" type="text" size="10" maxsize="20"<p><br>
<input type="submit" name="eintragen" value="Eintragen"> <input
type="reset" name="abbruch" value=" Eingaben löschen"> </font>
</form>
</body>
</html>
LG
Petra
Hab ich schon.
PHP 4 ist die verwendete Version.
LG
Petra
Gut mach ich.
Sage dann Bescheid.
Danke auch den andern :-)
LG
Petra
>> PS.: Ah ja und die Verwendete PHP Version auch gleich mit.
>
> Hab ich schon.
> PHP 4 ist die verwendete Version.
>
> LG
> Petra
Ne hattest Du nich. Aber Egal....!
Ich seh Immer noch keine HTML FORMULARE????
Horch wenn Du Hilfe benötigst dann Präsentier wenigstens dein Problem
aufm Silbertablett.
Danke Enrico
>>>
>> Ja Poste mal BITTE das ganze Formular!
>>
>> Mfg Enrico
>
> Du hast auch den Verdacht, dass sein Formular ein get und
> kein post macht?
>
So was in der Art. Ich würde lieber Wissen wie die Formular aussehen
denn Ich hege den Verdacht das Verkehrt Zugesendet wird.
Man wird Ja noch Sehen.
Mfg Enrico
Ich würde als erstes mal im Formular methode in method ändern.
Schau mal deine Groß und Klein Schreibung an, dann Haste dein Problem
gefunden.
Mfg Enrico
Doch das Formular hatte ich gleich in Dein erstes Posting reinkopiert.
seh ich ja auch :-)
Nur die PHP Version, dazu hatt ich da nix geschrieben.
>
> Ich seh Immer noch keine HTML FORMULARE????
Tja, meine ertse Antwort auf Dein Posting, da steht es drin.
Aber für Dich also auch nochmal hier:
<html>
<head>
<title></title>
</head>
<body>
<form name="Tafelrunde" action="speichern.php" methode="post">
<font face="arial" size="3">
Name: <input name="name" type="text" size="10" maxsize="40" <p>
Level: <input name="level" type="text" size="2" maxsize="2" <p>
Rang: <input name="rang" type="text" size="10" maxsize="10" <p>
Email:<input name="email" type="text" size="10" maxsize="20"<p><br>
<input type="submit" name="eintragen" value="Eintragen"> <input
type="reset" name="abbruch" value=" Eingaben löschen">
</font>
</form>
</body>
</html>
>
> Horch wenn Du Hilfe benötigst dann Präsentier wenigstens dein Problem
> aufm Silbertablett.
Das nutzt nix, wenn der andere es nicht findet ;-)
>
> Danke Enrico
Bitte Petra
> <form name="Tafelrunde" action="speichern.php" methode="post">
¯¯¯¯¯¯¯
Das Attribut heißt "method".
Gruß. Claus
Schau bitte in dem HTML Formular nach name="Name" usw. denn selbst bei
einem POST oder GET wird GROß und klein -Schreibung berücksichtigt.
Mfg Enrico
PS.: Und NEIN da ist kein HTML mit bei gewesen.
> Claus Reibenstein schrieb:
>
>> Alternativ würde ich Dir empfehlen, Dich auch mit PDO auseinander zu
>> setzen. Damit erledigen sich solche Probleme von ganz alleine.
>
> Bitte was? Auch mit PDO hat man diese Probleme, wenn man Werte nicht
> entsprechend maskierst. Wenn du Prepared Statements meinst dann gebe ich
> dir Recht, allerdings hat das mit PDO nichts zutun.
Ja, ich meinte Prepared Statements, und die haben sehr viel mit PDO zu
tun. Prepared Statements sind ein wesentlicher (wenn nicht sogar _der_
wesentliche) Bestandteil von PDO. Ohne PDO keine Prepared Statements.
Gruß. Claus
>> Bitte was? Auch mit PDO hat man diese Probleme, wenn man Werte nicht
>> entsprechend maskierst. Wenn du Prepared Statements meinst dann gebe ich
>> dir Recht, allerdings hat das mit PDO nichts zutun.
> Ohne PDO keine Prepared Statements.
Nein? Wenn du das sagst...
<http://de.php.net/manual/de/mysqli-stmt.prepare.php>
<http://de.php.net/manual/de/function.pg-prepare.php>
<http://de.php.net/manual/de/function.oci-parse.php>
...
VG
Thomas
Aha....schaun wir mal...:-)
Thanks.
LG Petra
Stimmt...hüstel...
LG
Petra
Enrico, Du hast es doch schon beantwortrt und dadrauf hab ich Dir
geantwortet ebend zwei Postinmgs vorher...lol..
Trotzdem Danke ;-)
LG
Petra
Jo..thx..
LG
Petra
> Claus Reibenstein schrieb:
>
>> Ohne PDO keine Prepared Statements.
>
> Nein? Wenn du das sagst...
>
> <http://de.php.net/manual/de/mysqli-stmt.prepare.php>
Ok, hast gewonnen :-)
> <http://de.php.net/manual/de/function.pg-prepare.php>
> <http://de.php.net/manual/de/function.oci-parse.php>
Die haben nichts mit MySQL zu tun.
Gruß. Claus
>>> Ohne PDO keine Prepared Statements.
>> <http://de.php.net/manual/de/mysqli-stmt.prepare.php>
> Ok, hast gewonnen :-)
;-)
>> <http://de.php.net/manual/de/function.pg-prepare.php>
>> <http://de.php.net/manual/de/function.oci-parse.php>
> Die haben nichts mit MySQL zu tun.
Egal, Prepared Statements sind ja kein Alleinstellungsmerkmal von MySQL.
Aber hier geht der Punkt an dich, es ging im OP ja schliesslich nicht um
PG oder Oracle :-)