匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

1366441359 PHP初心者です。


今、作品ギャラリーのページを作っています。
サムネイルがズラッと並んでいる感じです。

サムネイルをクリックすると詳細ページに移動させたいのですが、静的に作るとかなりの数になるのでPHPを何となくですが勉強しています。

やりたいことはこうです。

サムネイルのリンク先URLに?=id1とかつける
 http://hogehoge/works/?=id1
 http://hogehoge/works/?=id2

そしてリンクのページを開くとidに紐付いたレコードのテキスト(画像)を表示させる。

フィールドの情報を表示させることは分かるのですが、
もし、idが?=id1の時に1行目のレコードのデータを表示するという条件分岐?ところが色々調べたのですが、よく分からずにつまずいています。

やりたいことはわかってるのですが、書ける力がありません。
情けない話ですが、ご存知のかた、アドバイス等いただけると嬉しいです。

初歩的な質問かもしれませんが、PHPは最近使い始めたばかりでハマってしましました。宜しくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/04/20 16:02:39
  • 終了:2013/04/20 21:04:25

ベストアンサー

匿名回答1号 No.3

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/04/20 20:59:29

「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タグの中に移動しました。

匿名質問者

ありがとうございます。

ID別にイメージ通りの形を作ることが出来ました。
とても助かりました。

どうもありがとうございます。

解決いたしましたので、質問を終了させて頂きます。

2013/04/20 21:04:11

その他の回答(2件)

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/04/20 17:21:58

>紐付いたレコード
>フィールドの情報を表示させることは分かる

データベースを使っているみたいなので、
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';
}
匿名質問者

質問者から

匿名質問者2013/04/20 22:29:15

さっそくごの御回答有り難うございます。
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>


自分の書き方が絶対に間違っているのはわかるのですが、testというデータベースにworksというテーブルを作っています。
おかしいところだらけだと思いますが、あためてご教授いただけると嬉しいです。

匿名回答1号 No.2

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/04/20 20:10:02

「フィールドの情報を表示させることは分かる」ってのは、
「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

匿名質問者

質問者から

匿名質問者2013/04/20 22:29:15

ありがとうございます。

まだ始めたばかりで、色々勉強不足でした。
勉強させて頂きます。

匿名回答1号 No.3

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/04/20 20:59:29ここでベストアンサー

「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タグの中に移動しました。

匿名質問者

ありがとうございます。

ID別にイメージ通りの形を作ることが出来ました。
とても助かりました。

どうもありがとうございます。

解決いたしましたので、質問を終了させて頂きます。

2013/04/20 21:04:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません