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

phpとMySQLを利用してエクセルのオートフィルタ機能を
実現させてWeb上で閲覧できるようにさせたいと考えています。
不躾ではありますがもう少しで完成できそうなのでどなたか
力を貸して下さい。よろしくお願いします。
以下に状況を記します。


自分でできた事
MySQLでのテーブルの作成とCSVデータのインポート
phpに記述するhtmlタグによるフォーム作成


わからない事
(おそらくphpの配列などを使うと思われる)
抽出フォームで選択した項目のphp内のSQL文への受け渡し
抽出結果のphpへの返し方


なお全文検索ではなくあくまで複数フィールドからの"抽出"にこだわっているせいで
良いサンプルがみつかりません。
参考ページなどお心当たりの方、いらっしゃいましたらURLだけでも教えて下さい。

A 回答 (2件)

>抽出フォームで選択した項目のphp内のSQ L文への受け渡し


form method="post" だとして postデータを$_POST['komokumei']で取得するところはよいのですよね
phpからmysqlへの接続もできていますか?No1の方の紹介サイトをご参考ください。

それで、どういった条件文が書きたいのでしょうか?
まずは、mysqlのドキュメントを十分読みましょう。
http://dev.mysql.com/doc/
ここで日本語ドキュメントもダウンロード出来ます。

>なお全文検索ではなくあくまで複数フィールド からの"抽出"にこだわっているせいで

全文検索の意味がつかみにくいのですが、複数フィールドに条件設定したいのでしょうか?

tableのフィールド1を $_POST['komokumei1']
フィールド1で一致させたい文字列を $_POST['komoku1']
tableのフィールド2を $_POST['komokumei2']
フィールド2で文字列を含むものを検索したい $_POST['komoku2']

$query = "select * from table where " .$_POST['komokumei1']. " = \"" .$_POST['komoku1'] . "\" AND " .$_POST['komokumei2']. " LIKE \"%" . $_POST['komoku2'] . "\"%";

検索文字列が日本語sjisの場合や検索文字列に「"'\」などを含む時の問題は、私の手にあまるので、実際に問題になるようなら、補足で質問してください

それとも、表示フィールドを制限したいのでしょうか?
$query = "select field1,field2 from table where " .$_POST['komokumei1']. " = \"" .$_POST['komoku1'] . "\"";

うまくいかなかったsql文と、抽出条件がどんなものなのかを補足すると
さらなる回答が付きやすくなるでしょう。

>抽出結果のphpへの返し方
考え方が逆のような気がします。
phpの方から結果を取りにいくと考えるとよいかと思います。

phpの mysql関数マニュアル
http://jp.php.net/manual/ja/ref.mysql.php

phpにて $queryのsql文で結果を受け取るには以下のようにするといいかと思います。
(半分は上記サイトからのコピー(^^;)

$result = mysql_query($query);

// HTMLに結果を出力する
print "<table border='1'>\n\t<tr>";

$cols = mysql_num_fields($result);
for($i=0; $i<$cols ; $i++){
print "\t\t<th>" . mysql_field_name($result, $i) . "</th>\n";
}
print "\t</tr>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
// while ($row = mysql_fetch_assoc($result)) {

print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";

参考URL:http://jp.php.net/manual/ja/ref.mysql.php http://dev.mysql.com/doc/

この回答への補足

先ずはこんな見ず知らずの私の質問に快く回答して頂き
本当にありがとうございます。

職場の人間よりも的確かつ丁寧な回答に
見た瞬間は目から鱗でした。

自分でも毎日独学で進めていたのですが質問の内容に説明が
足りなかったことにも気付きました。すみませんでした。
hrm_mmmさんの推測どおり困っているのは

>$query = "select * from table where " .$_POST['komokumei1']. " = \"" .$_POST['komoku1'] . "\" AND " .$_POST['komokumei2']. " LIKE \"%" . $_POST['komoku2'] . "\"%";

の部分です。
自己分析では配列や変数と「"」「\」からむと混乱しているように思えます。
自分で改造したソースではおかしな動きをします。
よろしければご覧頂いた上でご指摘頂けますでしょうか。
お願い致します。
----form.html----------
<HTML>
<HEAD>
<TITLE>メンバー抽出</TITLE>
</HEAD>
<BODY>
<FONT SIZE=5 COLOR=GREEN>メンバー抽出</FONT>
<HR>
<FORM ACTION="form.php" METHOD="POST">

<P>
<INPUT TYPE="checkbox" NAME="keitai" VALUE="1">携帯アドレスの場合チェックする
<P>

<B>会費負担</B>
<SELECT NAME="futan">
<OPTION VALUE="100">全額負担</OPTION>
<OPTION VALUE="50">半額負担</OPTION>
<OPTION VALUE="0">無料</OPTION>
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="抽出">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>
</BODY>
</HTML>

----form.php-----------
<?php
//フォーム送信内容を取得
$keitai = $_POST['keitai'];
$futan = $_POST['futan'];

//MySQLに接続
if( ! $conn = mysql_connect( 'localhost', 'card', 'UQbVGauchEoQ') ){
die( 'MySQL接続失敗' );
}

//データベースの選択
mysql_select_db( 'card', $conn );

//ヘッダ出力をします
header('Content-Type: text/html; charset=euc-jp');
?>
<HTML>
<HEAD>
<TITLE>mysql関数テスト1</TITLE>
</HEAD>
<BODY>

<?php
//SQL発行 ここで
$sql =
$rs = mysql_query( "select * from member where futan = ${futan} && keitai = $keitai ", $conn );

//<TABLE>ヘッダ
echo "<table border=1>";
echo "<tr><th>email</th><th>keitai</th><th>name</th><th>futan</th></tr>";

//1件ずつ取り出すループ
while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){
echo "<tr>";
echo "<td>" . $rec['email'] . "</td>";
echo "<td>" . $rec['keitai'] . "</td>";
echo "<td>" . $rec['name'] . "</td>";
echo "<td>" . $rec['futan'] . "</td>";
echo "</tr>";
}

//<TABLE>フッタ
echo "</table>";

//結果セットの解放
//mysql_free_result( $rs );

//切断
mysql_close($conn);

?>
</BODY>
</HTML>

補足日時:2005/03/26 06:51
    • good
    • 0

こんにちは。


私も初心者ですので、まだまだ人に教えられる程できませんが、ここのサイトなんかはどうでしょうか???

参考URL:http://www.stackasterisk.jp/tech/php/php03_03.jsp
    • good
    • 0
この回答へのお礼

回答していただきありがとうございます。
まだ知らないサイトだったのでまずは熟読してみたいと思います。

お礼日時:2005/03/26 06:07

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