0

私のphpスクリプトは、ajaxが送信する悪いURLを投稿しています。URL をフィルタリングして mysql への挿入をキャンセルしようとすると、機能しません。私がやりたいのは、リンクの場合は $link 変数を確認することです。そうでない場合は、データを mysql に投稿しないでください。何が間違っていたのか、それを修正する方法を知ることはできますか? ありがとう:)これが私のコードです

$con = mysql_connect("localhost","root","");
if (!$con) {
   die('Could not connect: ' . mysql_error());
}

mysql_select_db("database", $con);

$link = $_POST['new'];
$name = $_POST['name'];
$size = $_POST['size'];
$cat = $_POST['cat'];

// PHP 5.3.5-1ubuntu7.2
$link = mysql_real_escape_string($link);
$name = mysql_real_escape_string($name);
$size = mysql_real_escape_string($size);
$cat = mysql_real_escape_string($cat);

if (filter_var($link, FILTER_VALIDATE_URL)) {} else {
  echo "URL is NOT valid";
  mysql_close($con);
  exit();
}

$check = mysql_query("SELECT link FROM links WHERE  link = '{$link}';");

if (mysql_num_rows($check) == 0) {
    // insert

    $sql="INSERT INTO links (link, name, size, category) VALUES ('$link','$name','$size','$cat')";
    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }
    echo "1 record added.  Redirecting!";


    mysql_close($con);
}
4

2 に答える 2

0

これはあなたがやろうとしていることですか?おそらく、正規表現ソリューションが必要です。

if (filter_var($link, FILTER_VALIDATE_URL)) {
    $check = mysql_query("SELECT link FROM links WHERE  link = '{$link}';");

    if (mysql_num_rows($check) == 0) {
        // insert

        $sql="INSERT INTO links (link, name, size, category) VALUES ('$link','$name','$size','$cat')";
        if (!mysql_query($sql,$con))
          {
          die('Error: ' . mysql_error());
          }
        echo "1 record added.  Redirecting!";


        mysql_close($con);
    }
} else {
  echo "URL is NOT valid";
  mysql_close($con);
  exit();
}
于 2013-03-20T21:49:49.633 に答える
0

これを試してください:

if(filter_var($link, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED) === false){
    echo "URL is NOT valid";
    mysql_close($con);
    exit();
}

あなたの権利xxxhxtxtp://example.comは、有効な URL として渡されます。

preg_match代わりに試してみてください。

if (!preg_match("#^http(s)?://[a-z0-9-_.]+\.[a-z]{2,4}#i", $link)) {
    echo "URL is NOT valid";
    mysql_close($con);
    exit();
}

この正規表現では、http(s) スキームが必要です。したがって、それがうまくいかない場合は、別の正規表現を検索できます。

于 2013-03-20T21:49:29.073 に答える