2016-08-27 6 views
1

Ich habe ein PHP-Skript, das eine einzigartige E-Mail zu einer MySQL-Datenbank hinzufügt. Der PHP-Skript ist:mehrere Einträge in Datenbank

<?php 
    try { 
      $pdo = new PDO('mysql:host=localhost;dbname=ourdatabase', 'shyam', 'mypassword'); 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $pdo->exec('SET NAMES "utf8"'); 
    } 
    catch (PDOException $e) { 
     exit(); 
    } 

    try { 
      $email=$_POST['email']; 
      $sql = "SELECT username FROM users WHERE email LIKE '$email'"; 
      $result = $pdo->query($sql); 
    } catch (PDOException $e) { 
      exit(); 
    } 

    if ($row = $result->fetch()) { 
     $resturant[] = array('status' => "userexists"); 
     echo json_encode($resturant); 
     exit(); 
    } else { 
     try { 
      $sql = 'INSERT INTO users SET 
       email = :mailaddress, 
       password = :password, 
       tagline = :tagline'; 

      $s = $pdo->prepare($sql); 
      $s->bindValue(':mailaddress', $_POST['email']); 
      $s->bindValue(':password', $_POST['password']); 
      $s->bindValue(':tagline', $_POST['tagline']); 
      $s->execute(); 
      exit(); 
     } catch (PDOException $e) { 
      exit(); 
     } 
    } 
    ?> 

ich dieses Skript aus einer schnellen Datei am Zugriff auf:

@IBAction func registerClick(sender: AnyObject) { 

    let url:NSURL = NSURL(string: url_to_request)! 
    let session = NSURLSession.sharedSession() 

    let request = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData 

    let paramString = "email=\(email.text!) & password=\(password.text!) & tagline=\(tagline.text!)" 
    request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding) 
    for index in 1...10{ 
    let task = session.dataTaskWithRequest (request, completionHandler: {data, response, error -> Void in }) 

    task.resume() 
    } 

    } 

Aber mehrere Einträge in der Datenbank hinzugefügt:

databse screen shot

enter image description here

Ich lief die Schleife, um zu überprüfen, ob viele Benutzer versuchen, reg iter mit der gleichen E-Mail gleichzeitig. Wie kann ich nur eine Instanz dieses PHP-Skripts ausführen und andere in der Warteschlange lassen. Bitte helfen Sie mir, wenn ich hier feststecke.

+1

Haben Sie versucht, zuerst eine 'COUNT()' Anweisung auszuführen? Auch Sie verwenden PDO und Sie verwenden nicht bind, um gegen Injektion zu schützen '" SELECT username VON Benutzern WHERE E-Mail LIKE '$ email' ";' – Rasclatt

+0

Danke notiert ... wird es in PHP-Datei –

+0

enthalten, wie kann ich integrieren count() here –

Antwort

2

würde ich vorschlagen, einfach UNIQUE hinzufügen auf E-Mail:

alter table users add unique (email) 

Dass Sie Rennbedingungen vermeiden helfen. Sie verarbeiten auch keine Szenarien mit gemischten Fällen und schneiden die E-Mails nicht ab, was Sie tun sollten.

+0

Ich habe die oben genannten hinzugefügt, aber die Zeilen werden beim Hinzufügen der gleichen E-Mail übersprungen. –

+0

Das liegt daran, dass Ihre Einfügung jetzt eine Ausnahme auslöst und Sie sie im Hintergrund abfangen. Überprüfen Sie die Ausnahme auf korrekten Code (893 für die Verletzung der eindeutigen Integritätsbedingung) und geben Sie dann die richtige HTTP-Antwort zurück (z. B. 409 Conflict). –

Verwandte Themen