>紐付いたレコード
>フィールドの情報を表示させることは分かる
データベースを使っているみたいなので、
SQL文 を作成する部分で絞込みを加えればいいでしょう。
php+MySQLという組み合わせが多いのでMySQL用で回答しますが、
他のデータベースの場合もSQLにあまり違いはないです。
LIMITはあってもなくてもほぼ変わらないと思いますが、いちおう入れておきました。
引数チェックは基礎的なものだけです。
(a)id フィールドが文字列型の場合
引数チェックにはmysql_real_escape_stringを使いましたが接続方法によってはmysqli_real_escape_string()やPDO::quote()などといった具合に違うものになります。
http://www.php.net/manual/ja/function.mysql-real-escape-string.php
if ( isset( $_GET['id'] ) ) {
// hogehoge/works/id=xxx の場合はid = xxx のレコード
$sql = "SELECT * FROM テーブル WHERE id = '" . mysql_real_escape_string( $_GET['id'] ) . "' LIMIT 0, 1";
} else {
// hogehoge/works/ の場合は最初のレコード
$sql = 'SELECT * FROM テーブル LIMIT 0, 1';
}
(b)id フィールドが数値型の場合
引数チェックは数値型かどうかだけで判断しています。
$id = isset( $_GET['id'] ) ? ( gettype( $_GET['id'] ) == integer ? $_GET['id'] : 0 ) : 0 ; if ( $id > 0 ) { // hogehoge/works/id=xxx の場合はid = xxx のレコード $sql = 'SELECT * FROM テーブル WHERE id = ' . $_GET['id'] . ' LIMIT 0, 1'; } else { // 引数が無い、または引数が数値型ではない場合は最初のレコード $sql = 'SELECT * FROM テーブル LIMIT 0, 1'; }
さっそくごの御回答有り難うございます。
MAMPで以下のように試してみたのですが、接続だけはうまくいくのですが、
肝心のテキストをデータベースから引っ張ってこれません。。。
< ?php
mysql_connect('localhost','root','root')or die(mysql_error());
mysql_select_db('test');
echo 'OK';
if ( isset( $_GET['id'] ) ) {
// hogehoge/works/id=xxx の場合はid = xxx のレコード
$sql = "SELECT * FROM works WHERE id = '" . mysql_real_escape_string( $_GET['id'] ) . "' LIMIT 0, 1";
} else {
// hogehoge/works/ の場合は最初のレコード
$sql = 'SELECT * FROM works LIMIT 0, 1';
}
? >
< !doctype html>
< html lang="">
< head>
< meta charset="UTF-8">
< title>Document</title>
< /head>
< body>
< p>< ?php echo ($_POST['name']);? >< /p >
< p>< img src="../< ?php echo $_POST['$id'] ?>/1.jpeg >< /p >
< /body>
< /html>
「フィールドの情報を表示させることは分かる」ってのは、
「MySQLのテーブルのフィールドから情報を得て表示させること」ではなくて、
まったく関係の無いHTMLフォームの話だったのね。がっくしorz
えっとね。MySQLに送る命令(=SQL)を作っただけじゃだめなのよ。
知ってると思ったから回答1では省いたのだけど、
mysql_queryでMySQLにSQLを送って、
mysql_fetch_assocで結果を受け取るみたいなことをしないとダメなの。
こっちはWindowsでMAMPじゃないから動作確認無しで書くけど、こんな感じね。
<?php mysql_connect('localhost','root','root') or die(mysql_error()); mysql_select_db('test') or die(mysql_error()); if ( isset( $_GET['id'] ) ) { $sql = "SELECT * FROM works WHERE id = '" . mysql_real_escape_string( $_GET['id'] ) . "' LIMIT 0, 1"; } else { $sql = 'SELECT * FROM works LIMIT 0, 1'; } $result = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($result) or die(mysql_error()); ? > <!doctype html> <html lang=""> <head> <meta charset="UTF-8"> <title>Document</title> </head> < body> <p><?php echo ($row['name']); ?></p> <p><img src="../<?php echo $row['id'] ?>/1.jpeg ></p> </body> </html>
phpマニュアルのMySQL関連も熟読すること!
http://www.php.net/manual/ja/function.mysql-query.php
http://www.php.net/manual/ja/function.mysql-fetch-assoc.php
ありがとうございます。
まだ始めたばかりで、色々勉強不足でした。
勉強させて頂きます。
▽3
●
匿名回答1号 ベストアンサー |
「2行目のレコードが出ない」ってコメントを書いて消したみたいだけど、
「idが?=id1の時に1行目のレコードのデータを表示する」にあわせて回答したので、
必ず最初の一レコードしか出力しないようになっています。
SQLでLIMITを使っていたり、
mysql_fetch_assoc を一回だけしか使っていないのはそのためです。
id = 'hoge' のレコードが複数になる場合もあるならば、LIMITは無くして、
mysql_fetch_assocを必要回数分だけループするような形になおします。
<!doctype html> <html lang=""> <head> <meta charset="UTF-8"> <title>Document</title> </head> < body> <?php mysql_connect('localhost','root','root') or die(mysql_error()); mysql_select_db('test') or die(mysql_error()); if ( isset( $_GET['id'] ) ) { $sql = "SELECT * FROM works WHERE id = '" . mysql_real_escape_string( $_GET['id'] ) . "'"; } else { $sql = 'SELECT * FROM works'; } $result = mysql_query($sql) or die(mysql_error()); echo '<p>' . $sql . '<br>結果は' . mysql_num_rows($result) . 'レコードです</p>' ; while ($row = mysql_fetch_assoc($result)) { echo '<p>' . $row['name'] . '</p>'; echo '<p><img src="../' . $row['id'] . '/1.jpeg ></p>'; } ?> </body> </html>
離れた場所に書くのはわかりにくくなるので、
mysql_connectなどもbodyタグの中に移動しました。