Borang pendaftaran nama syarikat
<p>Untuk rujukan sahaja, baharu dalam pengekodan, belajar sendiri, berehat...</p>
<p>Saya mempunyai borang pendaftaran yang mencipta jadual SQL baharu. Nama syarikat yang mereka masukkan akan menjadi nama jadual baharu yang dibuat setiap kali mereka log masuk. </p>
<p>Semuanya berfungsi dengan baik kecuali untuk kelemahan dalam pembolehubah nama jadual. </p>
<p>Saya menggunakan PHP dan MySQL. </p>
<p>Saya pada mulanya menghadapi masalah jika nama syarikat mempunyai ruang antara 2 perkataan, tetapi saya membetulkannya menggunakan str_replace</p>
<p>Saya melakukan banyak ujian dan mendapati bahawa jika saya meletakkan nama syarikat dalam "keluar" ia melanggar kod. </p>
<p>Saya menerima mesej ralat ini: </p>
<p>"Ralat maut: Uncaught mysqli_sql_exception: Terdapat ralat dalam sintaks SQL anda; semak manual untuk versi pelayan MySQL anda untuk sintaks yang betul untuk digunakan berhampiran 'out (id INT UNSIGNED AUTO_INCRMENT PRIMARY KEY, first_name VARCHAR(128 ) BUKAN ' Susunan tindanan pada baris 1 dalam C:Usersreece.groverOneDriveXML Websiteopregister.php:73: #0 C:Usersreece.groverOneDriveXML Websiteopregister.php(73): mysqli->query('CREATE JADUAL ou ...') #1 {main} membuang "</p> dalam C:Usersreece.groverOneDriveXML Websiteoregister.php pada baris 73
<p>Ini nampaknya membawa bukan sahaja kepada ralat, tetapi juga kepada suntikan SQL. </p>
<p>Saya belajar bagaimana untuk mengikat_param, tetapi ini masih menghalang kemungkinan pecah kod daripada fungsi CREATE TABLE. </p>
<p>Ini ialah kod PHP sebelah pelayan saya, borang itu hanyalah bentuk HTML ringkas dengan Bootstrap.</p>
<pre class="brush:php;toolbar:false;">//alih keluar ruang
$company = str_replace(' ', '', $_POST["syarikat"]);
//hash Kata laluan
$password_hash = password_hash($_POST["password"], PASSWORD_DEFAULT);
// Cipta Operator baharu
$mysql = memerlukan __DIR__ . "/database.php";
$sql = "MASUKKAN KE DALAM operator (nama_pertama, nama_akhir, e-mel, cincangan_kata laluan, syarikat)
NILAI (?, ?, ?, ?, ?)";
$stmt = $mysql->stmt_init();
if ( ! $stmt ->prepare($sql)){
die("SQL error: " . $mysql->error);
}
$stmt->bind_param("sssss",
$_POST["nama_pertama"],
$_POST["nama_akhir"],
$_POST["e-mel"],
$password_hash,
$syarikat);
if ( ! $stmt->execute()) {
die($mysqli->error . " " . $mysqli->errno);
}
//Buat jadual syarikat baharu
$sql = "BUAT JADUAL $syarikat (
id INT UNSIGNED AUTO_INCREMENT KUNCI UTAMA,
nama_pertama VARCHAR(128) BUKAN NULL,
nama akhir VARCHAR(128) BUKAN NULL,
e-mel VARCHAR(255) BUKAN NULL UNIK,
syarikat VARCHAR(128),
kredit VARCHAR(60),
telefon VARCHAR(60))";
if ( ! $mysql->query($sql)) {
die("Buat Jadual Gagal : " . $mysql->error);
}
$sql = "MASUKKAN KE DALAM $syarikat (nama_pertama, nama_akhir, e-mel, syarikat, kredit, telefon)
NILAI (?, ?, ?, ?, ?, ?)";
$stmt = $mysql->stmt_init();
if ( ! $stmt ->prepare($sql)){
die("SQL error: " . $mysql->error);
}
$stmt->bind_param("ssssss",
$_POST["nama_pertama"],
$_POST["nama_akhir"],
$_POST["e-mel"],
$syarikat,
$_POST["kredit"],
$_POST["telefon"]);
if ($stmt->execute()) {
header("Lokasi: signup_success.php");
keluar;</pre></p>