2016-04-23 5 views
-1

Ich versuche, Formulardaten mit mysqli, PHP einzufügen. Das Problem, mit dem ich festhalte, ist, dass es "?" wie die Form Werte in der Tabelle anstelle von was ich in das Formular eintippe? Ich weiß, dass ich irgendwo falsch liege, aber ich bin nicht in der Lage, es herauszufinden.Wie füge ich Formulardaten mit MySqli/PHP ein?

Meine zusätzliche Frage ist: Ist es sicher, mysqli Anweisungen wie diese zu verwenden, um Daten aus der Datenbank einzufügen oder auszuwählen, da ich denke, $ _POST wird eine Bedrohung für Injektionsangriffe ,. Ist es jetzt genug, was ich hier schreibe, um Angriffe zu verhindern, oder muss ich etwas mehr hinzufügen?

Alle Vorschläge wären von großer Hilfe.

Hier ist mein Code

index.php

<?php 

     session_start(); 
     include('db.php'); 

?> 

<!DOCTYPE html> 

<head> 

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <meta name="viewport" content="width=device-width,initial-scale=1" /> 
    <link rel="stylesheet" type="text/css" href="style.css"/> 

</head> 

<body> 


<?php 

    if(isset($_POST['login']) && $_POST['login'] == 'Login') { 
     $loginEmail = $_POST['loginEmail']; 
     $loginPassword = $_POST['loginPassword']; 

     $query = $db->prepare("INSERT INTO dbname(password,email) VALUES ('?','?');"); 
     $query->bind_param("ss",$loginEmail,$loginPassword); 
     $query->execute(); 

    }   
    ?> 

     <div id="login">    
      <strong>Login</strong> 

      <br/><br/> 

      <form action = "<?php echo $_SERVER['PHP_SELF'];?>" method="POST"> 
       <table style="width:500px">       
        <tr> 
         <td><input type="text" name="loginEmail" placeholder = "Email" required/><br/></td> 
        </tr>      
        <tr> 
         <td><input type="password" name="loginPassword" placeholder = "Password" required/><br/></td> 

        </tr> 
       </table> 

       <input style="font-weight: bold; width: 70px; height: 25px; border-radius: 5px;" type="submit" name="login" value="Login"/> 
      </form> 
     </div>  
</body>  
</html> 

db.php

<?php 

     $host = 'host'; 
     $user = 'user'; 
     $password = 'password'; 
     $database = 'dbname'; 

     $db = new mysqli($host, $user, $password, $database); 

     if($db->connect_errno > 0){ 
      die('Unable to connect to database ['.$db->connect_errno.']'); 
     } 
?> 
+0

Sie haben Syntaxfehler in Ihrem vorbereiteten Anweisung und nicht auf Fehler zu überprüfen. Dann verwenden Sie Nur-Text für Passwörter. Wenn Sie leben oder beabsichtigen, damit zu leben, nicht. Verwende 'password_hash()'. –

+0

Sie sollten keine Klartextpasswörter in Ihrer Datenbank speichern. Siehe [password_hash()] (http://php.net/manual/en/function.password-hash.php) und [password_verify()] (http://php.net/manual/en/function.password- verify.php) – RiggsFolly

+0

@fred: meinst du password_hash ($ loginPassword)? –

Antwort

2

Verwenden

$db->prepare("INSERT INTO users(password,email) VALUES (?, ?);"); 

Statt

$db->prepare("INSERT INTO users(password,email) VALUES ('?','?');"); 

ps. Reihenfolge ist wichtig: In Ihrer bind_param() haben Sie E-Mail und Passwort in umgekehrter Reihenfolge als in Ihrer Abfrage.

0

Entfernen Sie die Anführungszeichen in Ihrer INSERT-Abfrage.

$query = $db->prepare("INSERT INTO dbname(password,email) VALUES (?,?);"); 

Auch würde ich Ihnen vorschlagen Funktionen zu nutzen wie stripslahes() und trim()

Verwendung:

$loginEmail = trim (stripslashes($_POST['loginEmail'])); 
$loginPassword = stripslashes($_POST['loginPassword']); 
+1

'trim()' auf ein Passwort? Und warum müssen bei einer vorbereiteten Anweisung sogar noch unnötige Funktionen verwendet werden? –

+0

Guter Punkt! Aber Trim kann sicherlich verwendet werden. –

+1

Sehen Sie diese Fragen und Antworten zu Stack http://stackoverflow.com/questions/36628418/cleansing-user-passwords Sie werden sehen, was ich meinte. Plus, wenn ein Benutzer ein \ in ihren Passwörtern oder Benutzer hat, dann kann das, was Sie gepostet haben, fehlschlagen.Das Passwort-Array sollte nicht manipuliert werden. –

Verwandte Themen