プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
日頃デザインを担当していてPHPは不慣れなのですが、下記PHPの2か所でエラーが出ていまして
その記述について正しい書き方をご指導くださいませ。

<?php
require('define.php');
//$midxx = $HTTP_COOKIE_VARS["bluenote"];
$midxx = $_COOKIE["bluenote"];

$msg = "";
// DB接続
if (!($cn = mysqli_connect(DBHOST,DBUSER,DBPASSWORD,DBNAME)
)) {
$msg = "DB接続不可"; exit; // DB接続不可
}

//認証処理
$gl_tblname = CTRL_TBL;
$sql = "select * from $gl_tblname where nmstr = '$midxx' ";
$rs = mysqli_query($cn,$sql) or die("Could not select log_io, admin =[" . $sql . "]\n");
if (mysqli_num_rows($rs) < 1) {
mysqli_close($cn); //DB切断
header("Location: err.php"); /* Redirect browser */
exit;
}

// ▼ここの記述が不明?
$log = $rs['log'];
if ($log != 1) {
mysqli_close($cn); //DB切断
header("Location: err2.php"); /* Redirect browser */
exit;
}
$gl_tblname = TENPO_TBL;
$sql = "select * from $gl_tblname ORDER BY temp_flg ASC, s_cd ASC, r_no DESC ";

// ▼ここの記述が不明?
$rs = mysqli_query($cn,$sql);
$num_rows = mysqli_num_rows($rs);

?>

お忙しいところ恐縮ですがご教示の程、
よろしくお願いいたします。<(_ _)>

A 回答 (2件)

err2.php が表示されて先に進めないとのことですが、CTRL_TBLに定義されたテーブルの中で、「nmstrの値が、$midxxの内容に一致する行」の「log」の値が1ではない場合にerr2.phpが表示される仕組みになっています。


CTRL_TBLの中身をチェックしてみるといいかなと思います。

もう1点、一覧が取れない件ですが、
$num_rows = mysqli_num_rows($rs);
は「該当した行数」を取得する書き方です。
プログラムの最後に、
echo $num_rows;
を追記すると、行数が数字で表示されます。

もし一覧が欲しいのであれば、最後に、
while ($row = $rs->fetch_array(MYSQLI_ASSOC))
{
foreach($row as $key => $val){
echo $key . ':' . $val;
}
echo "\n";
}
と記述するといいかなと思います。
    • good
    • 0
この回答へのお礼

ご教示ありがとうございました。
ご指摘通り、認証に関するlog の値にミスがありました。
また、値一覧もうまく取得できました!!

皆様のご指導に感謝申し上げます。

お礼日時:2018/03/26 10:17

$log = $rs['log'];


のところを
$tmp = array();
while ($row = $rs->fetch_array(MYSQLI_ASSOC))
{
$tmp[] = $row['log'];
}
$log = isset($tmp[0]) ? $tmp[0] : '';
とかにすれば、おそらく希望したことができて、エラーにもならないです。
    • good
    • 0
この回答へのお礼

ご教示ありがとうございます。
エラーは出なかったのですが、err2.php が表示されて先に進めませんでした。

もともとこの個所は以下のようなPostgresSQLの記述だったようです。

$log = pg_fetch_result ($rs, 0, 'log');
if ($log != 1) {
pg_close($cn); //DB切断
header("Location: err2.php"); /* Redirect browser */
exit;
}

-------
<ご教により示差し替えさせていただいた内容>
$tmp = array();
while ($row = $rs->fetch_array(MYSQLI_ASSOC))
{
$tmp[] = $row['log'];
}
$log = isset($tmp[0]) ? $tmp[0] : '';
if ($log != 1) {
mysqli_close($cn); //DB切断
header("Location: err2.php"); /* Redirect browser */
exit;
}

また、 上記 if のところをコメントアウトして その下の以下を走らせてみたのですが値が取れませんでした。
$gl_tblname = TENPO_TBL;
$sql = "select * from $gl_tblname ORDER BY temp_flg ASC, s_cd ASC, r_no DESC ";
$rs = mysqli_query($cn,$sql);
$num_rows = mysqli_num_rows($rs);

DBから一覧が取れていないということなのでしょうか?

桜咲く春の良き季節に、ご多忙のところ大変恐縮でございますが
引き続きご指導いただければ幸いに存じます。。。 <(_ _)>

お礼日時:2018/03/25 13:40

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