PHP: Waarden van het formulier invoegen in MySQL

Ik heb een users-tabel gemaakt in mysqlvanaf de terminal en ik probeer een eenvoudige taak te maken: waarden invoegen uit het formulier. Dit is mijn dbConfig file

<?php
$mysqli = new mysqli("localhost", "root", "pass", "testDB");
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
?>

en Dit is mijn Index.php.

<!doctype html>
<html>
 <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="description" content="$1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>test</title>
    <?php
    include_once 'dbConfig.php';
    ?>
</head>
<body>
     <?php
    if(isset($_POST['save'])){
        $sql = "INSERT INTO users (username, password, email)
        VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
    }
    ?>
    <form method="post"> 
    <label id="first"> First name:</label><br/>
    <input type="text" name="username"><br/>
    <label id="first">Password</label><br/>
    <input type="password" name="password"><br/>
    <label id="first">Email</label><br/>
    <input type="text" name="email"><br/>
    <button type="submit" name="save">save</button>
    <button type="submit" name="get">get</button>
    </form>
</body>
</html>

Nadat ik op de knop Opslaan heb gedrukt, gebeurt er niets, de database is nog steeds leeg. Ik heb geprobeerd de echo'ing-query te INSERTen het neemt alle waarden van het formulier zoals het hoort. Nadat ik heb geprobeerd te controleren of dit werkte vanaf de terminal, log ik in op mijn sqlen probeer alle gegevens uit de gebruikerstabel te retourneren en krijg ik een lege set.


Antwoord 1, autoriteit 100%

De volgende code declareert alleen een stringvariabele die een MySQL-query bevat:

$sql = "INSERT INTO users (username, password, email)
    VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";

Het voert de query niet uit. Om dat te doen, moet je enkele functies gebruiken, maar laat me eerst iets anders uitleggen.

VERTROUW NOOIT GEBRUIKERSINVOER: u mag nooit gebruikersinvoer toevoegen (zoals formulierinvoer van $_GETof $_POST) directop uw vraag. Iemand kan de invoer zo zorgvuldig manipuleren dat deze grote schade aan uw database kan veroorzaken. Dat heet SQL-injectie. Je kunt er hier

meer over lezen

Om je script tegen een dergelijke aanval te beschermen, moetje Voorbereide Verklaringen gebruiken. Meer over voorbereide verklaringen hier

Voeg voorbereide instructies als volgt toe aan uw code:

$sql = "INSERT INTO users (username, password, email)
    VALUES (?,?,?)";

Zie hoe de ?worden gebruikt als tijdelijke aanduidingen voor de waarden. Vervolgens moet u de verklaring voorbereiden met behulp van mysqli_prepare:

$stmt = $mysqli->prepare($sql);

Begin dan de invoervariabelen te binden aan het voorbereide statement:

$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);

En voer tenslotte de voorbereide instructies uit. (Hier vindt de eigenlijke invoeging plaats)

$stmt->execute();

OPMERKINGHoewel dit geen deel uitmaakt van de vraag, raad ik je ten zeerste aan om wachtwoorden nooit in leesbare tekst op te slaan. In plaats daarvan moet u password_hashgebruiken om een hash van het wachtwoord op te slaan


Antwoord 2, autoriteit 13%

Er zijn twee problemen met uw code.

  1. Geen actie gevonden in formulier.
  2. U heeft de zoekopdracht mysqli_query()
  3. niet uitgevoerd

dbConfig.php

<?php
$conn=mysqli_connect("localhost","root","password","testDB");
if(!$conn)
{
die("Connection failed: " . mysqli_connect_error());
}
?>

index.php

include('dbConfig.php');
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="$1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="style.css">
<title>test</title>
</head>
<body>
 <?php
  if(isset($_POST['save']))
{
    $sql = "INSERT INTO users (username, password, email)
    VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
    $result = mysqli_query($conn,$sql);
}
?>
<form action="index.php" method="post"> 
<label id="first"> First name:</label><br/>
<input type="text" name="username"><br/>
<label id="first">Password</label><br/>
<input type="password" name="password"><br/>
<label id="first">Email</label><br/>
<input type="text" name="email"><br/>
<button type="submit" name="save">save</button>
</form>
</body>
</html>

Other episodes