Formular zur Registrierung des Firmennamens
P粉904191507
2023-09-05 19:05:36
<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>
您应该有一个预定义的公司表,而不是单独的 company_name 表。您也不应该根据用户输入创建表。
预先创建公司表:
然后您可以将数据
INSERT
到此表中:每个公司都插入到此表中。它们通过
id
列进行区分。您还可以在
operators
表上添加外键约束。如果您希望在删除操作员时删除公司数据,您可以执行
DELETE CASCADE
: