2016-03-31 11 views
-2

Ich habe dieses Problem mit mysql auf phpmyadmin Datenbanken, die ich meine Datenbank aktualisieren möchte, zum Beispiel den Benutzernamen ändern, aber mit dem aktuellen Code, den ich habe, wenn ich etwas leer lasse, aktualisiert es die Datenbank mit leeren Wert, wollte ich ändere dies, dass, wenn die Post leer ist es funktioniert nicht, die Datenbank zu leeren Raum aktualisierenWenn mein Beitrag leer ist, wie blockiere ich das Update mit meiner Datenbank?

hier ist mein Code:

<!doctype html> 
<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "eerstedatabase"; 

//create connection 
$connection = new mysqli($servername, $username, $password, $dbname); 

if ($_POST) { 

//check connection 
if ($connection->connect_error) { 
    die("Connection failed: " . $connection->connect_error); 
} 
//if these posts are empty it updates them to empty in the database aswell 
$sql = "UPDATE gebruikers SET Gebruikersnaam='" . $_POST['Gebruikersnaam'] . "', 
Wachtwoord='" . $_POST['Wachtwoord'] . "', 
Email='" . $_POST['Email'] . "' 
WHERE ID='" . $_POST['ID'] . "' "; 

if ($connection->query($sql) === TRUE) { 
    echo "Record updated successfully"; 

    include 'Opdracht1.php'; 
} else { 
    echo "Error updating record: " . $conn->error; 
} 
} 
else 
{ 

?> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Naamloos document</title> 
</head> 

<body> 
<center> 
<table> 
<form name="update" action="OpdrachtDW6.php" method="POST"> 
    <tr> 
    <td>ID</td> 
    <td><input type="text" name="ID" rquired /></td> 
    </tr> 
    <tr> 
    <td>Gebruikersnaam</td> 
    <td><input type="text" name="Gebruikersnaam" required /></td> 
    </tr> 
    <tr> 
    <td>Wachtwoord</td> 
    <td><input type="text" name="Wachtwoord" required /></td> 
    </tr> 
    <tr> 
    <td>Email</td> 
    <td><input type="text" name="Email" required /></td> 
    </tr> 
    <tr> 
    <td><input type="submit" value="Updaten" /></td> 
    </tr> 
    </td> 
</form> 
</center> 
</body> 
</html> 

<?php 
} 
?> 
+1

Sie sind offen für SQL-Injektionen mit diesem Code. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

+0

'if (Bedingung) {etwas tun} else {naja, mach etwas anderes}' mit optionalen 'AND | OR'. –

+0

Sie könnten auch Ihre Spalte (n) ändern, um keine NULL-Werte zu akzeptieren. –

Antwort

0

Sie müssen den Wert der $ _POST Felder auf der Serverseite überprüfen.

$errs = false; 

if ($_POST['ID'] == "") { 
    $errs = true; 
    echo "ID Field Missing"; 
} 
if ($_POST['Gebruikersnaam'] == "") { 
    $errs = true; 
    echo "Gebruikersnaam Field Missing"; 
} 

/* And so on... */ 

if (!$errs) { 
    //check connection 
    if ($connection->connect_error) { 
     die("Connection failed: " . $connection->connect_error); 
    } 

    $sql = "UPDATE gebruikers SET Gebruikersnaam='" . $_POST['Gebruikersnaam'] . "', 
    Wachtwoord='" . $_POST['Wachtwoord'] . "', 
    Email='" . $_POST['Email'] . "' 
    WHERE ID='" . $_POST['ID'] . "' "; 

    if ($connection->query($sql) === TRUE) { 
     echo "Record updated successfully"; 

     include 'Opdracht1.php'; 
    } else { 
     echo "Error updating record: " . $conn->error; 
    } 
} 
+0

ja, aber, das bedeutet, dass Sie diese Formulare ausfüllen müssen, ich will es, dass, wenn Sie sie nicht in den Code füllen nicht die Datenbank –

+0

Sie haben sie in Ihrem HTML-Code wie erforderlich festgelegt. Die meisten Webbrowser geben dem Benutzer keine Wahl. Sie müssen 'required' aus den Formularfeldern entfernen. Und wenn Sie möchten, dass es ohne Fehlermeldungen stumm schlägt, entfernen Sie einfach die Zeilen, die einen Fehler ausgeben, an den Benutzer. – omnichad

0

Sie überprüfen können, ob die POST-Werte sind leer oder nicht:

if(empty($_POST['Email']) 
    // Do something 

Es gibt andere Optionen, wie die Länge der Zeichenfolge zu überprüfen, wenn der Name zu kurz ist, vielleicht ist es nicht akzeptabel ist. Ich hoffe das hilft.

+0

das ist, was ich tun will, aber, wie sage ich den PHP-Code nicht zu aktualisieren, wenn (leer ($ _ POST ['Email']) nicht aktualisieren –

0

können Sie diese Logik verwenden

if(isset($_POST['Email'])){ 
    //post email is not empty! and you can insert in database! 
    if ($connection->query($sql) === TRUE) { 
     echo "Record updated successfully"; 
     include 'Opdracht1.php'; 
    } else { 
     echo "Error updating record: " . $conn->error; 
    } 
} 
1

Hier ist die (Grund-) Logik gegen (nicht) leere Felder zu überprüfen.

Nebenbemerkung: Siehe Kommentare im Code, um wie gewünscht zu verarbeiten.

if(!empty($_POST['ID']) 

&& !empty($_POST['Gebruikersnaam']) 
&& !empty($_POST['Wachtwoord']) 
&& !empty($_POST['Email']) 

) 

{ 

// Execute the query 

} 

else { 

// kill the process or do something else 

} 

Wenn Sie nur das Update durchführen wollen, wenn nur die E-Mail leer ist, dann tut einfach:

if(!empty($_POST['Email'])) { 

    $sql = "UPDATE gebruikers ... 

    // Rest of your code 

} 

Consult folgende auf PHP logischen Operatoren:

und empty():


Fußnoten:

Ihr jetziger Code ist offen für SQL injection. Verwenden Sie prepared statements oder PDO mit prepared statements.

auch ein Update auf tun und wenn es wirklich erfolgreich war zu überprüfen, verwenden Sie mysqli_affected_rows():

als if ($connection->query($sql) === TRUE) könnten Sie einen Fehlalarm geben.

Sie können Ihre Spalte (n) auch so ändern, dass keine NULL-Werte akzeptiert werden.

Consult http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html

und es/sie als NOT NULL zu machen.


Auf einer zusätzlichen Anmerkung, diese if ($_POST) { zu if(isset($_POST['submit'])){ und das Hinzufügen des submit Namensattribut zu Ihrem Submit-Button geändert werden könnte.

+0

Vielen Dank für Ihre Hilfe, ich versuche dies aus atm, dies Die Felder in meiner Datenbank werden nicht aktualisiert, wenn sie leer sind –

+0

@JakeImhoff Genau und du bist willkommen.Auf eine zusätzliche Notiz und wie ich in den Kommentaren gepostet habe, kannst du auch deine Spalte (n) so ändern, dass sie keine NULL-Werte akzeptiert gehe auf den Level-Fehler ein Plus, und etwas, das ich meiner Antwort hinzufügen werde, ist mysqli_affected_rows() 'http://php.net/manual/en/mysqli.affecte-rows.php für die tatsächliche Wahrheit, wenn das Update war wirklich erfolgreich –

+0

Hinweis zur Bearbeitung: Ich schätze die Bearbeitungen für meine Antwort, aber es ist in Ordnung, wie es ist * danke * Ich bearbeite die erste Zeile dort ;-) –

0

Was ich zuvor getan habe, ist meine Abfrage in Variablen zu erstellen, und wenn eine Variable leer ist, wird dieses Bit der Abfrage übersprungen.

Zum Beispiel

if($_POST['fielda']) { 
    $fieldasql = "fielda = '".$_POST['fielda']."',"; 
} else { 
    $fieldasql = ""; 
} 

if($_POST['fieldb']) { 
    $fieldbsql = "fieldb = '".$_POST['fieldb']."',"; 
} else { 
    $fieldbsql = ""; 
} 

dann Ihre Abfrage wäre:

$sql = "UPDATE gebruikers SET " . $fieldasql . " " . $fieldbsql; 
Verwandte Themen