質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

484閲覧

PHPの入力につきまして

kenj

総合スコア29

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/09/18 14:37

初めまして。かなり初心者ですが宜しくお願い致します。

現在PHPの入門書を手に取って勉強しております。
その中でtwitter風ひとこと掲示板を作っているのですが
下記のコードで分からない事があります。
その中で会員登録画面(index.php)と入力内容確認画面(check.php)を
作成しているのですが、

①index.phpの方はきちんと各項目を入力して確認ボタンを押しても次画面(check.php)へ
進まずindex.phpのページが再度表示されてしまいます。

②check.phpはデータベースへ繋ぐコード?(require('../dbconnect.php');)を
入力するとエラーコードが出て画面が表示されなくなります。

dbconnect.phpは本に出ていた通りルートディレクトリ?(ドライブ直下)に作ったのですが。。
基本的な事ですみませんが上記2つについて教えて頂けましたら幸いです。
宜しくお願い致します。

【index.php】 </php require('../dbconnect.php'); session_start(); 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)){ //画像をアップロードする $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(); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="../style.css" /> <title>会員登録</title> </head> <body> <p>次のフォームに必要事項をご記入ください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd><input type="text" name="name" size="35" maxlength="255" /></dd> <dt>メールアドレス<span class="required">必須</span></dt> <dd><input type="text" name="email" size="35" maxlength="255" /></dd> <dt>パスワード<span class="required">必須</span></dt> <dd><input type="password" name="password" size="10" maxlength="20" /></dd> <dt>写真など</dt> <dd><input type="file" name="image" size="35" /></dd> </dl> <div><input type="submit" value="入力内容を確認する" /></div> </form> </body> </html>
【check.php】 <?php session_start(); require('../dbconnect.php'); if (!isset($_SESSION['join'])) { header('Location: index.php'); exit(); } if (!empty($_POST)) { // 登録処理をする $sql = sprintf('INSERT INTO members SET name="%s", email="%s",password="%s", picture="%s", created="%s"', mysqli_real_escape_string($db, $_SESSION['join']['name']), mysqli_real_escape_string($db, $_SESSION['join']['email']), mysqli_real_escape_string($db, sha1($_SESSION['join']['password'])), mysqli_real_escape_string($db, $_SESSION['join']['image']), date('Y-m-d H:i:s') ); mysqli_query($db, $sql) or die(mysqli_error($db)); unset($_SESSION['join']); header('Location: thanks.php'); exit(); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; 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"> <input type="hidden" name="action" value="submit" /> <dl> <dt>ニックネーム</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['name'], ENT_QUOTES, 'UTF-8'); ?> </dd> <dt>メールアドレス</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES, 'UTF-8'); ?> </dd> <dt>パスワード</dt> <dd> 【表示されません】 </dd> <dt>写真など</dt> <dd> <img src="../member_picture/<?php echo htmlspecialchars($_SESSION['join']['image'], ENT_QUOTES, 'UTF-8'); ?>" width="100" height="100" alt="" /> </dd> </dl> <div><a href="index.php?action=rewrite">&laquo;&nbsp;書き直す</a> | <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. MYCOM" /></p> </div> </div> </body> </html>
check.phpのエラー Warning: require(../dbconnect.php) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\shop\check.php on line 3 Fatal error: require() [function.require]: Failed opening required '../dbconnect.php' (include_path='.;\xampp\php\PEAR') in C:\xampp\htdocs\shop\check.php on line 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/09/18 14:50

「dbconnect.php」は「C:\xampp\htdocs\」にありますか?
kenj

2017/09/18 15:08

返信ありがとうございます。はい、C:\xampp\htdocs\にフォルダはあるのですが。。
guest

回答3

0

ベストアンサー

そもそもこのコード、PHPの開始タグが </php になっていたり、随所で if(){...} 文が閉じられていなかったりと、アプリケーション以前にPHPスクリプトとして動かないように見えますが大丈夫でしょうか・・・?

確認ボタンを押しても次画面(check.php)へ進まず

単純にフォームで action="" と指定しているためです。空文字の場合は自分のURLを意味するので、index.php から index.php にフォームを送信するよう指示しています。check.php にフォームを送信したいのなら action="check.php" とします。

(require('../dbconnect.php');)を入力するとエラー

これも単純にファイルが無いのだと思います。現在 index.php, check.php が置かれているのは C:\xampp\htdocs\shop\ なようですから、その require文は C:\xampp\htdocs\dbconnect.php を読み込もうとします。ドライブ直下ではありません。

というわけでファイルの置き場所か、require() で指定するパスのどちらかを修正してください。なおDB接続処理などの内部処理は第三者から実行できる状態だとセキュリティ上まずいので、できれば C:\xampp\htdocs 配下には設置しないでください。

投稿2017/09/18 15:03

miyahan

総合スコア3095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenj

2017/09/18 15:15

返信ありがとうございます。 単純に私の知識の無さや確認漏れから生じるエラーのようですね。。 ご教示頂きました通り、もう一度やってみます。 セキュリティのご指摘もありがとうございました。
guest

0

パスが合ってなさそうですが、以下はタイポでしょうか?

【index.php】 </php

投稿2017/09/18 14:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenj

2017/09/18 14:57

すみません、どのファイルか分かり易くしようと思って入力したものでしたが 不要だったようです。失礼致しました。
退会済みユーザー

退会済みユーザー

2017/09/18 15:03

ではなくて</phpがスラッシュで良いのかなと…
kenj

2017/09/18 15:18

失礼致しました。 そちらも私の入力ミスでした。<?phpの誤りです。。 度々ありがとうございました。
guest

0

mysqli_real_escape_stringはSQLに変数をエスケープしてくれる関数ですが、
mysqli_stmt_prepare関数、mysqli_stmt_bind_param関数、mysqli_stmt_execute関数、mysqli_stmt_close関数の4つを使えば自動的にパラメータをエスケープしてくれます。

よってこの4つを使ったものは以下のプログラムになります。

php

1$sql = "INSERT INTO members (name, email, password, picture, created) VALUES (?,?,?,?, ?)"; 2if($stmt = mysqli_prepare($db, $sql)){ 3 mysqli_stmt_bind_param($stmt, "sssss", 4 $_SESSION['join']['name'], 5 $_SESSION['join']['email'], 6 pasword_hash($_SESSION['join']['password'] ,PASSWORD_DEFAULT), 7 $_SESSION['join']['image'], 8 "NOW()"); 9 mysqli_stmt_execute($stmt); 10 mysqli_stmt_close($stmt); 11}

パスワードのハッシュ化はsha1関数やmd5関数を使うのでなく、パスワードハッシュ関数(password_hashpassword_get_infopassword_needs_rehashpassword_verify)を使うのが一般的です。パスワードハッシュ関数は強力に暗号化してくれるものなのでsha1やmd5と比べて安全性が保障されています。

投稿2017/09/24 05:43

naohiro19_

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問