suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Formular zur Registrierung des Firmennamens

<p>Nur als Referenz, Neuling im Programmieren, Selbststudium, Entspannung ...</p> <p>Ich habe ein Registrierungsformular, das eine neue SQL-Tabelle erstellt. Der von ihnen eingegebene Firmenname ist der Name der neuen Tabelle, die bei jeder Anmeldung erstellt wird. </p> <p>Bis auf die Sicherheitslücke in der Tabellennamenvariablen funktioniert alles einwandfrei. </p> <p>Ich verwende PHP und MySQL. </p> <p>Anfangs hatte ich Probleme, wenn der Firmenname ein Leerzeichen zwischen den beiden Wörtern hatte, aber ich habe das mit str_replace</p> behoben. <p>Ich habe viele Tests durchgeführt und festgestellt, dass der Code beschädigt wird, wenn ich den Firmennamen in „out“ eingebe. </p> <p>Ich habe diese Fehlermeldung erhalten: </p> <p>"Schwerwiegender Fehler: Nicht erfasste mysqli_sql_Exception: Es liegt ein Fehler in Ihrer SQL-Syntax vor; überprüfen Sie das Handbuch für Ihre MySQL-Serverversion auf die richtige Syntax für die Verwendung in der Nähe von 'out (id INT UNSIGNED AUTO_INCRMENT PRIMARY KEY, first_name VARCHAR(128 ) NICHT ' Stacktrace in Zeile 1 in C:Usersreece.groverOneDriveXML Websiteopregister.php:73: #0 C:Usersreece.groverOneDriveXML Websiteopregister.php(73): mysqli->query('CREATE TABLE ou ...') #1 {main} wirft „</p> in C:Usersreece.groverOneDriveXML Websiteopregister.php in Zeile 73 <p>Dies scheint nicht nur zu Fehlern, sondern auch zu SQL-Injection zu führen. </p> <p>Ich habe gelernt, wie man bind_param verwendet, aber dies verhindert immer noch mögliche Codebrüche durch die CREATE TABLE-Funktion. </p> <p>Dies ist mein serverseitiger PHP-Code, das Formular ist nur ein einfaches HTML-Formular mit Bootstrap.</p> <pre class="brush:php;toolbar:false;">//Leerzeichen entfernen $company = str_replace('', '', $_POST["company"]); //Hash-Passwort $password_hash = passwort_hash($_POST["passwort"], PASSWORD_DEFAULT); // Neuen Operator erstellen $mysql = erfordern __DIR__ . "/database.php"; $sql = "INSERT INTO-Operatoren (Vorname, Nachname, E-Mail, Passwort-Hash, Firma) WERTE (?, ?, ?, ?, ?)“; $stmt = $mysql->stmt_init(); if ( ! $stmt ->prepare($sql)){ die("SQL-Fehler: " . $mysql->error); } $stmt->bind_param("sssss", $_POST["Vorname"], $_POST["Nachname"], $_POST["email"], $password_hash, $Unternehmen); if ( ! $stmt->execute()) { die($mysqli->error . " " . $mysqli->errno); } //Erstellen Sie die neue Firmentabelle $sql = "TABELLE ERSTELLEN $company ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, Vorname VARCHAR(128) NICHT NULL, Nachname VARCHAR(128) NICHT NULL, email VARCHAR(255) NOT NULL UNIQUE, Unternehmen VARCHAR(128), Kredit VARCHAR(60), phone VARCHAR(60))"; if ( ! $mysql->query($sql)) { die("Tabelle erstellen fehlgeschlagen: " . $mysql->error); } $sql = "INSERT INTO $company (Vorname, Nachname, E-Mail, Firma, Kredit, Telefon) WERTE (?, ?, ?, ?, ?, ?)“; $stmt = $mysql->stmt_init(); if ( ! $stmt ->prepare($sql)){ die("SQL-Fehler: " . $mysql->error); } $stmt->bind_param("ssssss", $_POST["Vorname"], $_POST["Nachname"], $_POST["email"], $Unternehmen, $_POST["Credit"], $_POST["Telefon"]); if ($stmt->execute()) { header("Standort: signup_success.php"); Exit;</pre></p>
P粉904191507P粉904191507481 Tage vor611

Antworte allen(1)Ich werde antworten

  • P粉186897465

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

    您应该有一个预定义的公司表,而不是单独的 company_name 表。您也不应该根据用户输入创建表。

    预先创建公司表:

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

    然后您可以将数据INSERT到此表中:

    $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();

    每个公司都插入到此表中。它们通过 id 列进行区分。

    您还可以在operators 表上添加外键约束。

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

    如果您希望在删除操作员时删除公司数据,您可以执行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;

    Antwort
    0
  • StornierenAntwort