前提・実現したいこと
PHPのログイン機能に関してですが
executeは実行され$_SESSIONに値が定義されているはずなのにeles判定になってしまうので、if判定に持っていきたいです。
どなたかお力を貸して頂けましたら幸いです。
login_output.blade.php
<?php session_start();?> <?php unset($_SESSION['customer']); $pdo=new PDO('mysql:host=localhost;dbname=myblog;charset=utf8','root',''); $sql=$pdo->prepare('select * from customer where email=? and password=?'); $sql->execute([$_REQUEST['email'], $_REQUEST['password']] ); //ここまでは実行確認済み(試したこと) foreach($sql->fetchAll() as $row){ $_SESSION['customer']=[ 'id'=>$row['id'], 'name'=>$row['name'], 'email'=>$row['email'],'password'=>$row['password'] ]; } if (isset($_SESSION['customer'])){ echo 'いらっしゃいませ',$_SESSION['customer'] ['name'],'さん'; header('Location: http://192.168.33.10:8000'); exit(); } else{ echo 'ログイン名またはパスワードが違います'; } ?>
customer table
mysql> select*from customer; +----+-----------+-------+----------+ | id | name | email | password | +----+-----------+-------+----------+ | 1 | test@test | test | test | | 2 | 2@2 | 2 | w | | 3 | 2@2 | 2 | 2 | +----+-----------+-------+----------+
###login.blade.php
~(省略)~ <form action="{{ url('/posts/login_output') }}" method="post"> {{ csrf_field() }} <div class="form-item"> <label for="email"></label> <input type="text" name="email" required="required" placeholder="メールアドレス"></input> </div> <div class="form-item"> <label for="password"></label> <input type="password" name="password" required="required" placeholder="password"></input> </div> <div class="button-panel"> <input type="submit" class="button" title="Sign In" value="ログイン"></input> </div> </form> ~(省略)~
試したこと
**$sql->execute([$_REQUEST['email'], $_REQUEST['password']] );**までは"ログイン成功しました。";と表示されていたので実行確認できています。
~(省略)~ $sql=$pdo->prepare('select * from customer where email=? and password=?'); if(!preg_match("/[0-9]+/",$_REQUEST["password"]) ){ echo "条件通り入力してください"; } else{ $sql->execute([$_REQUEST['email'], $_REQUEST['password']] ); echo "ログイン成功しました。"; } ~(省略)~
補足情報(FW/ツールのバージョンなど)
OS:win10
php:7.3
mysql:5.6
回答2件
あなたの回答
tips
プレビュー