最近、すべてのmySQLクエリでmySQLiからPDOを使用するように切り替えました。私は最近、Webアプリケーションを完成し、初めてPDOベースのサインアップ/サインインのワークフローを実装しています。PDOサインアップ機能が動作していないか、エラーがスローされています
大規模な調査の結果、私はPHPとPDOを登録してログインしました。申し込みの送信時に、ページがリフレッシュされ、DBに何も表示されず、ページがリダイレクトされません。
以下は、DBに接続し、ユーザーを登録し、プロファイルページにリダイレクトするためのコードです。
registerUser.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require 'dbconfig.php';
$url = "http://mattmcclintock.com";
$uname = null;
$umail = null;
$upass = null;
$unem = array($uname, $umail);
$umore = array($uname, $umail, $upass);
$errors = array();
$message = null;
if (isset($_POST['btn-signup'])) {
// good idea to trim non-password fields
$uname = trim($_POST['txt_uname']);
$umail = trim($_POST['txt_umail']);
$upass = $_POST['txt_upass'];
// I am assuming you want to check every field independently, so you need to
// group your IF conditions for each field
// empty string is a falsey (i.e. '' == false => true; though '' === false => false),
// so we'll shorten your IF conditions from $var == '' to !$var
if (!$uname) {
$errors['txt_uname'] = "provide username !";
}
if (!$umail) {
$errors['txt_umail'] = "provide email id !";
} elseif (!filter_var($umail, FILTER_VALIDATE_EMAIL)) {
$errors['txt_umail'] = 'Please enter a valid email address !';
}
if (!$upass) {
$errors['txt_upass'] = "provide password !";
} elseif (strlen($upass) < 6) {
$errors['txt_upass'] = "Password must be atleast 6 characters";
}
// Assuming you only want to check for duplications when there are no errors with the username or email
if (empty($errors['txt_umail']) && empty($errors['txt_umail'])) {
if ($row = $user->getUserByUsernameOrEmail($uname, $umail)) {
if ($row['user_name'] == $uname) {
$errors['txt_uname'] = "sorry username already taken !";
} else {
$errors['txt_umail'] = "sorry email id already taken !";
}
}
}
// empty array is also a falsey
if ($errors) {
$message = "There are errors";
// WHOA! where did $fname and $lname come from?!
// original: if($user->register($fname,$lname,$uname,$umail,$upass)) {
} elseif ($user->register($uname, $umail, $upass)) {
$user->redirect($url);
} else {
$message = "An unexpected error has occurred";
}
}
?>
としてサインアップするための対応するHTML。
<form id="signupform" method="POST" action="registerUser.php" class="form-horizontal" role="form">
<div id="signupalert" style="display:none" class="alert alert-danger">
<p>Error:</p>
<span></span>
</div>
<div class="form-group">
<label for="email" class="col-md-3 control-label">Username</label>
<div class="col-md-9">
<input type="text" class="form-control" name="txt_uname" placeholder="Enter Username" value="<?php if(isset($error)){echo $uname;}?>" />
</div>
</div>
<div class="form-group">
<label for="firstname" class="col-md-3 control-label">Email</label>
<div class="col-md-9">
<input type="text" class="form-control" name="txt_umail" placeholder="Enter E-Mail ID" value="<?php if(isset($error)){echo $umail;}?>" />
</div>
</div>
<div class="form-group">
<label for="password" class="col-md-3 control-label">Password</label>
<div class="col-md-9">
<input type="password" class="form-control" name="txt_upass" placeholder="Enter Password" />
</div>
</div>
<div class="form-group">
<!-- Button -->
<div class="col-md-offset-3 col-md-9">
<button type="submit" class="btn btn-block btn-primary" name="btn-signup">
<i class="glyphicon glyphicon-open-file"></i> SIGN UP
</button>
</div>
</form>
ご協力いただければ幸いです。 PDOへのSQLの切り替えだけで書かれていることは比較的困難であり、私はすべての一般的なDBのやりとりやPDOを使ってそれらを処理する方法を感じています。
Iはclass.user.php
class.User.php
dbconfig.php
<?php
session_start();
$DB_host = "bbb";
$DB_user = "bbb";
$DB_pass = "bbb";
$DB_name = "bbb";
try
{
$DB_con = new PDO("mysql:host={$DB_host};dbname= {$DB_name}",$DB_user,$DB_pass);
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
include_once 'class.User.php';
$user = new USER($DB_con);
Userクラスを提供できますか? –
ユーザークラスを含む投稿を編集しています。ありがとうございました。 – Emily
エラーをオンにします。$ DB_con-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION); – WhoIsRich