掲示板を作成したのでぜひアドバイスをください! - PHPプロ!Q&A掲示板
なんせ初めて作成したものですから、「これで正しいのか?」「セキュリティー上の問題はないのか?」ととても不安です。
そこで、このコードをご覧になって「ここはこうしたほうがいい」「このあたりは関数で省略できる」等のアドバイスがございましたら、ぜひ下さい。
ダメ出しでもかまいませんので、どうかよろしくお願いいたします!
function.php
- /***データベース接続関数***/
- function setuzoku() {
- //サーバー
- $sv="localhost";
- //データベース名
- $dbname="keijiban";
- //ユーザー名
- $user="root";
- //パスワード
- $pass="****";
- $conn= mysql_connect($sv,$user,$pass) or die(mysql_error());
- mysql_select_db($dbname) or die(mysql_error());
- }
- /***エラーッチェック関数***/
- function error_check($name,$title,$body) {
- //エラーフラグ(0=エラーなし、1=エラーあり)とメッセージを保存
- $err = array();
- //エラーメッセージを代入
- //名前のエラーチェック
- if($name=="") {
- $err["name"]="名前を入力してください<br>";
- }elseif(mb_strlen($name)>10) {
- $err["longname"]="名前は10文字以内で入力してください<br>";
- }
- //名前の重複チェック
- $sql = sprintf('select count(*) as cnt from keijiban where name="%s"',
- mysql_real_escape_string($name)
- );
- $record = mysql_query($sql) or die(mysql_error());
- $table = mysql_fetch_array($record,MYSQL_ASSOC);
- if($table['cnt'] > 0){
- $err["doublename"] = "既に登録されています";
- }
- //タイトルのエラーチェック
- if($title == "") {
- $err["title"]="タイトルを入力してください。<br>";
- }
- //本文のエラーチェック
- if($body == "") {
- $err["body"]="本文を入力してください。<br>";
- }
- //上記の処理でエラーがなかったら
- if(empty($err)){
- $_SESSION=$_POST;
- header("Location:check.php");
- //エラーがあれば
- } else {
- //エラー配列を返す
- return $err;
- }
- }
- //文字列をエスケープする関数
- function check($string) {
- if (get_magic_quotes_gpc()) {
- $string = stripslashes($string);
- }
- $string = htmlspecialchars($string,ENT_QUOTES,'UTF-8');
- return $string;
- }
- //年齢のセレクトボックスを作成する関数
- function nenreilist($inputName,$sentaku,$i = "") {
- $temphtml='<select name="'. check($inputName). '">'. "\n";
- for ($i=18;$i<=100;$i++) {
- if ($i == $sentaku) {
- $selectedText = ' selected="selected"';
- } else {
- $selectedText = '';
- }
- $temphtml .= '<option value="'. check($i). '歳"'. $selectedText. '>'. check($i). '歳</option>' . $i . '</option>'. "\n";
- }
- $temphtml .= '</select>'. "\n";
- return $temphtml;
- }
- //データベースへ登録する関数
- function kakikomu($name,$nenrei,$title,$body) {
- $sql = sprintf('select count(*) as cnt from keijiban where name="%s"',
- mysql_real_escape_string($name)
- );
- $record = mysql_query($sql) or die(mysql_error());
- $table = mysql_fetch_array($record,MYSQL_ASSOC);
- if($table['cnt'] > 0){
- $_SESSION["doublename"] = "既に登録されています";
- header("Location:form.php");
- } else {
- $sql=sprintf('insert into keijiban set name="%s", nenrei="%s",
- title="%s",body="%s",created=now()',
- mysql_real_escape_string($name),
- mysql_real_escape_string($nenrei),
- mysql_real_escape_string($title),
- mysql_real_escape_string($body)
- );
- mysql_query($sql) or die(mysql_error());
- }
- }
- //関数ファイルを読み込む
- require_once("function.php");
- setuzoku();
- session_start();
- $name="";
- $nenrei="";
- $title="";
- $body="";
- $errmsg=array();
- $error_name="";
- $error_longname="";
- $error_doublename="";
- $error_title="";
- $error_body="";
- //ボタンが押されたら
- if(isset($_POST["submit"]) && !empty ($_POST["submit"])) {
- //エラーチェック関数を呼び出す
- $errmsg=error_check($_POST["name"],$_POST["title"],$_POST["body"]);
- $name=check($_POST["name"]);
- $nenrei=check($_POST["nenrei"]);
- $title = check($_POST["title"]);
- $body = check($_POST["body"]);
- }
- //エラーがあれば表示する
- if(isset($errmsg["name"])) {
- $error_name=$errmsg["name"];
- }
- //エラーがあれば表示する
- if(isset($errmsg["longname"])) {
- $error_longname=$errmsg["longname"];
- }
- //エラーがあれば表示する
- if(isset($errmsg["doublename"])) {
- $error_doublename=$errmsg["doublename"];
- }
- //エラーがあれば表示する
- if(isset($errmsg["title"])) {
- $error_title=$errmsg["title"];
- }
- //エラーがあれば表示する
- //エラーがあれば表示する
- if(isset($errmsg["body"])) {
- $error_body=$errmsg["body"];
- }
- //確認画面からの書き直し
- if(isset($_POST["ng"])&& !empty ($_POST["ng"])) {
- $name=check($_SESSION["name"]);
- $nenrei=check($_SESSION["nenrei"]);
- $title=check($_SESSION["title"]);
- $body=check($_SESSION["body"]);
- }
- //登録ボタンを押したときに名前が重複していたら
- if(isset ($_SESSION["doublename"])) {
- $name=check($_SESSION["name"]);
- $nenrei=check($_SESSION["nenrei"]);
- $title=check($_SESSION["title"]);
- $body=check($_SESSION["body"]);
- $error_doublename=$_SESSION["doublename"];
- }
- <!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" xml:lang="ja" lang="ja">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
- <meta http-equiv="Content-Style-Type" content="text/css" />
- <meta name="description" content="" />
- <meta name="keywords" content="" />
- <title>掲示板書き込みフォーム</title>
- </head>
- <body>
- <h1>掲示板</h1>
- <!--エラーがなかったら飛ばす-->
- <form method="post" action=" echo $_SERVER['SCRIPT_NAME']; ">
- <dl>
- <!--エラーメッセージをあるだけ表示する-->
- <dd><font color="#FF0000"></font></dd>
- </dl>
- <dl>
- <dt><label for="name">名前</label></dt>
- echo $error_name
- echo $error_longname
- echo $error_doublename
- <dd><input type="text" id="name" name="name" value=" echo $name " /></dd>
- <dt><label for="name">年齢</label></dt>
- <dd> echo nenreilist("nenrei",$nenrei); </dd>
- <dt><label for="title">タイトル</label></dt>
- echo $error_title
- <dd><input type="text" id="title" name="title" value=" echo $title " /></dd>
- <dt><label for="body">本文</label></dt>
- echo $error_body
- <dd><textarea id="body" name="body" cols="40" rows="10"> echo $body </textarea></dd>
- </dl>
- <input type="submit" id="submit" name="submit" value="確認" />
- </form>
- </body>
- </html>
- //関数ファイルを読み込む
- require_once("function.php");
- setuzoku();
- session_start();
- $view_name="";
- $view_nenrei="";
- $view_title="";
- $view_body="";
- //セッションが存在すれば
- if(isset($_SESSION)){
- //セッションに値を保存する
- $view_name = check($_SESSION["name"]);
- $view_nenrei = check($_SESSION["nenrei"]);
- $view_title = check($_SESSION["title"]);
- $view_body = check($_SESSION["body"]);
- $view_body=nl2br($view_body);
- }
- <!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" xml:lang="ja" lang="ja">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
- <meta name="description" content="" />
- <meta name="keywords" content="" />
- <title>掲示板書き込み確認</title>
- </head>
- <body>
- <h1>掲示板投稿確認</h1>
- <dl class="message">
- <dt class="msg-label">名前</dt>
- <dd class="msg-name"> echo check($view_name) </dd>
- <dt class="msg-label">年齢</dt>
- <dd class="msg-name"> echo check($view_nenrei) </dd>
- <dt class="msg-label">タイトル</dt>
- <dd class="msg-title"> echo check($view_title) </dd>
- <dt class="msg-label">本文</dt>
- <dd class="msg-body"> echo check($view_body) </dd>
- </dl>
- <p>登録する内容にお間違いはございませんか?</p>
- <div class="formButtons01 editEndBd">
- <ul>
- <li><form action="form.php" method="post">
- <input type="submit" name="ng" value="書き直します" />
- </form>
- </li>
- <li>
- <form action="thanks.php" method="post">
- <input type="submit" name="ok" value="登録します" />
- </form>
- </li>
- </ul>
- </div>
- </body>
- </html>
- //関数ファイルを読み込む
- require_once("function.php");
- setuzoku();
- session_start();
- if(isset($_POST["ok"])&& !empty ($_POST["ok"])) {
- //データベースへ登録する関数を呼び出す
- kakikomu($_SESSION["name"],$_SESSION["nenrei"],$_SESSION["title"],
- $_SESSION["body"]);
- }
- <!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" xml:lang="ja" lang="ja">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
- <meta http-equiv="Content-Style-Type" content="text/css" />
- <meta name="description" content="" />
- <meta name="keywords" content="" />
- <title>掲示板書き込み完了</title>
- <style type="text/css">
- * { margin: 0px; padding: 0px; }
- body { margin-left: 10%; margin-right: 10%;
- padding-bottom: 1em; color: #333333; background-color: #E0E0E0;}
- h1 { padding: 10px; border: 1px solid #BDBDBD;
- font-size: 1.2em; color: #545454; background-color: #FFFFFF; }
- hr { display: none; }
- table { margin-bottom: 1em; }
- dt { clear: left; float: left; width: 5em;
- margin-bottom: 5px; }
- dd { margin-bottom: 5px; }
- form {margin-bottom: 1em; padding: 10px;
- border-left: 1px solid #BDBDBD; border-bottom: 1px solid #BDBDBD;
- border-right: 1px solid #BDBDBD; color: #333333;
- background-color: #EAEAEA; }
- #name, #title { width: 15em; }
- #submit { font-size: 1em; margin-left: 5em; }
- .message { padding: 10px; margin-bottom: 1em;
- border: 1px solid #CBCBCB; color: #333333;
- background-color: #F9F9F9;}
- .msg-label { color: #666666; background-color: transparent; }
- .msg-body {margin-left: 5em; }
- #navigation { text-align: right; }
- </style>
- </head>
- <body>
- <h1>掲示板書き込み完了</h1>
- <dl class="message">
- <dt class="msg-label"></dt>
- <dd class="msg-name">書き込みが完了しました。</dd>
- </dl>
- <br />
- <a href="form.php">書き込みフォームへ戻る</a>
- </body>
- </html>
この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。




ページのトップへ


外部から取得してきた値を解析などしたいときには、取得してきた値をそのまま利用するのがポイントですね。値をvar_dumpしてみるのも、解決につながるかもしれません。