회사명 등록 양식
P粉904191507
P粉904191507 2023-09-05 19:05:36
0
1
580
<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>
P粉904191507
P粉904191507

모든 응답(1)
P粉186897465

별도의 company_name 테이블이 아닌 사전 정의된 회사 테이블이 있어야 합니다. 또한 사용자 입력을 기반으로 테이블을 생성해서는 안 됩니다.

사전 테이블 생성:

으아악

그런 다음 다음 테이블에 데이터를 INSERT할 수 있습니다.

으아악

모든 회사가 이 테이블에 삽입됩니다. id 열로 구분됩니다.

테이블에 외래 키 제약 조건을 추가할 수도 있습니다. operators 으아악

운영자를 삭제할 때 회사 데이터를 삭제하려면 다음을 수행하세요.

: DELETE CASCADE 으아악

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿