検索

ホームページ  >  に質問  >  本文

会社名登録フォーム

<p>参考のみ。コーディングの初心者、独学、リラックス...</p> <p>新しい SQL テーブルを作成する登録フォームがあります。入力した会社名は、ログインするたびに作成される新しいテーブルの名前になります。 </p> <p>テーブル名変数の脆弱性を除いて、すべてが正常に動作しています。 </p> <p>PHP と MySQL を使用しています。 </p> <p>会社名に 2 つの単語の間にスペースがあると最初は問題がありましたが、str_replace</p> を使用して修正しました。 <p>多くのテストを行ったところ、「out」に会社名を入力するとコードが壊れることがわかりました。 </p> <p>次のエラー メッセージが表示されました: </p> <p>「致命的なエラー: mysqli_sql_例外をキャッチできません: SQL 構文にエラーがあります。MySQL サーバーのバージョンのマニュアルを確認して、near 'out (id INT UNSIGNED AUTO_INCRMENT PRIMARY KEY, first_name VARCHAR(128 )) で使用する正しい構文を確認してください。 NOT ' C:\Users\reece.grover\OneDrive\XML Website\opregister.php:73 の行 1 のスタック トレース: #0 C:\Users\reece.grover\OneDrive\XML Website \opregister.php(73) : mysqli->query('CREATE TABLE ou...') C:\Users\reece.grover\OneDrive\XML Website\opregister.php の #1 {main} の 73 行目 "Thrown"</p> <p>これはエラーだけでなく SQL インジェクションにもつながるようです。 </p> <p>bind_param の方法を学びましたが、それでも CREATE TABLE 関数による潜在的なコード破壊を防ぐことができます。 </p> <p>これはサーバー側の PHP コードです。フォームはブートストラップを使用した単純な HTML フォームです。</p> <pre class="brush:php;toolbar:false;">//スペースを削除 $company = str_replace(' ', '', $_POST["company"]); //パスワードをハッシュ化する $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["メール"]、 $パスワード_ハッシュ、 $company); if ( ! $stmt->execute()) { die($mysqli->error . " " . $mysqli->errno); } // 新しい会社テーブルを作成します $sql = "CREATE TABLE $company ( id INT UNSIGNED AUTO_INCREMENT 主キー、 first_name VARCHAR(128) NOT NULL、 last_name 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粉904191507P粉904191507441日前585

全員に返信(1)返信します

  • P粉186897465

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

    個別の company_name テーブルではなく、事前定義された company テーブルが必要です。また、ユーザー入力に基づいてテーブルを作成しないでください。

    会社テーブルを事前に作成します:

    リーリー

    その後、INSERT データをこのテーブルに挿入できます:

    リーリー

    この表には各企業が挿入されます。これらは id 列によって区別されます。

    operators テーブルに外部キー制約を追加することもできます。

    リーリー

    オペレーターを削除するときに会社データを削除したい場合は、DELETE CASCADE:

    を実行できます。 リーリー

    返事
    0
  • キャンセル返事