• ベストアンサー

IFで処理を分けたい

PHP4.4で掲示板を作成しています。 記事の削除時に、 ・入力された削除用パスワードがカラム「削除用パスワード」とマッチ  もしくは、管理者用パスワードとマッチしていたら、削除するように  そうでなかった場合は、それと分かるステータスを返すようにしたい  のですが、そのSQLの書き方がわかりません。 ここではPOSTされたパスワードは1234、管理者用パスワードは9999、テーブル名はbbs、記事IDを10と仮定して例を書きます。 SQLの文法としては滅茶苦茶かもしれませんが、大体こういう事をしたいという意味です。 case when (1234 == bbs.password or 1234 == 9999) then   delete from bbs where post_id=10; else   return -1; end return-1の理由は、パスワードが違っていたという事を知りたいからです。 よろしくお願いします。

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 んと…SQLで全部やらなくても、と思うのですがいかがでしょうか? よく「1文の複雑なSQLで様々なことを片付けようとする」状況を拝見しますが、後々の保守とか考えるとまずお勧めできません。 SQL:入力された削除用パスワードがカラム「削除用パスワード」とマッチしたか? SQL:入力された削除用パスワードが管理者用パスワードとマッチしたか? PHP:いずれかのパスワードにマッチしたら SQL:対象情報を削除 PHP:いずれのパスワードにもマッチしなかったら 適切なメッセージなりを出力 という風にきちんと分解して作成されることをお勧めいたします。

ibayac
質問者

お礼

はい、自分でもその様に解決しました。 (1)PHPから「select del_password from bbs where post_id = XXXX」というSQLを実行し、パスワードを取得 (2)PHP上で入力されたパスワードが(1)のパスワードと同じか、もしくは管理者用の特別な番号であるかチェック(DB上のパスワードが空白の場合は入力されたパスワードと同じでも消させない) (3)削除すべき場合は「delete from bbs where post_id=XXX」を実行 ということで、なるべくSQLはシンプルにし、判断処理はPHP上で実行することで回避しました。 今回はループの中で呼ばれる処理でもないし、これで解決とし、どうしても複雑なSQLを記述する必要にせまられたら、その時考慮することにします。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>パスワードが違っていたという事を知りたい あくまでもSQLですのでWHERE節で条件をつなげて、正であれば削除されるし 偽であれば削除されないという認識の方がよろしいかと。 最終的にはPHP側ではmysql_affected_rows()で影響のあった行数を拾えば よいのですから。

参考URL:
http://www.php.net/manual/ja/function.mysql-affected-rows.php

関連するQ&A