質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2329閲覧

条件に合致したカラムを抽出して処理を分ける

leoairen

総合スコア122

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/07/05 01:14

編集2016/07/05 02:28

下記コードで該当する日付(holiday)を「削除」か「登録」のif文に入れて「削除」か「登録」の処理を行いたいのですが行き詰まっております。複数の日付の登録はできますが、複数の日付の削除はできません。単体はどれもできます。
たぶんif文に問題があると思いますが、どう修正すればよいかどなたか教えて頂けますでしょうか。

$paraholiday = explode(',',$para['holiday']); $ct2 = 0; foreach ($ret as $h){ $is_deleted[$ct2] = $h['is_deleted']; $ct2 += 1; if(count($paraholiday) > 1 && array_search("y", $is_deleted) !== FALSE){ 登録処理 }else if(count($paraholiday) > 1 && array_search("n", $is_deleted) !== FALSE){ 削除処理 } }

DB

-- Table "calendartbl" DDL CREATE TABLE `calendartbl` ( `holiday` date NOT NULL DEFAULT '0000-00-00' COMMENT '休日年月日', `is_deleted` char(1) NOT NULL COMMENT '削除フラグ(y, n)', PRIMARY KEY (`holiday`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='休日';

var_dump

var_dump($h); array(2) { [0]=> string(1) "y" ["is_deleted"]=> string(1) "y" } var_dump($ret); array(2) { [0]=> array(2) { [0]=> string(1) "n" ["is_deleted"]=> string(1) "n" } [1]=> array(2) { [0]=> string(1) "n" ["is_deleted"]=> string(1) "n" } var_dump($paraholiday); array(2) { [0]=> string(10) "2016-02-01" [1]=> string(10) "2016-02-02" } var_dump($is_deleted); array(2) { [0]=> string(1) "n" [1]=> string(1) "n" }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

まずはif文の中にechoで数字でも出力してみて、本当に個数分ループしているか確認してみたらどうでしょうか。

if(count($paraholiday) > 1 && array_search("y", $is_deleted) !== FALSE){ echo 0; 登録処理 }else if(count($paraholiday) > 1 && array_search("n", $is_deleted) !== FALSE){ echo 1; 削除処理 }

これで削除処理も複数回ループしているなら、SQL構文の中、たとえば削除条件の変数が同じ値を指し続けていた、など問題があると分かります。

投稿2016/07/05 05:23

FKM

総合スコア3633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/08 01:27

ご回答、ありがとうございました。できました。
guest

0

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

正直ちょっとコードが読みにくいですね、あと必要な部分は意図的に載せてないのでしょうが何?
ってなります。例えば、$ret ってどこから来たの?とか

変数名もわかりにくいので意図しているところが読みにくいです。($hって?)
適切にコメントを入れるなりして自分が何をしたいのかはっきりしておかないと後々メンテ不能になると思われますよ。 (普通に見たらスルーする質問ですw)

で、あまり時間をかけて読んでいないですが、
if 文が書けているならあとは、登録ならInsert、削除ならDeleteのSQLを発行するだけでしょ?と
思うのですが、何に詰まっているのでしょうか?

私の読解力も足りないですが、もう少しシンプルにして頂けると助かります ^_^;

投稿2016/07/05 01:36

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/05 04:34

ご回答、ご指摘、ありがとうございます。わかりにくい内容で失礼いたしました。質問については補足情報を付け加えました。今回詰まった内容はif文です。書けていないため、複数登録ができても複数削除ができずにおります。
guest

0

そもそも登録と削除が同じインターフェースになるのは考えにくいのだけど
UIを調整すれればもっと単純なモデルになりそうな気がします

入力はHTMLですよね?
どういったものを想定されていますか?

追記

HTML

1<form> 2<table> 3<thead> 4<th>日付<ht> 5<th>削除</th> 6<th>登録</th> 7</tr> 8</thead> 9<tbody> 10<tr> 11<td>2016-02-01</td> 12<td><input type="radio" name="d['2016-02-01']" value="del"></td> 13<td><input type="radio" name="d['2016-02-01']" value="add"></td> 14</tr> 15<tr> 16<td>2016-02-02</td> 17<td><input type="radio" name="d['2016-02-02']" value="del"></td> 18<td><input type="radio" name="d['2016-02-02']" value="add"></td> 19</tr> 20<tr> 21<td>2016-02-03</td> 22<td><input type="radio" name="d['2016-02-03']" value="del"></td> 23<td><input type="radio" name="d['2016-02-03']" value="add"></td> 24</tr> 25</tbody> 26</table> 27<input type="submit" value="go"> 28</form>

PHP

1<?PHP 2$d=filter_input(INPUT_GET,'d', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY); 3foreach((array) $d as $key=>$val){ 4 $sql=""; 5 if($val=="del") $sql="DELTE FROM テーブル WHERE 日付カラム='$key'"; 6 if($val=="add") $sql="INSERT INTO テーブル(日付カラム) VALUES='$key'"; 7 print $sql."<br>";//実際にはprepare処理でsqlを発行 8} 9?>

投稿2016/07/05 01:23

編集2016/07/05 06:34
yambejp

総合スコア114808

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/05 01:26

ご回答、ありがとうございます。 管理画面のHTMLがありまして、その画面にて入力した日付は登録しますので、ここまではできておりますが、 逆に入力された日付の一覧から選んだら削除にしたいです。
yambejp

2016/07/05 01:38

ソース追記しました HTML側で調整すれば、あとは単純な分岐になると思います
leoairen

2016/07/08 01:29

ご回答、ありがとうございました。FKMさんのご回答で引っ掛かったところに気づけたので、できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問