2016-06-16 6 views
0

Ich möchte mysqli UPDATE in meiner registerUsers-Tabelle ausführen, und sobald ich die Update-Taste gedrückt habe, aktualisiert es die Felder, die aktualisiert wurden.MySQL-Datenbank - Abfrage nur bestimmte Felder zu aktualisieren

Ich brauche es, um den Vornamen, Nachnamen und E-Mail zu aktualisieren und nichts zu tun, wenn die Passwortfelder leer sind. Wenn das Passwort ausgefüllt ist, möchte ich alle Felder aktualisieren.

Der Kommentar gesetzt Code (ist Passwörter Felder '/ leer sind', scheint nicht .. Irgendwelche Ideen

zu arbeiten, wie ich dies tun würde?

<?php 

include 'dbconnect.php'; 
include 'dumpr.php'; 

session_start(); 

if(! $_SESSION['username']) { 

header("Location: project-users-logout.php"); 
die(); 
} 

$userid = mysqli_real_escape_string($db, $_GET['id']); 

$sql = "SELECT * FROM registeredUsers WHERE UserID=$userid"; 

$query = mysqli_query($db,$sql); 

$row = mysqli_fetch_assoc($query); 


//Clean form values 
$cleanFirstName = mysqli_real_escape_string($db, $_POST['frmName']); 
$cleanSurname = mysqli_real_escape_string($db, $_POST['frmSurname']); 
$cleanEmail = mysqli_real_escape_string($db, $_POST['frmEmail']); 

//Clean password 
$password = sha1(mysqli_real_escape_string($db, $_POST['frmPassword1'])); 

if (isset($_POST['Update']) && $_POST['Update'] == "Update") { 


if (($_POST['frmName'] != '') && 
    ($_POST['frmSurname'] != '') && 
    ($_POST['frmEmail'] != '') 
//  && ($_POST['frmPassword1'] = '') && ($_POST['frmPassword2'] = '') 
    ) 

{ 

    $sql2 = "UPDATE registeredUsers SET FirstName = '$cleanFirstName', Surname = '$cleanSurname', EmailAddress='$cleanEmail' WHERE UserID='$userid'"; 

     $upQry = mysqli_query($db, $sql2); 

     if ($upQry) { 
      /* SUCCESS */ 
      header ("Location: project-users-manage.php "); 
      exit; 
     } else { 
      /* FAIL */ 
    } 

    } 
} 


?> 

<table border='1'> 
<tr> 
<th>Username</th> 
<th>First Name</th> 
<th>Surname</th> 
<th>Email Address</th> 
<th>Password 1</th> 
<th>Password 2</th> 
<th></th> 
</tr> 

<?php 

echo "<form action='' method=post>"; 
echo "<tr>"; 
echo "<td>" . "<input disabled='disabled' type=text name=user value=" . $row['UserName'] . " </td>"; 
echo "<td>" . "<input type=text name='frmName' value=" . $row['FirstName'] . " </td>"; 
echo "<td>" . "<input type=text name='frmSurname' value=" . $row['Surname'] . " </td>"; 
echo "<td>" . "<input type=text name='frmEmail' value=" . $row['EmailAddress'] . " </td>"; 
echo "<td>" . "<input type=text name='frmPassword1' value='' " . "</td>"; 
echo "<td>" . "<input type=text name='frmPassword2' value='' " . "</td>";  
echo "<td><input type='submit' name='Update' value='Update'></td>"; 
echo "</form>"; 
echo "</tr>"; 


header("Location: project-users-manage.php"); 
exit; 

?>

+0

'='! = '=== '! Sie weisen '' zu $ ​​_POST ['password'] zu, nicht vergleichen! also ändere dort '=' zu '==='! – Jeff

+0

Sie überprüfen nicht wirklich, ob das Passwort übereinstimmt, d. Alles, was zum Ausführen der "UPDATE" -Abfrage erforderlich ist, besteht darin, eine zufällige Zeichenfolge in das Passwortfeld einzugeben. Sie müssen das Passwort des Benutzers bestätigen. – Marcus

+0

Und tun Sie dies nicht: 'mysqli_real_escape_string ($ db, $ _POST ['frmPassword1'])' Lassen Sie das Passwort des Benutzers allein. Hash es einfach. Zitate nicht umgehen (durch Hinzufügen eines \ zu ihrem Passwort), trimmen nicht Whitespace, nicht konvertieren, um spezielle Zeichen/HTML-Entitäten, etc, etc., etc. Hash es. Vorzugsweise mit [password_hash()] (http://php.net/password) – Marcus

Antwort

0

Sie zuweisen '' zu $_POST['frmPassword1] hier:

&& ($_POST['frmPassword1'] = '') && ($_POST['frmPassword2'] = '') 

, aber Sie wollen es tatsächlich vergleichen:

&& ($_POST['frmPassword1'] === '') && ($_POST['frmPassword2'] === '') 

ich die gewünschte Logik wie das umzusetzen wäre:

if (($_POST['frmName'] != '') && 
    ($_POST['frmSurname'] != '') && 
    ($_POST['frmEmail'] != '') 
    ) 

{ 
    $updatePwd=''; 
    if ($_POST['frmPassword1'] != '') && ($_POST['frmPassword2'] != '') { 
     $updatePwd = ", password='".$_POST['frmPassword1']."' "; 
    } 
    $sql2 = "UPDATE registeredUsers SET FirstName = '$cleanFirstName', Surname = '$cleanSurname', EmailAddress='$cleanEmail'"; 
    $sql2.= $updatePwd." WHERE UserID='$userid'"; 
    // rest of code.... 
} 

HINWEIS
Drei wichtige Dinge fehlt/in diesem einfachen Beispiel weggelassen:
-Escaping user-input
-Verwenden Sie vorbereitete Anweisungen
-encrypt Passwort

0

Verwenden ähnliche

if (($_POST['frmPassword1'] != '') && ($_POST['frmPassword2'] != '')){ 
//Query For update All Field 
}else{ 
$sql2 = "UPDATE registeredUsers SET FirstName = '$cleanFirstName', Surname = '$cleanSurname', EmailAddress='$cleanEmail' WHERE UserID='$userid'"; 
} 

zu aktualisieren, überprüfen Sie die passqord fileds