Php 在插入mysql之前检查数据(url变量)

Php 在插入mysql之前检查数据(url变量),php,mysql,ajax,filter,Php,Mysql,Ajax,Filter,我的php脚本正在发布ajax发送给它的错误URL。当我尝试过滤url并取消对mysql的插入时,它不起作用。我要做的是验证$link变量是否为链接。如果没有,不要将数据发布到mysql。我能知道我做错了什么以及如何修复它吗?谢谢:) 这是我的密码 $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("

我的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);
}
试试这个:

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\u 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)方案。因此,如果不适合您,您可以搜索另一个正则表达式。

这就是您想要做的吗?也许您需要一个正则表达式解决方案

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();
}

. 它们不再得到维护。看到了吗?而是学习,然后使用或-将帮助您决定哪个。我将发布相同的评论:)它仍然将无效的url发布到mysql。请发布一个url的外观示例我想发布的url是-->或类似于此:我不想像这样发布url-->xxxhxtxtp://example.com 或者是一个不完整的url。你给我的代码是有效的阻止没有http的错误URL。但是,如果url包含http(s),并且在http(s)之前有不正确的字符,则查询仍将运行。非常感谢!它起作用了!在过去的4个小时里,我一直在寻找解决方案,而你终于找到了;D谢谢你!它仍在发布错误的url。如果我发布此无效url-->“sdsdhttp://example.com,它将在mysql@user1932820你想验证还是清理它们?谢谢你,雷德雷盖给了我解决方案!