※ ChatGPTを利用し、要約された質問です(原文:PHPで絞り込み検索をしたいのですが・・・)
PHPで絞り込み検索が上手くいかない
2013/10/26 18:31
このQ&Aのポイント
PHPで絞り込み検索を行おうとしていますが、うまくいきません。
一覧画面内にはファイルのアップロードや一覧表示の機能があります。
検索機能の実装に問題があり、keyword[1]が未定義だったり中身がなかったりします。助言が欲しいです。
PHP歴1週間の初心者です。
今、ある一覧画面でデータの絞り込み検索を行おうと思っているのですが、イマイチうまくいきません。
一覧画面内の機能は以下の通りです
・ファイルのアップロード
・アップロードしたファイルの一覧
・検索機能(トリガー:ボタン) ⇐ ここが分からない
ボタンを押したら検索を行い、該当ファイルのみを一覧表示させたいのですが・・・
変数に値が入っていなかったり、入ってると思ってたら入って無かったりでよくわからない状況にあります。
とりあえず、各機能のソースを貼り付けます。
※要所のみ貼り付けます。
<一覧画面のソース>
require('dbconnect.php');
// クエリー実行
$query = "select distinct * from main_t";
$result = mysql_query($query);
?>
<table border = "5" width = "110%">
<tr>
<th>ファイル番号</th><th>シールリーク度合</th><th>ベアリング摩耗</th><th>ファイルの種類</th><th>工場名</th><th>個体識別番号</th><th>型名</th><th>運転時間</th><th>マイク</th><th>故障診断実行日時</th><th>削除</th><th>推移観察</th>
</tr>
<?php
while($row = mysql_fetch_array($result)){
// 各列の値を変数に取り出す
$fid = $row['fid'];
$fext = $row['fext'];
$seal = $row['シールリーク度合'];
$bear = $row['ベアリング摩耗'];
$fkind = $row['ファイルの種類'];
$ffact = $row['工場名'];
$fnum = $row['個体識別番号'];
$fkind = $row['型名'];
$ftime = $row['運転時間'];
$fmc = $row['マイク'] = "";
$rdate = $row['故障診断実行日時'];
// ファイルのパス名を決定
$bname = "$fid";
$fpath = "$folder_files/$fid.$fext";
$tpath = "$folder_thumbs/$fid.$fext";
echo "<tr>";
echo "<td>$bname</td>";
echo "<td>$seal</td>";
echo "<td>$bear</td>";
echo "<td>$fkind</td>";
echo "<td>$ffact</td>";
echo "<td>$fnum</td>";
echo "<td>$fkind</td>";
echo "<td>$ftime</td>";
echo "<td>$fmc</td>";
echo "<td>$rdate</td>";
print('<td><a href = "pastdata.php?fid=' . $row['fid'] . '">このポンプの過去の推移を見る</a></td>');
echo "</tr>";
}
?>
<アップロード>
// POST以外は受け付けない
if($_SERVER['REQUEST_METHOD'] != "POST")
exit("アップロードが失敗しました");
// アップロードされたファイルを特定
$ftemp = $_FILES['yourfile']['tmp_name'];
$fname = $_FILES['yourfile']['name'];
$ftype = strtolower($_FILES['yourfile']['type']);
$fsize = $_FILES['yourfile']['size'];
$ferror = $_FILES['yourfile']['error'];
// ファイルを確認
if(!is_uploaded_file($ftemp) || $fsize > $file_maxsize || $ferror > 0)
exit("アップロードが失敗しました");
// ディレクトリ名を取得
$path = "/k/RDMS/Data/leak/leak_飯塚工場_20131021125944.txt";
$dir = dirname($path);
// ファイル名と拡張子を取得
$finfo = pathinfo($fname);
// ファイル名全体から拡張子以外の部分を取得
$fname = $finfo['basename'];
// 拡張子を取得
$fext = strtolower($finfo['extension']);
// ファイル名から拡張子を抽出
$bname = basename("$fname", ".txt");
// 中身を覗くファイルの名前を指定
$file = file_get_contents("$dir/$fname", NULL, NULL, 0, 12);
// 改行するまでの値をそれぞれ配列に格納
$ratio = preg_split("{\n}", $file);
// "_" を基準にファイル名を分割して配列に保存
$output = "";
$keyword = preg_split("{_}", $bname);
// データベースに接続
require('dbconnect.php');
// クエリー実行(命令:insert)
$query = "insert into main_t (fext, シールリーク度合, ベアリング摩耗, ファイルの種類, 工場名, 故障診断実行日時)" . " values ('$fext', '$ratio[0]', '$ratio[1]', '$keyword[0]', '$keyword[1]', '$keyword[2]')";
$result = mysql_query($query);
// INSERT文で挿入された行のfid
$fid = mysql_insert_id();
header("Location: http://{$_SERVER['SERVER_NAME']}/filelist.php");
<検索機能> ⇐ ここです。
<?php
// データベースの接続
require('dbconnect.php');
// パラメータの取得
if(isset($_GET['keyword[1]']))
$keyword[1] = $_GET['keyword[1]'];
// クエリー実行
$result = mysql_query('select * from main_t where keyword[1] ='.$keyword[1]);
?>
<tr>
<th>ファイル番号</th><th>シールリーク度合</th><th>ベアリング摩耗</th><th>ファイルの種類</th><th>工場名</th><th>個体識別番号</th><th>型名</th><th>運転時間</th><th>マイク</th><th>故障診断実行日時</th><th>削除</th>
</tr>
<?php
while($row = mysql_fetch_array($result)){
// 各列の値を変数に取り出す
$fid = $row['fid'];
$fext = $row['fext'];
$seal = $row['シールリーク度合'];
$bear = $row['ベアリング摩耗'];
$fkind = $row['ファイルの種類'];
$ffact = $row['工場名'];
$fnum = $row['個体識別番号'];
$fkind = $row['型名'];
$ftime = $row['運転時間'];
$fmc = $row['マイク'] = "";
$rdate = $row['故障診断実行日時'];
echo "<tr>";
echo "<td>$bname</td>
echo "<td>$seal</td>";
echo "<td>$bear</td>";
echo "<td>$fkind</td>";
echo "<td>$ffact</td>";
echo "<td>$fnum</td>";
echo "<td>$fkind</td>";
echo "<td>$ftime</td>";
echo "<td>$fmc</td>";
echo "<td>$rdate</td>";
echo "</tr>";
}
?>
以上が、検索機能に関わるもののソースです。
長々と申し訳ありません。
現時点では、工場名で絞り込もうとしています。
しかし、keyword[1]が未定義だったり、中身なかったりと言われます。
何卒、助言を宜しくお願い致します。
質問の原文を閉じる
質問の原文を表示する
お礼
ご返答頂き、ありがとうございます! その決まりを忘れていました^^; 早速修正修正・・・ 修正を加えると、表の枠は出力されるようになったのですが、中身は空で、プラスNoticeで定義されていない変数が使われてると注意がきました・・・ Notice: Undefined variable: keyword in 配列keyword[1]には、アップロードの際に中身が入るんで、空ではないと思っているのですが・・・ それに、検索プログラムのisset()の箇所でパラメータkeyword[1]の取得も行っているのですが、できません・・・ 私のやり方で、何かおかしいんじゃないかって思う箇所はございませんでしょうか? 厚かましく質問してしまい、申し訳ありません。 何卒、ご返答の程宜しくお願い申し上げます。
補足
Noticeが出て動かないと言っていましたが、少し修正を加えていくと動くようになりました! アドバイス頂き本当にありがとうございました!