お世話になっております。
今、あるツールの登録、更新、削除等を
複数人で共有して使用したいと考えています。
以下のようなコードで、パスワード及びアドレスを入力し
ログイン登録したんですが、以下のようなエラーが出ます。
どうすれば改善できますでしょうか?
ご教示下さい。
◎要件内容
①ログイン画面からパスワード・メールアドレスを入力できる。
②DBにメールアドレスを登録する。
③パスワードは管理者のみが変更する。
④登録されたメールアドレスにパスワードを送信し、
送信したら、利用者がログインしあるツールを
使用できるようにする。
尚、MysqlにはuserDetaのDBは作成済み。
エラー内容
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'exits userDeta( id int not null auto_increment primary key, email varchar(25' at line 1 登録済みのメールアドレスです。
Sign/sign.php
<?php require_once('../config.php'); try{ $pdo = new PDO(DSN, DB_USER, DB_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("create table if not exits userDeta( id int not null auto_increment primary key, email varchar(255), password varchar(255), created timestamp not null default current_timestamp )"); }catch(Exception $e){ echo $e->getMessage().PHP_EOL; } if(!$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ echo '入力された値が不正です。'; return false; } if(preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i', $_POST['password'])){ $password = password_hash($_POST['password'], PASSWORD_DEFAULT); }else{ echo 'パスワードは半角英数字をそれぞれ1文字以上含んだ8文字以上で設定してください。'; return false; } try{ $stmt = $pdo->prepare("insert into userDeta(email, password) value(?, ?)"); $stmt->execute([$email, $password]); echo '登録完了'; }catch(\Exception $e){ echo '登録済みのメールアドレスです。'; }
login.php
<?php require_once('config.php'); session_start(); //POSTのvalidate if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { echo '入力された値が不正です。'; return false; } //DB内でPOSTされたメールアドレスを検索 try { $pdo = new PDO(DSN, DB_USER, DB_PASS); $stmt = $pdo->prepare('select * from userDeta where email = ?'); $stmt->execute([$_POST['email']]); $row = $stmt->fetch(PDO::FETCH_ASSOC); } catch (\Exception $e) { echo $e->getMessage() . PHP_EOL; } //emailがDB内に存在しているか確認 if (!isset($row['email'])) { echo 'メールアドレス又はパスワードが間違っています。'; return false; } //パスワード確認後sessionにメールアドレスを渡す if (password_verify($_POST['password'], $row['password'])) { session_regenerate_id(true); //session_idを新しく生成し、置き換える $_SESSION['EMAIL'] = $row['email']; echo 'ログインしました'; } else { echo 'メールアドレス又はパスワードが間違っています。'; return false; }
Sign.php
<?php function h($s){ return htmlspecialchars($s, ENT_QUOTES, utf-8); } //session_id発行 session_start(); if (isset($_SESSION['EMAIL'])){ echo 'ようこそ'. h($_SESSION['EMAIL'])."さん<br>"; echo "<a href='/logout.php'>ログアウトはこちら!</a>"; exit; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Login</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" media="screen"> </head> <body> <div class="container"> <h1>ようこそ、ログインしてください!!</h1> <form action="login.php" method="post"> <label for="email">email</label> <input type="email" name="email" placeholder="○○○○○○@gmail.com"> <label for="password">password</label> <input type="password" name="password" placeholder="nghwr437"><br> <br> <button type="submit">Sign In!</button> </form> <h1>初めての方はこちら</h1> <form action="Sign/signUp.php" method="post"> <label for="email">email</label> <input type="email" name="email"> <label for="password">password</label> <input type="password" name="password"><br> <br> <button type="submit">Sign Up!</button> <p style="color: #FF0000;">*パスワードは半角英数字をそれぞれ1文字以上含んだ、8文字以上で設定してください!<p> </form> </div> </body> </html>
回答3件
あなたの回答
tips
プレビュー