회사명 등록 양식
P粉904191507
2023-09-05 19:05:36
<p>참고용으로 초보 코딩, 자습, 휴식...</p>
<p>새 SQL 테이블을 생성하는 등록 양식이 있습니다. 입력한 회사 이름은 로그인할 때마다 생성되는 새 테이블의 이름이 됩니다. </p>
<p>테이블 이름 변수의 취약점을 제외하고는 모든 것이 잘 작동합니다. </p>
<p>저는 PHP와 MySQL을 사용하고 있습니다. </p>
<p>처음에는 회사 이름 두 단어 사이에 공백이 있으면 문제가 발생했지만 str_replace</p>를 사용하여 문제를 해결했습니다.
<p>많은 테스트를 해본 결과 "out"에 회사 이름을 넣으면 코드가 손상된다는 사실을 발견했습니다. </p>
<p>다음 오류 메시지를 받았습니다: </p>
<p>"치명적 오류: 잡히지 않은 mysqli_sql_Exception: SQL 구문에 오류가 있습니다. 'out(id INT UNSIGNED AUTO_INCRMENT PRIMARY KEY, first_name VARCHAR(128)' 근처에서 사용할 올바른 구문은 MySQL 서버 버전 설명서를 확인하세요. NOT ' C:Usersreece.groverOneDriveXML Websiteopregister.php:73: #0 C:Usersreece.groverOneDriveXML Websiteopregister.php(73): mysqli->query('CREATE TABLE ou ...') #1의 라인 1에서 스택 추적 {main}은 73행의 C:Usersreece.groverOneDriveXML Websiteopregister.php에서 "</p>를 발생시킵니다.
<p>이는 오류뿐만 아니라 SQL 삽입으로도 이어지는 것으로 보입니다. </p>
<p>bind_param 방법을 배웠지만 이 방법으로도 CREATE TABLE 함수에서 발생할 수 있는 코드 중단을 방지할 수 있습니다. </p>
<p>이것은 내 서버 측 PHP 코드이며, 양식은 부트스트랩을 사용한 간단한 HTML 양식입니다.</p>
<pre class="brush:php;toolbar:false;">//공백 제거
$company = str_replace(' ', '', $_POST["회사"]);
//해시 비밀번호
$password_hash = 비밀번호_해시($_POST["비밀번호"], PASSWORD_DEFAULT);
// 새 연산자 생성
$mysql = __DIR__이 필요합니다. "/database.php";;
$sql = "INSERT INTO 연산자(이름, 성, 이메일, 비밀번호_해시, 회사)
값(?, ?, ?, ?, ?)"
$stmt = $mysql->stmt_init();
if ( ! $stmt ->prepare($sql)){
die("SQL 오류: " . $mysql->error);
}
$stmt->bind_param("sssss",
$_POST["이름"],
$_POST["성"],
$_POST["이메일"],
$password_hash,
$회사);
if ( ! $stmt->execute()) {
die($mysqli->error . " " . $mysqli->errno);
}
//새 회사 테이블 생성
$sql = "CREATE TABLE $회사(
ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
이름 VARCHAR(128) NOT NULL,
성 이름 VARCHAR(128) NOT NULL,
이메일 VARCHAR(255) NOT NULL UNIQUE,
회사 VARCHAR(128),
크레딧 VARCHAR(60),
전화 VARCHAR(60))";
if ( ! $mysql->query($sql)) {
die("테이블 생성 실패: " . $mysql->error);
}
$sql = "INSERT INTO $company(이름, 성, 이메일, 회사, 신용, 전화번호)
값(?, ?, ?, ?, ?, ?)"
$stmt = $mysql->stmt_init();
if ( ! $stmt ->prepare($sql)){
die("SQL 오류: " . $mysql->error);
}
$stmt->bind_param("ssssss",
$_POST["이름"],
$_POST["성"],
$_POST["이메일"],
$회사,
$_POST["크레딧"],
$_POST["전화"]);
if ($stmt->execute()) {
header("위치: signup_success.php");
종료;</pre></p>
별도의 company_name 테이블이 아닌 사전 정의된 회사 테이블이 있어야 합니다. 또한 사용자 입력을 기반으로 테이블을 생성해서는 안 됩니다.
사전 테이블 생성:
으아악그런 다음 다음 테이블에 데이터를
으아악INSERT
할 수 있습니다.모든 회사가 이 테이블에 삽입됩니다.
id
열로 구분됩니다.테이블에 외래 키 제약 조건을 추가할 수도 있습니다.
운영자를 삭제할 때 회사 데이터를 삭제하려면 다음을 수행하세요.operators
으아악:
DELETE CASCADE
으아악