Formular zur Registrierung des Firmennamens
P粉904191507
P粉904191507 2023-09-05 19:05:36
0
1
527
<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粉904191507
P粉904191507

Antworte allen(1)
P粉186897465

您应该有一个预定义的公司表,而不是单独的 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;
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!