Обновление 11 октября 2020 г.

Я пробовал этот код:

<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$connect = mysqli_connect("localhost", "root", "", "sip-krl");
 
// Check connection
if($connect === false){
    die("ERROR: Koneksi gagal " . mysqli_connect_error());
}

$id_jenisPembayaran = $_POST['id_jenisPembayaran'];
$nama_jenisPembayaran = $_POST['nama_jenisPembayaran'];
 
// Attempt insert query execution
$sql = "INSERT INTO jenispembayaran (id_jenisPembayaran, nama_jenisPembayaran) VALUES ('$id_jenisPembayaran', '$nama_jenisPembayaran')";
if(mysqli_query($connect, $sql)){
    echo "Data berhasil dimasukkan";
} else{
    echo "ERROR: Data gagal masuk ke basis data $sql. " . mysqli_connect_error();
}
 
// Close connection
$connect->close();

header("location:/skripsi-manual/data-jenisPembayaran.php");
?>

Работает отлично. Однако это также делает мою программу уязвимой для SQL-инъекции.

Я в тупике, почему это (приведенный выше код) работает, но приведенный ниже код ни к чему не приводит?

Может ли кто-нибудь показать мне, почему? Заранее спасибо.


Я создаю форму для ввода данных о типе платежа в свою базу данных. Коды следующие:

.php файл = input-jenisPembayaran.php

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sip-krl";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

$id_jenisPembayaran = mysqli_escape_string ($conn, $_POST['id_jenisPembayaran']);
$nama_jenisPembayaran = mysqli_escape_string($conn, $_POST['nama_jenisPembayaran']);

$sql = "INSERT INTO jenispembayaran (id_jenisPembayaran, nama_jenisPembayaran);
VALUES (?,?)";

$stmt = mysqli_stmt_init($conn);

if(!mysqli_stmt_prepare($stmt, $sql)){
    echo "Error.";
} else{
    mysqli_stmt_bind_param($stmt, "is", $id_jenisPembayaran, $nama_jenisPembayaran);
    mysqli_stmt_execute($stmt);
}

header("location:/skripsi-manual/jenispembayaran.php?tambah-data=success");

$conn->close();
$stmt->close();
?> 

Форма: jenispembayaran.php

<div class="content">
        <form action="./assets/php/input-jenisPembayaran.php" method="POST">
           <article class="card">
                <h4> Masukkan Jenis Pembayaran </h4>
                <br>
                <br>
                <label for="id_jenisPembayaran">Kode Jenis Pembayaran:</label>
                <input type="text" name="id_jenisPembayaran" id="id_jenisPembayaran">
                <br>
                <br>
                <label for="nama_jenisPembayaran">Nama Jenis Pembayaran:</label>
                <input type="text" name="nama_jenisPembayaran" id="nama_jenisPembayaran">
                <br>
                <br>
                <button input type="submit" value="submit">Masukkan</button>
            </article>
        </form>
    </div>

Структура базы данных:

dbName: sip-krl => table: jenispembayaran => tableRows: id_jenisPembayaran (int), nama_jenisPembayaran (varchar)

"input-jenisPembayaran.php" удается подключить мою форму к базе данных. Но он не может вставить введенные мной данные.

Может ли кто-нибудь показать мне, где мой код пошел не так, и показать мне, как это решить?

Заранее спасибо.

-1
jovitaAS 6 Окт 2020 в 23:52

1 ответ

Лучший ответ

Я пробовал использовать ваш код и, имея ограниченные знания PHP, не смог заставить его работать. Также я нашел учебник, похожий на ваши коды, но я также не мог заставить его работать. Однако я нашел другой учебник, который работает, и попытался подражать тому, что вы делаете, с помощью этого учебника, и мне удалось выполнить желаемый процесс с помощью этого кода ниже:

<?php
/* Database credentials. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'mydatabase');
 
/* Attempt to connect to MySQL database */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

/* You can set a separate connection file and instead of writing the database connection credentials, 
   just call it using  require_once "config\database.php"; */

// Define variables and initialize with empty values
$id_jenisPembayaran = $nama_jenisPembayaran = "";

// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){

    // Assigning variables with data from input fields
        $id_jenisPembayaran = trim($_POST["id_jenisPembayaran"]);
        $nama_jenisPembayaran = trim($_POST["nama_jenisPembayaran"]);

         // Prepare an insert statement
        $sql = "INSERT INTO jenispembayaran (id_jenisPembayaran, nama_jenisPembayaran) VALUES (?,?)";
         
        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "ss", $param_id_jenisPembayaran, $param_nama_jenisPembayaran);
            
            // Set parameters
            $param_id_jenisPembayaran = $id_jenisPembayaran;
            $param_nama_jenisPembayaran = $nama_jenisPembayaran;

            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                // Records created successfully. Redirect to landing page
                header("location: testing2.php");
                exit();
            } else{
                echo "Something went wrong. Please try again later.";
            }
         
        // Close statement
        mysqli_stmt_close($stmt);
}
    // Close connection
    mysqli_close($link);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
<div class="content">
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        <article class="card">
            <br>
            <br>
            <label for="id_jenisPembayaran">Kode Jenis Pembayaran:</label>
            <input type="text" name="id_jenisPembayaran" value="<?php echo $id_jenisPembayaran; ?>">
            <br>
            <br>
            <label for="nama_jenisPembayaran">Nama Jenis Pembayaran:</label>
            <input type="text" name="nama_jenisPembayaran" value="<?php echo $nama_jenisPembayaran; ?>">
            <br>
            <br>
            <input type="submit" value="submit">
        </article>
    </form>
</div>
</body>

Как видите, код PHP и HTML находятся в одном файле, и, честно говоря, я много раз пытался понять, как прошел поток, потому что мне удалось опубликовать этот код, но с пустыми значениями и значениями NULL. Несмотря на то, что я получил этот исходный код из учебника, мне пришлось обрезать и перекодировать их, чтобы заставить его работать.

Это источник учебника: https: // www. tutorialrepublic.com/php-tutorial/php-mysql-crud-application.php, и я специально воссоздал ваши коды в соответствии с разделом create.php. Также просмотрите раздел конфигурации базы данных и то, как каждая страница PHP вызывает его для создания соединения.

0
FaNo_FN 15 Окт 2020 в 02:25