mysqliからPDOに書きかえたい
受付中
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,453
たにぐちまことのよくわかるPHPの教科書をもとに掲示板の作成をしているものです。
とりあえず、新規登録、確認、登録完了、ログイン、投稿、ログアウト、まで出来上がりました。ですが、この教科書はmysqliのみの説明になっています。mysqliよりPDOの方が何かと便利だと聞いたので、これをPDOに書き換えたいのですがどこをどう変えればいいのでしょう?
PDOについて調べながら試してみるも、エラーが増える一方で、困っています。
どなたかご教授願います。
-- index.php --
<?php
//error_reporting(E_ALL & ~E_NOTICE);
require('../dbconnect.php');
session_start();
$error = array();
if (!empty($_POST)) {
// エラー項目の確認
if ($_POST['name'] == '') {
$error['name'] = 'blank';
}
if ($_POST['email'] == '') {
$error['email'] = 'blank';
}
if (strlen($_POST['password']) < 4) {
$error['password'] = 'length';
}
if ($_POST['password'] == '') {
$error['password'] = 'blank';
}
$fileName = $_FILES['image']['name'];
if (!empty($fileName)) {
$ext = substr($fileName, -3);
if ($ext != 'jpg' && $ext != 'gif') {
$error['image'] = 'type';
}
}
// 重複アカウントのチェック
if (empty($error)) {
$sql = sprintf('SELECT COUNT(*) AS cnt FROM members WHERE email="%s"',
mysqli_real_escape_string($db, $_POST['email'])
);
$record = mysqli_query($db, $sql) or die(mysqli_error($db));
$table = mysqli_fetch_assoc($record);
if ($table['cnt'] > 0) {
$error['email'] = 'duplicate';
}
}
if (empty($error)) {
// 画像をアップロードする
$image = date('YmdHis') . $_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], '../member_picture/' . $image);
$_SESSION['join'] = $_POST;
$_SESSION['join']['image'] = $image;
header('Location: check.php');
exit();
}
}
// 書き直し
if ($_REQUEST['action'] == 'rewrite') {
$_POST = $_SESSION['join'];
$error['rewrite'] = true;
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<!-- <link rel="stylesheet" type="text/css" href="../style.css" /> -->
<title>会員登録</title>
</head>
<body>
<div id="wrap">
<div id="head">
<h1>会員登録</h1>
</div>
<div id="content">
<p>次のフォームに必要事項をご記入ください。</p>
<form action="" method="post" enctype="multipart/form-data">
<dl>
<dt>ニックネーム<span class="required">必須</span></dt>
<dd>
<?php if (isset($error['name']) && $error['name'] == 'blank'): ?>
<input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>" />
<p class="error">* ニックネームを入力してください</p>
<?php else: ?>
<input type="text" name="name" size="35" maxlength="255" value="">
<?php endif; ?>
</dd>
<dt>メールアドレス<span class="required">必須</span></dt>
<dd>
<?php if (isset($error['email']) && $error['email'] == 'blank'): ?>
<input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); ?>" />
<p class="error">* メールアドレスを入力してください</p>
<?php else: ?>
<input type="text" name="email" size="35" maxlength="255" value="">
<?php endif; ?>
<?php if (isset($error['diplicate']) && $error['diplicate'] == 'blank'): ?>
<p class="error">* 指定されたメールアドレスはすでに登録されています</p>
<?php else: ?>
<?php endif; ?>
</dd>
<dt>パスワード<span class="required">必須</span></dt>
<dd>
<?php if (isset($error['password']) && $error['password'] == 'blank'): ?>
<input type="password" name="password" size="10" maxlength="20" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); ?>" />
<p class="error">* パスワードを入力してください</p>
<?php else: ?>
<input type="password" name="password" size="10" maxlength="20" value="" />
<?php endif; ?>
<?php if (isset($error['length']) && $error['length'] == 'blank'): ?>
<p class="error">* パスワードは4文字以上で入力してください</p>
<?php endif; ?>
</dd>
<dt>写真など</dt>
<dd>
<?php if (isset($error['image']) && $error['image'] == 'blank'): ?>
<input type="file" name="image" size="35" value="test" />
<p class="error">* 写真などは「.gif」または「.jpg」の画像を指定してください</p>
<?php else: ?>
<input type="file" name="image" size="35" value="test" />
<?php endif; ?>
<?php if (!empty($error)): ?>
<p class="error">* 恐れ入りますが、画像を改めて指定してください</p>
<?php endif; ?>
</dd>
</dl>
<div><input type="submit" value="入力内容を確認する" /></div>
</form>
</div>
<div id="foot">
<p><img src="../images/txt_copyright.png" width="136" height="15" alt="(C) H2O SPACE, Mynavi" /></p>
</div>
</div>
</body>
</html>
-- dbconnect.php --
<?php
$db = mysqli_connect('localhost', 'root', 'root', 'mini_bbs') or die(mysqli_connect_error());
mysqli_set_charset($db, 'utf8');
?>
マシンはmac book airを使っています。
環境はATOMでブラウザはgoogle chromeです。
PHP環境はMAMPを使っています。
PHPのスキルは簡単な電卓を作った程度でほぼ初心者です。
どうぞよろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
PDO / Mysqliの定義のやり方はどうですか?
実行しているSQLはなんですか?
エラー処理はどうですか?
http://php.net/manual/ja/book.mysqli.php
http://php.net/manual/ja/pdo.connections.php
いきなり大きなソースをいぢるのではなく、小さな部分から確実に押さえてみてはいかがですか?
print ($table['cnt'] );
select count(*) cnt from (..テーブル..)
がちゃんと出るかなど。
STEP By Step が大切です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
2017/01/16 23:07
こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
kei344
2017/01/16 23:11
ご自身で書かれたコードを質問文に追記いただいたほうが回答を得られやすいと思います。