私はクラスプロジェクトのために "ソーシャルメディアサイト"をコーディングしていますが、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コードだのです。データベースは私の強い訴訟ではありません。
多くのお手伝いをしてくれてありがとう!
あなたのパスワードに[md5 to hash](http://security.stackexchange.com/questions/19906/is-md5-considered-insecure)を使用しないでください。 [代わりにここを見てください](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords) –
ハッシュ関数を使用するだけでは不十分です。セキュリティを向上させる。代わりに、約100msの持続時間の間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存してください。 'PBKDF2'、' password_hash'、 'Bcrypt'などの関数を使用します。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。ユーザーを保護することが重要です。安全なパスワード方法を使用してください。 PHPが 'password_hash'と' password_verify'を使っているのが最善の解決策です。 – zaph
信頼できないデータを扱う場合は、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用してください。 – Mikey