2011-11-15 13 views
1

スパイラルURLというスクリプト用の編集ボタンを追加したいのですが、URL idを取得できないという問題があります。これは私が試したことです:PHPでURL IDを取得するには? (mysql_query UPDATEの場合)

/** get url id **/ 
$id = isset($_GET['id']) ? $_GET['id'] : ''; 
@mysql_query("UPDATE short_urls SET long_url = 'test' WHERE url_id = '".$id."' LIMIT 1"); 

私は間違っていますか? 。。https://stackoverflow.com/ 私はあなたを助けるのが大好きだが、私はあなたが間違って何をしているかが表示されないI」 - 「私はあなたがStackOverflowの上で投稿をお勧めします

はまた、私は著者と彼の応答を電子メールで送信しました私はまだPHPを学んでいます。

+5

あなたは、クエリ文字列にそれを置く前に、ユーザー入力をエスケープしないことにより、SQLインジェクション攻撃に自分自身を開いています。 – Crontab

+0

このスクリプトを起動するためにあなたが呼び出すURLは何ですか?補足として、ここではSQLインジェクションを広く利用することができます。多分あなたはPDO準備文を使用することができますか? – Molochdaa

+0

また、mysql_query()の前にエラーサプレッサ@を使用しないでください。 –

答えて

6
  1. でご利用可能GET配列変数のすべてを見ることができるということができません。
  2. @オペレータでエラーが発生しています。 NEVERエラーを抑制する
  3. mysql_query()の戻り値をチェックしていないので、失敗した場合はブール値FALSEを返します。これを使用するコードと

スクラップ:私はidパラメータが数値であることを仮定してい

if (!isset($_GET['id'])) { 
    die("missing query parameter"); 
} 
$id = intval($_GET['id']); 
if ($id === '') { 
    die("Invalid query parameter"); 
} 
$sql = "UPDATE short_urls SET long_url = 'test' WHERE url_id=$id LIMIT 1"; 
$result = mysql_query($sql); 
if ($result === FALSE) { 
    die("Mysql error: " . mysql_error() . $sql); 
} 

注意。そうでない場合は、intval()を削除してください。

0

このようなURLがある場合:あなたはエラーになります$_GET['id']アクセスしようとした後、そこにはidがない場合domain.com/something.php?id=65

$_GET['id']65

と同じでなければなりません。

@シンボルも削除してください(PHPの警告は表示されません)。

そして、あなたは彼らが;-)

0

をやっていることを知っている新しい開発者を取得し、(サイドノート)もメーリングリストのbobby-tables

に開放されていますが、あなたは、URL

http://www.somewebsite.com?id=56&other_car=test

を確認しました

"?" URLの最後の後に、すべての部分がアンパサンドによって分割されていることを確認します。

あなたはあなたがSQLインジェクション攻撃に対して広く開いている

print_r($_GET); 
2

$_GET['id']の値が実際に値を持っていることを確認してください。あなたのURLはhttp://myurl.com/index.phtml?id=yourvalueのようになります。あなたが実行してこれを行うことができます:

print "id=".$_GET['id']; 

また、クエリを実行するたびに、ユーザが操作することができ、あらゆる変数をエスケープするようにしてください。これを行なわずに、SQLインジェクション攻撃まで自分自身を開放しています。

mysql_real_escape_stringの - http://php.net/manual/en/function.mysql-real-escape-string.php

@mysql_query("UPDATE short_urls SET long_url = 'test' WHERE url_id = '".mysql_real_escape_string($id)."' LIMIT 1"); 
関連する問題