2016-04-18 15 views
0

Ich habe eine Profilseite, Funktion für die Bearbeitung und eine Prüffunktion für die Bearbeitung.überprüfen, ob Profildaten auf Profilaktualisierung vorhanden sind

Profilseite:

if (isset($_POST['edit']) && $_POST['edit'] === 'Edit') { 

    $errorMsgs = $user->validateUpdate($_POST); 
    if (empty($errorMsgs)) { 
    $id = $_POST['id']; 
     $username = $_POST['username']; 
     $email = $_POST['email']; 
    $user->updateProfile($username,$email,$id); 
    echo 'edited'; 
    exit; 
    } 
    foreach ($errorMsgs as $msg) { 
     echo '<li>'. $msg. '</li>'; 
    } 
} 


     while ($row = mysqli_fetch_assoc($result)) { 
    ?> 
<form action="<?php $_SERVER['PHP_SELF'];?>" method="POST"> 
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" /> 
Username<br> 
<input type="text" name="username" value="<?php echo $row['username']; ?>" /><br> 
Email<br> 
<input type="text" name="email" value="<?php echo $row['email']; ?>" /><br> 
<input name="edit" type="submit" value="Edit"/> 
</form> 
<?php } 
     ?> 

Update-Funktion:

function updateProfile($username,$email,$id){ 
     $con = new Core(); 
     $con->connect(); 
     $username = trim(strtolower($username)); 
     $username = str_replace(' ', '', $username); 
     $sql = 'UPDATE users SET username = ?, email = ? where id = ?'; 
     if ($stmt = $con->myconn->prepare($sql)) 
     { 
      $stmt->bind_param('ssi', $username, $email, $id); 
      $stmt->execute(); 
      $stmt->close(); 
     } 
     else{ 
      die("errormessage: " . $con->myconn->error); 
     } 

    } 

Check-Funktion:

function validateUpdate(array $userDetails) 
    { 
     $con = new Core(); 
     $con->connect(); 
     $errmsg_arr = array(); 
     foreach($userDetails as $key => $value) { 
      if (empty($value)) { 
       $errmsg_arr[] = ucwords($key) . " field is required"; 
      } 
     } 

     if (!empty($userDetails['edit'])) { 
      if (!empty($userDetails['email']) && !filter_var($userDetails['email'], FILTER_VALIDATE_EMAIL)) { 
       $errmsg_arr[] = "the provided email is not a valid email address"; 
      } 

      $sqlu = "SELECT username FROM users WHERE username = ?"; 
      if($stmt = $con->myconn->prepare($sqlu)){ 
       $stmt->bind_param('s', $_POST['username']); 
       $stmt->execute(); 

      } 
      if($stmt->fetch() > 0){ 
       $errmsg_arr[] = "Username already exists!"; 
       $stmt->close(); 
      } 

      $sqle = "SELECT email FROM users WHERE email = ?"; 
      if($stmt = $con->myconn->prepare($sqle)){ 
       $stmt->bind_param('s', $_POST['email']); 
       $stmt->execute(); 
      } 
      if($stmt->fetch() > 0){ 
       $errmsg_arr[] = "Email already exists!"; 
       $stmt->close(); 
      } 
     } 
     return $errmsg_arr; 
    } 

Alles funktioniert perfekt. Aber es gibt einen Fehler in diesem Scheck.

Jemand geht zu ihrem Profil. Die Person versucht, Details zu bearbeiten, bearbeitet alles: Code-Echo ist "erfolgreich bearbeitet".

Aber wenn die Person versucht, E-Mail nur statt aller Details zu bearbeiten, wird die Fehlermeldung, dass der "Benutzername-Wert" bereits vorhanden ist.

Jetzt meine Frage: Wie würde ich es nicht überprüfen, den Benutzernamen Wert, wenn es nicht bearbeitet wird? Oder E-Mail-Wert?

Vielen Dank im Voraus!

Antwort

0

Sie würden den Benutzer ausschließen, der von der Abfrage angemeldet ist. Während der Anmeldung speichern Sie die Benutzer-ID in einer Sitzungsvariablen. Sie können diese Variable verwenden, um zu verhindern, dass die Abfragen für den Benutzer selbst geprüft werden.

Das sollte Ihr Problem beheben! More info on session variables

+0

Dies half! Ich habe so gar nicht darüber nachgedacht. Vielen Dank! –

+0

Kein Problem ^^ Ich bin froh, dass ich helfen kann! Viel Glück für den Rest Ihres Projekts, ich würde gerne helfen, wenn andere Probleme auftreten. P.S. Ich habe gerade bemerkt, dass Sie diese Session-Variablen wahrscheinlich auch mit der vorbereiteten Anweisung hinzufügen sollten (nicht so, wie ich es hier getan habe), aber ich nehme an, dass Sie es bereits korrekt implementiert haben :) – Jester

+0

Ja, das stimmt. Ich arbeite mit PDOs. –

Verwandte Themen