Borang pendaftaran nama syarikat
P粉904191507
P粉904191507 2023-09-05 19:05:36
0
1
606
<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>
P粉904191507
P粉904191507

membalas semua(1)
P粉186897465

Anda harus mempunyai jadual syarikat yang dipratentukan dan bukannya jadual nama_syarikat yang berasingan. Anda juga tidak seharusnya membuat jadual berdasarkan input pengguna.

Pracipta jadual syarikat:

CREATE TABLE companies (
  id INT PRIMARY KEY AUTO_INCREMENT,
  company_name VARCHAR(255),
  email VARCHAR(255),
  phone VARCHAR(20)
);

Anda kemudian boleh INSERT data anda ke dalam jadual ini:

$stmt = $conn->prepare("INSERT INTO companies (company_name, email, phone) VALUES (?, ?, ?)");
//Example company data
$companyName = "Example Company";
$email = "info@example.com";
$phone = "123-456-7890";
$stmt->bind_param("sss", $companyName, $email, $phone);
$stmt->execute();

Setiap syarikat dimasukkan ke dalam jadual ini. Mereka dibezakan oleh lajur id.

Anda juga boleh menambah kekangan kunci asing pada operators jadual.

ALTER TABLE operators
ADD COLUMN company_id INT,
ADD CONSTRAINT key_constraint_company_id FOREIGN KEY (company_id) REFERENCES company(id);

Jika anda mahu data syarikat anda dipadamkan apabila anda memadam pengendali, anda boleh lakukan DELETE CASCADE:

ALTER TABLE operators
ADD COLUMN company_id INT,
ADD CONSTRAINT key_constraint_company_id FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan