Rumah  >  Soal Jawab  >  teks badan

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>
P粉904191507P粉904191507430 hari yang lalu571

membalas semua(1)saya akan balas

  • P粉186897465

    P粉1868974652023-09-06 15:21:05

    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;

    balas
    0
  • Batalbalas