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


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です。//←ここは適当です。
}
------------------------------------------------------------
※ちなみにこれでは判別ができません。

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

宜しくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/01/27 14:13:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kent0608 No.1

回答回数220ベストアンサー獲得回数23

ポイント60pt

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を参考に頑張って下さい。

id:gelgelgel

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

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

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

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

$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か判別しているので問題はないですが、

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

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

2009/01/27 14:11:29

その他の回答1件)

id:kent0608 No.1

回答回数220ベストアンサー獲得回数23ここでベストアンサー

ポイント60pt

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を参考に頑張って下さい。

id:gelgelgel

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

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

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

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

$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か判別しているので問題はないですが、

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

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

2009/01/27 14:11:29
id:fut573 No.2

回答回数196ベストアンサー獲得回数55

ポイント10pt

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

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

 

id:gelgelgel

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

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

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

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

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

2009/01/27 14:12:52

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

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

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

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

回答リクエストを送信したユーザーはいません