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です。//←ここは適当です。
}
------------------------------------------------------------
※ちなみにこれでは判別ができません。
ほかにも色々やったのですが、うまくいきませんでした。
なるべくシンプルな方法で教えていただけると嬉しく思います。
宜しくお願い致します。
PHPスクリプト講座:論理型:boolean -- そふぃのphp入門
SELECET文のクエリーをmysql_query()に投げると、戻り値はリソース型という特殊な変数になります。
このリソース型は、結果にかかわらず、条件分岐などではすべてTRUEとして扱われてしまうため
判別ができなかったのでしょう。
urlが重複しているかどうかを調べるには
mysql_num_rows()を使い、その戻り値を条件分岐に使いましょう。
また、質問文のソースコードにはSQLインジェクションの脆弱性が含まれています。
ここも直したほうがいいですね。
[ThinkIT] 第1回:SQLインジェクションによるデータベース操作 (1/3)
本当はソースをすべて載せようかと思ったのですが、自分で考えるのも大切だと思い
ヒントのみの解答とさせていただきました。上記のURLを参考に頑張って下さい。
PHPスクリプト講座:論理型:boolean -- そふぃのphp入門
SELECET文のクエリーをmysql_query()に投げると、戻り値はリソース型という特殊な変数になります。
このリソース型は、結果にかかわらず、条件分岐などではすべてTRUEとして扱われてしまうため
判別ができなかったのでしょう。
urlが重複しているかどうかを調べるには
mysql_num_rows()を使い、その戻り値を条件分岐に使いましょう。
また、質問文のソースコードには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か判別しているので問題はないですが、
後々利用者が増えたら考えたいと思います。
ありがとうございました。
MySQLなら、重複しない時だけ挿入することができます。
INSERT IGNOREで挿入したら重複は無視されるはずです。
ご回答ありがとうございます。
言葉足らずで下が、重複していた場合に
エラーを出力したいのでその部分に対しての
ご意見をお聞かせいただきたかったです。
ありがとうございました。
ご回答ありがとうございます。
恐らくうまくいきました。大変勉強になりました。
こんな感じで宜しかったでしょうか?
------------------------------------------------------------
$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か判別しているので問題はないですが、
後々利用者が増えたら考えたいと思います。
ありがとうございました。