人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

初歩的な質問ですみません。

SmartyでDBにURLを登録する仕組みを作っているのですが、
重複したURLは登録できないようにしたいと思っております。

いろいろやったのですがどうもうまくいきません。
以下私が制作したサンプルの一例です。

------------------------------------------------------------
//ポストされたURLを取得
$url = $_POST["url"];

//ポストされたURLが「tb_pre」内にあるか探す。
$rs = mysql_query("SELECT url FROM tb_pre WHERE url=" . $url . "");

//$rsがTRUEの場合にエラーを表示
if($rs){
※すでに登録があるURLです。//←ここは適当です。
}
------------------------------------------------------------
※ちなみにこれでは判別ができません。

ほかにも色々やったのですが、うまくいきませんでした。
なるべくシンプルな方法で教えていただけると嬉しく思います。

宜しくお願い致します。

●質問者: gelgelgel
●カテゴリ:インターネット ウェブ制作
✍キーワード:DB SELECT Smarty URL エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kent0608
●60ポイント ベストアンサー

PHPスクリプト講座:論理型:boolean -- そふぃのphp入門

mysql_query

SELECET文のクエリーをmysql_query()に投げると、戻り値はリソース型という特殊な変数になります。

このリソース型は、結果にかかわらず、条件分岐などではすべてTRUEとして扱われてしまうため

判別ができなかったのでしょう。

urlが重複しているかどうかを調べるには

mysql_num_rows()を使い、その戻り値を条件分岐に使いましょう。

PHP: mysql_num_rows - Manual

また、質問文のソースコードにはSQLインジェクションの脆弱性が含まれています。

ここも直したほうがいいですね。

[ThinkIT] 第1回:SQLインジェクションによるデータベース操作 (1/3)

本当はソースをすべて載せようかと思ったのですが、自分で考えるのも大切だと思い

ヒントのみの解答とさせていただきました。上記のURLを参考に頑張って下さい。

◎質問者からの返答

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

恐らくうまくいきました。大変勉強になりました。

こんな感じで宜しかったでしょうか?

------------------------------------------------------------

$url = $_POST["url"];

$rs = mysql_query("SELECT * FROM tb_pre WHERE url='$url'");

$num_rows = mysql_num_rows($rs);

if($num_rows){

※そのURLは既にに登録があります。

}

------------------------------------------------------------

またSQLインジェクションについてもありがとうございます。

今のところSpryで文字列がURLか判別しているので問題はないですが、

後々利用者が増えたら考えたいと思います。

ありがとうございました。


2 ● fut573
●10ポイント

MySQLなら、重複しない時だけ挿入することができます。

INSERT IGNOREで挿入したら重複は無視されるはずです。

◎質問者からの返答

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

言葉足らずで下が、重複していた場合に

エラーを出力したいのでその部分に対しての

ご意見をお聞かせいただきたかったです。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ