2017-12-01 1 views
0

ユーザーがサインアップフォームを記入し、フロントエンドのサインアップボタンを押すと、次のようなことが起こります。入力フィールドからすべてのユーザー情報を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"; 

      } 

    ?> 
+0

PDOを使用している場合は、 'bindParam()'をドロップし、 'execute()'を使って変数を渡すだけで、多くの 'execute()'関数をループすることができます。 – GrumpyCrouton

+0

userRolesレコードをチェックしようとしているところでは、 '$ query2-> execute()'を呼び出しますが、実際には '$ query2-> fetch()'を呼び出してデータを取得しません。これはちょうど運が良いかもしれませんが、それは正しくありません。 –

+0

**平文のパスワードを保存しないでください**。代わりに['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)を使用することができます。 –

答えて

0

変更この:これに

if ($bResult === 0) { 
 
$sUserRole = 'admin'; 
 
} 
 
else { 
 
$sUserRole = 'user'; 
 
}

if ($bResult > 0) { 
 
$sUserRole = 'user'; 
 
} 
 
else { 
 
$sUserRole = 'admin'; 
 
}

これで解決します!

+0

このようにして、私は実行するたびに 'admin'を挿入し、' user'のみを挿入します。行のチェックが正しく機能しないようです。 – codeDragon

+0

"$ bResult-> total"をエコーし​​ようとすると、数値を取得した場合、if($ bResult> 0)からif($ bResult-> total> 0) –

関連する問題