ユーザーがサインアップフォームを記入し、フロントエンドのサインアップボタンを押すと、次のようなことが起こります。入力フィールドからすべてのユーザー情報をusers
テーブルに保存してから、userRole
テーブルにレコードが存在するかどうかを確認します。挿入しない場合は、admin
を挿入します.をuserRoleカラムに挿入します。お互いの後に複数のクエリを実行する方法は?
基本的に1つの挿入、1つの選択、そして1つの挿入です。 これを設定する方法がわからないので、これが機能します。今はuserRoleテーブルに値userを挿入するだけです。
<?php
// Get the userimage and save it with a unique id
$sFileExtension = pathinfo($_FILES['fileUserImage']['name'], PATHINFO_EXTENSION);
$sFolder = 'img_webshop/';
$sFileName = 'userimage-'.uniqid().'.'.$sFileExtension;
$sSaveFileTo = $sFolder.$sFileName;
move_uploaded_file($_FILES['fileUserImage']['tmp_name'], $sSaveFileTo);
try {
// connect to the database
require 'connect.php';
// create a query
$sUserName = $_POST['txtEmailorPhoneNumber'];
$sFirstName = $_POST['txtFirstName'];
$sLastName = $_POST['txtLastName'];
$sPassword = $_POST['txtPassword'];
$sImage = $sFolder.$sFileName;
$query1 = $conn->prepare("INSERT INTO users (userName, firstName, lastName, password, image) VALUES (:userName, :firstName, :lastName, :password, :image)");
$query1->bindParam(':userName' , $sUserName);
$query1->bindParam(':firstName' , $sFirstName);
$query1->bindParam(':lastName' , $sLastName);
$query1->bindParam(':password' , $sPassword);
$query1->bindParam(':image' , $sImage);
// run the query
$aResult = $query1->execute();
$query2 = $conn->prepare("SELECT COUNT (userRole) as total FROM userRoles");
$bResult = $query2->execute();
if ($bResult === 0) {
$sUserRole = 'admin';
}
else {
$sUserRole = 'user';
}
$query3 = $conn->prepare("INSERT INTO userRoles (userRole) VALUES (:userRole)");
$query3->bindParam(':userRole' , $sUserRole);
$cResult = $query3->execute();
$sjResponse = $cResult ? '{"status":"ok"}' : '{"status":"error"}';
// $lastId = $query->lastInsertId();
// $result = json_encode($query->fetch(PDO::FETCH_ASSOC));
echo $sjResponse;
} catch (Exception $e) {
echo "ERROR";
}
?>
PDOを使用している場合は、 'bindParam()'をドロップし、 'execute()'を使って変数を渡すだけで、多くの 'execute()'関数をループすることができます。 – GrumpyCrouton
userRolesレコードをチェックしようとしているところでは、 '$ query2-> execute()'を呼び出しますが、実際には '$ query2-> fetch()'を呼び出してデータを取得しません。これはちょうど運が良いかもしれませんが、それは正しくありません。 –
**平文のパスワードを保存しないでください**。代わりに['password_hash()'](http://us3.php.net/manual/en/function.password-hash.php)と['password_verify()'](http://us3.php.net /manual/en/function.password-verify.php)。 5.5より前のバージョンのPHPを使用している場合は、MD5またはSHA1を使用せず**パスワードをハッシュします。代わりに、[この互換性パック](https://github.com/ircmaxell/password_compat)を使用することができます。 –