| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: Formularfehler im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo zusammen, bin grad am basteln einer Formularüberprüfung via php, habe dazu folgendes Tutorial verwendet: http://www.tutorials.de/forum/php-tu...erausgabe.html habe das Script ...
![]() |
| | #1 (permalink) |
| Registriert seit: 25.05.08 ![]() Likes: 0 | Formularfehler Anzeige Hallo zusammen, bin grad am basteln einer Formularüberprüfung via php, habe dazu folgendes Tutorial verwendet: http://www.tutorials.de/forum/php-tu...erausgabe.html habe das Script auch soweit an meine Daten angepasst und erweitert, nur wenn ich das Script letztendlich ausführe auf dem Server erscheint folgende Fehlermeldung Code: Notice: Undefined variable: checkok in /var/www/game/content/registry.php on line 65 Code: <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<p>Bitte geben Sie Ihre Daten ein.</p>
<table>
<tr>
<td><p><label for="username">Name:</label> </p></td>
<td><p><input id="username" type="text" name="name"></p></td>
</tr>
<tr>
<td><p><label for="passwort">Passwort</label> </p></td>
<td><p><input id="passwort" type="password" name="passwort"></p></td>
</tr>
<tr>
<td><p><label for="passwort">Passwort Wiederholen:</label> </p></td>
<td><p><input id="passwort" type="password" name="passwortw"></p></td>
</tr>
<tr>
<td><p><label for="email">E-Mail:</label> </p></td>
<td><p><input id="email" type="text" name="email"></p></td>
</tr>
<tr>
<td><p><label for="email">E-Mail wiederholen:</label> </p></td>
<td><p><input id="email" type="text" name="emailw"></p></td>
</tr>
</table>
<p><input type="hidden" name="ueberpruefung" value="1">
<input type="submit" name="submit" value="absenden"> <input type="reset" value="löschen"></p>
</form>
<?php
$db_server = "#";
$db_name = "#";
$db_user = "#";
$db_passwort = "#";
if(isset($_POST['ueberpruefung']))
{
$checkok = 1;
if(empty($_POST['name']))
{
$checkok = 0;
$error['name'] = "Bitte einen Namen eingeben!";
}
if(empty($_POST['passwort']))
{
$checkok = 0;
$error['passwort'] = "Bitte geben Sie ein Passwort ein!";
}
if(empty($_POST['passwortw']))
{
$checkok = 0;
$error['passwortw'] = "Die Passwörter stimmen nicht überein!";
}
if(empty($_POST['email']))
{
$checkok = 0;
$error['email'] = "Bitte geben Sie eine E-Mail Adresse ein!";
}
if(empty($_POST['emailw']))
{
$checkok = 0;
$error['emailw'] = "Die E-Mail Adressen stimmen nicht überein!";
}
}
if($checkok)
{
$nick = $_POST['name'];
$password = $_POST['passwort'];
$email = $_POST['email'];
$db = mysql_connect($db_server,$db_user,$db_passwort);
mysql_select_db($db_name);
$neu ="INSERT INTO nick(nick, password, email,)VALUES('$nick','$password','$email',)";
mysql_query($neu);
mysql_close($db);
echo "Der Spieler wurde erfolgreich angelegt.";
}
else
{
?>
<form method='post' action='<?php echo $_SERVER['PHP_SELF']?>'>
<p>Bitte geben Sie Ihre Daten ein.</p>
<table>
<tr>
<td><p><?php echo $error['name'];?><label for='username'>Name:</label> </p></td>
<td><p><input id='username' type='text' name='name'></p></td>
</tr>
<tr>
<td><p><?php echo $error['passwort'];?><label for='passwort'>Passwort</label> </p></td>
<td><p><input id='passwort' type='password' name='passwort'></p></td>
</tr>
<tr>
<td><p><?php echo $error['passwortw'];?><label for='passwort'>Passwort Wiederholen:</label> </p></td>
<td><p><input id='passwort' type='password' name='passwortw'></p></td>
</tr>
<tr>
<td><p><?php echo $error['email'];?><label for='email'>E-Mail:</label> </p></td>
<td><p><input id='email' type='text' name='email'></p></td>
</tr>
<tr>
<td><p><?php echo $error['emailw'];?><label for='email'>E-Mail wiederholen:</label> </p></td>
<td><p><input id='email' type='text' name='emailw'></p></td>
</tr>
</table>
<p><input type='hidden' name='ueberpruefung' value='1'>
<input type='submit' name='submit' value='absenden'> <input type='reset' value='löschen'></p>
</form>
<?php
}
?> MfG Nohos |
| | |
| | #2 (permalink) | |
| Member of Honour ![]() | Zitat:
1.) es ist kein Fehler, sondern nur eine Notice 2.) es ist genau das, was in der Meldung steht: $checkok wird verwendet, ohne dass es vorher deklariert wurde. Das ist in PHP problemlos möglich, bietet jedoch, wenn's an falscher Stelle und möglicherweise noch mit schlechter Server-Config so benutzt wird, Sicherheitsrisiken. Bei vielen würde diese Meldung gar nicht erscheinen. Der Server, wo du dein Script laufen lässt, ist einfach so konfiguriert, dass er dir jede noch so kleine Hinweis-Meldung ausgibt, auf dass du mögliche sicherheits-kritische Punkte beseitigst. Du kannst entweder einfach das Anzeigen der Meldung mittels error_reporting() unterbinden (was die nicht so tolle Herangehensweise wäre) oder du initialisierst die Variable $checkok dort, wo du auch die Datenbank-Daten setzt. btw: dein Script ist anfällig gegen MySQL-Injections... Die Daten, die per POST kommen, gehen direkt in die MySQL-Query ein... Oberste Grundregel: Never trust an user-input!!! am besten mit regulären Ausdrücken ("regex") auseinander setzen (was für dich für den Anfang evtl. noch bissl hoch sein könnte, wenn du selbst für HTML-Formulare noch ein Tutorial benutzt - aber eben zumindestens mal im Hinterkopf behalten!), oder wenigstens die POST-Eingaben per mysql_real_escape_string() escapen. | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Themenstarter Registriert seit: 25.05.08 ![]() Likes: 0 | Zitat:
Aber zu meiner Verteidigung :-) Ich habe nicht wegen dem HTML Formular das Tutorial benutzt sondern um rauszufinden wie ich mit PHP prüfe ob ein Feld ausgefüllt ist oder nicht :-) Und zu dem MySql wie gesagt, es ist ja noch nicht öffentlich, also alles noch in Testphase. Auf jeden Fall herzlichen Dank für die Antwort. Bin mich jetz mal mit mysql_real_escape_string() beschäftigen :-) MfG Nohos | |
| | |
| | #4 (permalink) |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 52 | Zum Thema Sicherheit haben wir hier auch schon einige Themen, da könnte das Ein oder Andere interessante für dich dabei sein, so z.B. Sichere PHP Anwendung |
| | |
| | #5 (permalink) |
| Senior Member Registriert seit: 13.07.08 ![]() ![]() ![]() Likes: 85 | Vor dem IF Block (~Zeile 34) ein $checkok = true; einfügen.
__________________ "It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."+++ BREAKING +++ Troll ertrinkt im Planschbecken +++ |
| | |
| | #6 (permalink) |
| Registriert seit: 27.05.02 ![]() Likes: 0 | mhh.... Eine Frage bevor du dich selbst in was reinreitest später. Hälst du es für eine gute Idee deine Connect-Daten zur DB in der Registrierungsdatei unterzubringen wo die User ihre Daten eingeben? Ich nehme an du willst ein Browser- oder Onlinegame proggen und da wäre sowas fatal, also wenn man so leicht an die Daten kommt.
__________________ Seien wir realistisch, versuchen wir das Unmögliche. |
| | |
| | #7 (permalink) |
| Themenstarter Registriert seit: 25.05.08 ![]() Likes: 0 | Guten Morgen zusammen, erstmal danke für die reichlichen Antworten @ Dreamer: Danke für deine Anmerkung habe mir aber noch vorgenommen das ganze in einer externen Datei abzuspeichern via config.inc.php oder sowas. Und ja das soll mal ein browsergame werden :-) Hat aber alles noch Zeit ich rechne so in 2 -3 Jahren damit :-) Wo wir grade beim Thema sind hätte ich da eventuell noch ne kleine Frage bevor ich mich da jetz mit google blöd suche :-) Was verwendet man in dem Fall eine config datei einzubinden am besten ? include() oder require() hab schon nachgelesen was der unterschied zwischen den beiden ist aber stimmt das wirklich das beide Befehle ziemlich gleich sind ? MfG Nohos |
| | |
| | #8 (permalink) | |
| Member of Honour ![]() | include: Datei soll, soweit vorhanden, eingebunden werden. Wenn zu includende Datei nicht existiert, wird ne Warning ausgegeben require: Datei wird auf jeden Fall benötigt, wenn Datei nicht vorhanden, kommt ein Error (FATAL: bla...) und die Ausführung des Scriptes wird an dieser Stelle beendet. wenn du folgendes Script ausführst: PHP-Code: Zitat:
edit: des weiteren gibt es dann noch require_once() und include_once(). Diese arbeiten genauso, wie die oben beschriebenen Dateien, mit dem Unterschied, dass die Datei nur einmal includet wird, auch wenn das include_once() mehrmals aufgerufen wird. sowas wird gerade dann benötigt, wenn man z.B. objektorientiert in PHP arbeitet... angenommen, wir haben 3 Klassen in 3 Dateien. class_1 in class_1.class.php class_2 in class_2.class.php class_3 in class_3.class.php in unserem Haupt-Script (sagen wir mal index.php) verwenden wir sowohl class_2 als auch class_3 - und beide wiederum sind meinetwegen von class_1 abgeleitet oder verwenden class_1 in irgend einer Form. Wenn du da in class_2.class.php und class_3.class.php jeweils einfach ein include oder require class_1.class.php ausführen würdest und in der index.php ein include "class_2.class.php" include "class_3.class.php" dann würdest du beim zweiten include ne Fehlermeldung bekommen, dass class_1 bereits deklariert ist. Daher: require_once... | |
| | |
| | #9 (permalink) |
| Themenstarter Registriert seit: 25.05.08 ![]() Likes: 0 | merci also werde ich dann wohl mit require arbeiten müssen, den ohne die daten geht ja letzendlich nix :-) edit: Ok dann require_once |
| | |
| | #10 (permalink) |
| Member of Honour ![]() | oder mit include arbeiten und dann im Script bei fehlgeschlagenem mysql_connect() einfach ne Ausgabe bringen: "konnte nicht mit Datenbank verbinden..." aber wenn die Datenbank quasi das Herzstück ist und nichts weiter ohne die Datenbank funktioniert, kannst du auch via require den Fehler raus hauen lassen... ich mach's meistens so: da, wo wirklich nur Prozess-Logik dahinter steht (z.B. bei OOP - die meisten Objekte bei mir, sind nur für Datenverarbeitung zuständig), da verwende ich require_once(), da hier oftmals keine direkte Ausgabe-Schnittstelle da ist, um zu sagen "es tut mir leid, die Datei gibt's hier nicht". Da, wo ich relativ nah an der Datenausgabe bin, verwende ich includes und geb Meldungen aus, wenn etwas nicht geklappt hat. |
| | |
| | #11 (permalink) |
| Registriert seit: 27.05.02 ![]() Likes: 0 | 2 bis 3 Jahre sind eine lange Zeit. Da könnte vieles was du am Anfang gemacht hast schon veraltet sein als Ingameaktion. Falls du interesse hast bei einem Projekt mitzumachen von mir meld dich per PN. Leider kann ich dir, jedenfalls bei diesem Projekt, nichts zahlen da es sogesehen nur um Marketing geht. Kurz: Werbung für ein größeres Projekt. Aber da ich niemand bin der möchte das jemand was macht ohne eine Gegenleistung zubekommen hätte ich da einen Vorschlag für dich der in Zukunft interessant sein könnte. Naja, meld dich halt wenn du mehr wissen willst.
__________________ Seien wir realistisch, versuchen wir das Unmögliche. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |