こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

1つのデータだけピックアップ/SQL PHP

SQLのデータベースに格納したデータをPHPを使ってhtmlに表示しています。

★管理画面
http://pips.chu.jp/0/select/index.php

この中から1つのデータ(行)だけをピックアップして、別のhtmlに表示します。

★ピックアップ画面
http://pips.chu.jp/0/select/pickup.php

現在のやり方は、ピックアップしたいデータを修正画面で開き、「選択」を選択。
ピックアップ画面では
("SELECT * FROM sentaku WHERE sentaku = '選択'");
としています。

これでも一応はできるのですが、あくまでも1つだけを選びたいので、まず過去に選択していたデータを「選択」から外し、改めて選択したいデータを「選択」しなければいけません。
非常に効率が悪いです。
もっと簡単に(できればワンクリックで)実現する方法はないでしょうか。

どうぞよろしくお願いします。


※参考として、使用しているPHPのコードを記載します。(一部省略)

★管理画面(index.php)
<?php
require 'common.php';
$pdo = connect();
$st = $pdo->query("SELECT * FROM sentaku");
$sentaku = $st->fetchAll();
?>
<?php foreach ($sentaku as $g) { ?>
<TABLE class="tab-con">
<TBODY>
<TR>
<TD class="td-t">書名</TD>
<TD class="td-c"><?php echo $g['memo'] ?></TD>
</TR>
<TR>
<TD class="td-t">選択</TD>
<TD class="td-sentaku"><?php echo $g['sentaku'] ?></TD>
</TR>
</TBODY>
</TABLE>
<P class="ope2"> <a href="edit.php?code=<?php echo $g['code'] ?>"><FONT color="#0080ff">★</FONT>修正画面へ</A></P>
<?php } ?>

★修正画面(edit.php)
<?php
require 'common.php';
$pdo = connect();
if (@$_POST['submit']) {
$code = $_POST['code'];
$memo = $_POST['memo'];
$sentaku = $_POST['sentaku'];
if (!$error) {
$pdo->query("UPDATE sentaku SET memo='$memo',sentaku='$sentaku' WHERE code=$code");
header('Location: index.php');
exit();
}
} else {
$code = $_GET['code'];
$st = $pdo->query("SELECT * FROM sentaku WHERE code=$code");
$row = $st->fetch();
$memo = $row['memo'];
$sentaku = $row['sentaku'];
}
?>
<?php if ($error) echo "<span class=\"error\">$error</span>" ?>
<form action="edit.php" method="post">
<p>
書名<br>
<input type="text" name="memo" value="<?php echo $memo ?>">
</p>
<p>
選択<br>
<input type="radio" name="sentaku" value="選択">選択
<input type="radio" name="no" value=" ">×
</p>
<p>
<input type="hidden" name="code" value="<?php echo $code ?>">
<input type="submit" name="submit" value="更新">
</p>
</form>

★ピックアップ画面(pickup.php)
<?php
require 'common.php';
$pdo = connect();
$st = $pdo->query("SELECT * FROM sentaku WHERE sentaku = '選択'");
$sentaku = $st->fetchAll();
?>
<?php foreach ($sentaku as $g) { ?>
<h1>選択した1つのデータをピックアップ</h1>
<h2><?php echo $g['memo'] ?>銀河鉄道の夜</h2>
<?php } ?>

投稿日時 - 2014-07-08 18:37:05

QNo.8670161

困ってます

質問者が選んだベストアンサー

例えば今「我輩は猫である」が選択である状態だとして、「走れメロス」を修正画面で選択にして更新ボタンを押すとするよね。そうしたら「走れメロス」が選択になるんだけどこの時同時に「我輩は猫である」を選択でなくしたいって事だよね。

$pdo->query("UPDATE sentaku SET memo='$memo',sentaku='$sentaku' WHERE code=$code");
の前に
$pdo->query("UPDATE sentaku SET ,sentaku=''");
というのを入れるだけで我輩やメロスの区別なく全部選択が外れる。その後
$pdo->query("UPDATE sentaku SET memo='$memo',sentaku='$sentaku' WHERE code=$code");
が動くのでそれが選択になってたらメロスが選択状態になる。

~~~~Ver.1 ここから~~~~
if (!$error) {
$pdo->query("UPDATE sentaku SET memo='$memo',sentaku='$sentaku' WHERE code=$code");
header('Location: index.php');
exit();
}
~~~~Ver.1 ここまで~~~~

~~~~Ver.2 ここから~~~~
if (!$error) {
$pdo->query("UPDATE sentaku SET sentaku=''"); // 一旦全部選択を解除する。メモはそのまま。
$pdo->query("UPDATE sentaku SET memo='$memo',sentaku='$sentaku' WHERE code=$code"); // 選ばれてた奴を選択にする
header('Location: index.php');
exit();
}
~~~~Ver.2 ここまで~~~~

さて、これだと「走れメロス」をedit.phpで開いて、選択にせずにメモだけ更新した時に全部が未選択の状態になる。
なので、選択になっている時のみ他の選択を解除するという動きにした方が良いかも知れない。

~~~~Ver.3 ここから~~~~
if (!$error) {
if("選択" === $sentaku) { // ←この判定方法は自分で考えてくれ
$pdo->query("UPDATE sentaku SET sentaku=''"); // 一旦全部選択を解除する。メモはそのまま。
}
$pdo->query("UPDATE sentaku SET memo='$memo',sentaku='$sentaku' WHERE code=$code"); // 選ばれてた奴を選択にする
header('Location: index.php');
exit();
}
~~~~Ver.3 ここまで~~~~

投稿日時 - 2014-07-09 07:26:33

お礼

ご回答ありがとうございます。

アドバイス通りに書き換えたら、うまくいきました。
思い描いていた通りのものができました!

$pdo->query("UPDATE sentaku SET sentaku=''");
の部分は、今後いろいろと応用できそうです。

Ver.3 についても、今から勉強します。

この度はありがとうございました。
今後も勉強を続けますので、また機会がありましたらよろしくお願いします。

投稿日時 - 2014-07-09 13:47:14

ANo.1

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問