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!
Dies half! Ich habe so gar nicht darüber nachgedacht. Vielen Dank! –
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
Ja, das stimmt. Ich arbeite mit PDOs. –