アプリ版:「スタンプのみでお礼する」機能のリリースについて

見よう見まねでやっている超初心者です。
恥を忍んで質問させて頂きます。
古いPHP(2003年ごろ)関連書籍に下記のような
include.phpファイルがあるのですが、DB接続失敗、クエリ発行エラー等の
エラー表示は出ないのですが(65行目位の、管理者パスワードチェック : _chkPass)でパスワードがMYSQLにINSERTできません。
PHPバージョンの違いなのでしょうか(私のはPHPV5 XAMPPです。)
色々試したりMYSQLの確認をしたのですが、どこがイケないのか、
どこをどう直したらいいのか全く分かりません。
このプログラムに不具合は無いのか?あったとしたらどう直したら動くようになるのか?
わかる方どうかご教授の程よろしくお願い致します。
具体的にご教授頂けると大変助かります。


<?php
putenv("TZ=JST-9");
define( "_DB_SERVER", "localhost");
define( "_DB_NAME", "cgiweb" );
define( "_DB_UID", "root" );
define( "_DB_PASS", "" );

//---------------------------------------------------------
// DB接続 : _dbConnect
//---------------------------------------------------------
function _dbConnect(){
//DB接続
$_conn = mysql_connect( _DB_SERVER, _DB_UID, _DB_PASS)
or die('DB接続失敗 = ' . mysql_error());
//DB選択
mysql_select_db( _DB_NAME, $_conn)
or die('DB選択失敗 = ' . mysql_error());
return( $_conn );
}
//---------------------------------------------------------
// DB切断 : _dbDisconnect
//---------------------------------------------------------
function _dbDisconnect( $_conn ){
//DB切断
mysql_close($_conn);
}
//---------------------------------------------------------
// クエリ発行 : _query
//---------------------------------------------------------
function _query( $_conn, $_query ){
$_result=mysql_query($_query,$_conn)
or die('クエリ発行エラー = ' .mysql_error());
return( $_result );
}

//---------------------------------------------------------
// FETCH実行 : _fetchArray
//---------------------------------------------------------
function _fetchArray( $_result ){
$_row = mysql_fetch_array($_result,MYSQL_ASSOC);
return( $_row );
}
//---------------------------------------------------------
// 結果セット開放 : _freeResult
//---------------------------------------------------------
function _freeResult($_result){
mysql_free_result($_result);
}
//---------------------------------------------------------
// 管理者パスワードチェック : _chkPass
// 引数:コネクション
// チェック対象パスワード
// 戻値:_OK or _NG
//---------------------------------------------------------
function _chkPass( $_conn, $_input_pass ){
$_err_str = "";
if( ! $_input_pass ){
//パスワード未設定なら入力画面を表示
$_err_str = "パスワードを入力してください";
}
else{
//パスワードがあるなら店舗マスタの内容と比較
$_result = _query( $_conn, "SELECT tenpo_pass FROM tenpo_mst" );
$_row = _fetchArray( $_result );
if( $_row ){
//レコードがあればチェック
if( $_input_pass != $_row['tenpo_pass'] ){
//認証NGなので、入力画面を再表示
$_err_str = "パスワードが誤っています";
}
}else{
//レコードがなければ入力されたパスワードでレコード作成
$_sql = "";
$_sql .= "INSERT INTO tenpo_mst (";
$_sql .= " tenpo_name,";
$_sql .= " tenpo_pass,";
$_sql .= " zei_kbn,";
$_sql .= " zeiritsu,";
$_sql .= " zei_kirisute_kbn,";
$_sql .= " order_status";
$_sql .= " ) VALUES (";
$_sql .= " '',";
$_sql .= " '" . addslashes($_input_pass) . "',";
$_sql .= " 2,";
$_sql .= " 0,";
$_sql .= " 0,";
$_sql .= " 0";
$_sql .= " )";
_query( $_conn, $_sql );
}
_freeResult( $_result );
}
//入力画面表示の場合
if( $_err_str != "" ){
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<TITLE>管理者認証</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";
echo "<CENTER>\n";
echo "<FONT COLOR=RED SIZE=5>管理者認証</FONT>\n";
echo "<HR>\n";
echo "${_err_str}<BR><BR>\n";
echo "<FORM ACTION=\"mnt_menu.php\" METHOD=\"POST\">\n";
echo "<FONT COLOR=RED SIZE=2>※記号を除く半角小文字8文字以内</FONT><BR>\n";
echo "パスワード:<INPUT TYPE=\"password\" NAME=\"post_pass\" MAXLENGTH=8>\n";
echo "<INPUT TYPE=\"submit\" VALUE=\"送信\">\n";
echo "</FORM>\n";
echo "<HR>\n";
echo "</CENTER>\n";
echo "</BODY>\n";
echo "</HTML>\n";
_dbDisconnect($_conn);
exit;
}
}
?>
以下省略しました。

A 回答 (3件)

どこをどう治す というより、このinclude.phpというファイルを見るかぎりは


単独では動くようになっておらず関数を提供しているだけのように 見えます。

この場合別途phpファイルを作りそこで、
<?php
include('include.php');
$conn = _dbConnect();
_chkPass( $conn, $_POST["post_pass"]);
?>
とし、こちらのほうを実行することで 利用可能になると思われます。
(実際に確認はしてないので、エラーがでるかもしれませんが)



もし、
「以下省略しました。 」の部分に 実際にはphpの記述で上記と同様な
記述があるようなら、話は、また変わりますが・・・
    • good
    • 0
この回答へのお礼

回答を頂きまして大変ありがとうございます。
返信が遅くなりました事をお詫び申し上げます。
朝から折を見てはやっているのですが、確かにそのような記述はあったので、$post_pass = $_POST["post_pass"];とすることで一応INSERT出来るようになりました。しかしながらプログラム自体は全く動いてくれませんでした。
私の馬鹿さ加減ですが、プログラムが動かない理由はこの他にもあるのかもしれません。これ以上時間を頂きご迷惑をおかけするわけにもいきませんので、今回はこれにて、お礼申し上げます。
この度は大変ありがとうございました。また質問させて頂くと思いますがその時はこれに凝りず、是非又よろしくお願い致します。

お礼日時:2011/11/16 15:56

FORMでのNAMEは"post_pass"ですので、$_POST["post_pass"]で受け取って


それをDBと比較するなり代入するなり する必要があります。

その前に、_chkPass を どこからもコールしていないので、ここが動かなくても
当然といえば当然です。

この回答への補足

ご回答大変ありがとうございます。
すいません超初心者なものでなんとなくは、わかる気がするのですが、
どこをどう書き変えればそれが出来るようになるのでしょうか?お手数ですが、
もう少し具体的に教えて頂ければ助かるのですが、教えては頂けないでしょうか?
どうかよろしくお願い致します。

補足日時:2011/11/15 17:20
    • good
    • 0

直接の回答ではないのですが


日進月歩のIT界において一昔前の書籍を見るメリットがわかりません
かえって変なクセに染まってしまって新しい流儀に付いていけなくなってしまう恐れがあります
基礎を身につけるにしても現代のWebを見たほうがいいのではないでしょうか
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!