2016-11-29 20 views
0

私はクラスプロジェクトのために "ソーシャルメディアサイト"をコーディングしていますが、1つのセクションに問題があります。MySQL PHPユーザーIDを一致させて "USER"を作成する

初めてアカウントを登録するときは、ユーザー名とパスワードを入力し、送信ボタンをクリックする必要があります。 PHPコードは、入力がすべて有効であることを確認し、重複がないことを確認し、すべてが合格すると、ユーザー名とパスワードを「users」というSQLテーブルに追加します。ユーザーには、ユーザー名、パスワード、およびユーザーIDの3つの列があります。 userIDは主キーです。

このプロセスが完了すると、別のページにリダイレクトされます。ここでは、姓や名、都市名、国名などの個人情報を入力できます。この表には、「userInfo」という列があります。 firstName、lastName、emailAddress、住所、都市、国、およびユーザーID。 userIDは、もう一度主キーです。

私が理解しようとしているのは、2つのユーザーIDを挿入ステートメントに一致させる方法です。私はすべての必要な情報を収集するフォームがありますが、users.userIDがuserInfo.userIDと一致するようにSQLクエリを設定する方法がわかりません。これはスーパー乱雑である場合

<?php 
session_start(); 
require_once('dbConnect.php'); 
$error = "false"; 
$errorMessage = ""; 

$username = $_SESSION['username']; 

if(isset($_POST['submit'])){ 
    // Get inputs 
    $firstName = $_POST['firstName']; 
    $lastName = $_POST['lastName']; 
    $emailAddress = "[email protected]"; 
    $address = $_POST['address']; 
    $city = $_POST['city']; 
    $country = $_POST['country']; 

    // Clean inputs 
    $firstName = mysqli_real_escape_string($conn, $firstName); 
    $lastName = mysqli_real_escape_string($conn, $lastName); 
    $address = mysqli_real_escape_string($conn, $address); 
    $city = mysqli_real_escape_string($conn, $city); 
    $country = mysqli_real_escape_string($conn, $country); 

    // Validate Inputs (Only validating first and last name, location entries are not required) 

    if(empty($firstName) || empty($lastName)) { 
     $error = "true"; 
     $errorMessage = "Please enter your first AND last name"; 
    } 

    else { 

    } 
    } 
?> 

謝罪:

は、ここにユーザーのための私のPHP(初期登録)

<?php 
session_start(); 
require_once('dbConnect.php'); 
$error = "false"; 
$errorMessage = ""; 

if(isset($_POST['submit'])){ 
    // Get inputs 
    $username = $_POST['user']; 
    $password = $_POST['password']; 

    // Clean inputs and encrypt password 
    $username = mysqli_real_escape_string($conn, $username); 
    $password = mysqli_real_escape_string($conn, $password); 
    $password = md5($password); 

    // Check username not empty 
    if (empty($username)) { 
     $error = "true"; 
     $errorMessage = "Please enter a value for your username"; 
    } 

    // Check username does not already exist 
    $checkUserQuery = "SELECT username FROM users WHERE username = '$username'"; 
    $checkResult = $conn->query($checkUserQuery); 
    if($checkResult->num_rows > 0) { 
     $error = "true"; 
     $errorMessage = "This username already exists"; 
    } 

    // Username does not exist, add to database 
    else { 
     $insertUserQuery = "INSERT INTO users (username, password) VALUES('$username', '$password')"; 
     $insertResult = $conn->query($insertUserQuery); 
     $_SESSION['username'] = $username; 
     header("Location: userInfo.php"); 
    } 
    } 
?> 

ここでは、これまでのUserInfoのための私のPHPコードだのです。データベースは私の強い訴訟ではありません。

多くのお手伝いをしてくれてありがとう!

+1

あなたのパスワードに[md5 to hash](http://security.stackexchange.com/questions/19906/is-md5-considered-insecure)を使用しないでください。 [代わりにここを見てください](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords) –

+0

ハッシュ関数を使用するだけでは不十分です。セキュリティを向上させる。代わりに、約100msの持続時間の間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存してください。 'PBKDF2'、' password_hash'、 'Bcrypt'などの関数を使用します。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。ユーザーを保護することが重要です。安全なパスワード方法を使用してください。 PHPが 'password_hash'と' password_verify'を使っているのが最善の解決策です。 – zaph

+0

信頼できないデータを扱う場合は、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用してください。 – Mikey

答えて

2

ユーザテーブルに挿入するためのmysqli_insert_idを取得し、userInfoで作成するために(おそらくあなたの$ _SESSION経由で)渡したいと思うでしょう。

+0

ケビンにお返事いただきありがとうございます。明確にするために、mysqli insert IDは "users"テーブルで作成されたuserIDを返しますか?それとも、これは別の番号ですか? –

+0

ユーザテーブルがそのユーザIDフィールドを自動増分するように設定されていると仮定すると、 'mysqli_insert_id()'コールは正常に挿入されたときにそのフィールドを返します。 –

+0

usersテーブルは自動インクリメントです!素晴らしい、私は家にいるとこれを試してみましょう!ありがとうKevin –

関連する問題