Wie verhindern, dass doppelte Benutzernamen in php/mysql
(Dies ist mein Erster Versuch mit php)
Ich habe eine sehr einfache registrieren Seite.
http://graves-incorporated.com/test_sites/member_test/register/register.php
* Ich erinnerte mich nur PHP-code nicht zeigen, bis in der Quelle, also hier ist es:
enter code here
<?php
include('connection.php');
if(isset($_POST['form'])){
if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['conf_pass']) || empty($_POST['email'])){
echo '<b>Please fill out all fields.</b>';
}elseif($_POST['password'] != $_POST['conf_pass']){
echo '<b>Your Passwords do not match.</b>';
}else{
$url = 'http://graves-incorporated.com/test_sites/plantation_park_2012/';
echo '<META HTTP-EQUIV=Refresh CONTENT="2; URL='.$url.'">';
echo '<b>Congrats, You are now Registered.</b>';
mysql_query("INSERT INTO users VALUES(NULL, '$_POST[username]', '$_POST[password]', '$_POST[email]')");
}
}
?>
Möchte ich sicherstellen, dass ich nicht, um doppelte Benutzer und/oder E-Mail-Adressen in der Datenbank. Ich habe ein Unique-Key in der MySQL-Benutzername und E-Mail, das verhindert, aber der Benutzer auf die tatsächliche form, die nicht wissen, es immer noch sagt Sie "herzlichen Glückwunsch, Sie sind angemeldet" oder was auch immer es sagt... haha
Also, was kann ich hinzufügen, um den php-code (und wo im code), das dies verhindern würde?
Dank für die Unterstützung dieses wichtigen noob,
Dan Graves
- Sie brauchen, um zu überprüfen, ob
insert
Abfrage fehlgeschlagen oder nicht. Und wenn es das tut - siehe die Nachricht mitmysql_error()
- könnten Sie mir sagen, genau wie Sie, dass? php-ist buchstäblich eine Fremdsprache für mich. Ich Lerne es, so schnell ich kann, aber bin noch nicht voll greifen, haha
- Look-up-SQL-Injection-Angriffe; Ihr code ist unsicher.
- oh wirklich? Wie kann ich das verhindern? Ich brauche keine high-level-security für diese Website
- Das ist sehr grundlegende Sicherheit - google und Sie ' ll finden Tonnen von tutorials.
- Diese SQL-Injection-Angriff Zeug ist Weise über meinem Kopf. Ich bin baby-stepping mit php, ich denke nicht, dass ich das know-how zu implementieren, die Verteidigung gegen diese Angriffe
- tizag.com/mysqlTutorial/mysql-php-sql-injection.php Hier ist ein anständiges tutorial, es ist nicht schwer, gegen zu verteidigen.
- Ich weiß nicht, wo ich bin nehme an, fügen Sie die "mysql_real_escape_string()" in meinem php-code
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem DB-Treiber verwenden Sie? Sind Sie auf der Suche nach DB-Fehler? Einige von Ihnen nur gerne Segeln Vergangenheit keine DB-Fehler und Sie haben eine Funktion aufgerufen werden, die speziell zu prüfen, für DB-Fehler. die DB sollte einen Fehler auslösen, auf doppelte Daten, und Sie können auswählen, dass der Fehler auf und der Benutzer gewarnt.
Einer Benutzeroberfläche Punkt stehen, ich denke, es wäre toll, wenn Sie die Fähigkeit haben, zu überprüfen, per ajax-request, wenn der Benutzername vorhanden ist in der db oder nicht, ist so etwas wie eine Verfügbarkeit checker.
Würde es auch sparen Sie cpu-Zeit, wenn Sie isolieren, ein Prozess der Prüfung username Verfügbarkeit eher als die Verarbeitung alles nur um herauszufinden, dass der username ist nicht verfügbar.
Dies über jquery, ich würde empfehlen:
Und auf Ihre php-Ende-führen Sie eine Abfrage auf die Datenbank, würde wie folgt Aussehen:
Auch sehr, sehr vorsichtig sein, nicht zu erlauben, ungeprüfte post-Variablen in die Datenbank zu verhindern, dass SQL-Injektionen.
Schließlich versuchen, eine bessere PHP-Datenbank extensioin wie MySQLi, die meisten STMT-Anfragen automatisch bereinigen Variablen über mysqli_prepare.
Glück!
Können Sie ajax-Abfrage, bevor Sie Einreichen, um zu überprüfen/zu verhindern ist bereits vorhanden
Auch im back-end, nachdem Sie die INSERT INTO... die Sie tun können, WÄHLEN Sie FOUND_ROWS() zu prüfen, ob es tatsächlich gleich 1 ist, bedeutet es, dass eine Zeile eingefügt.
Dann umleiten Benutzer auf Fehler-Seite mit Informationen, was nicht korrekt ist.
Für eine bessere Benutzer-Erfahrung, ich empfehlen die erste option, mit JQuery wird es nicht nehmen eine Menge Zeit zu implementieren.