2013-03-20 48 views
0

我的php腳本發佈了ajax發送給它的錯誤url。當我嘗試過濾url並取消插入到mysql中時,它不起作用。我想要做的是驗證$鏈接變量,如果它是一個鏈接。如果沒有,不要發佈數據到MySQL。我可以知道我做錯了什麼,以及如何解決它?謝謝:) 這裏是我的代碼在插入到mysql之前檢查數據(url變量)

$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); 
} 
+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit 2013-03-20 21:50:01

+0

我打算髮表相同的評論:) – 2013-03-20 21:50:49

回答

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)方案。所以你可以搜索另一個正則表達式,如果這不適合你。

+0

它仍然發佈無效的網址到MySQL。 – user1932820 2013-03-20 21:51:36

+0

請發表一個例子,該網址是如何尋找的 – bitWorking 2013-03-20 21:53:37

+0

我想發佈的網址是----> http://example.com/#![somerandomkeys]![somerandomkeys]或者像這樣的一個:https:// mega .co.nz /#!nMYBFJIJ!QZQXh1NNxiDGyoFqUpHPGWnwGpR4E8Er1K3mRDrRDn8我不想發佈這樣的網址---> xxxhxtxtp://example.com或一個不完整的網址。 – user1932820 2013-03-20 22:00:01

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

它仍然發佈不良網址。如果我發佈這個不工作的網址--->「sdsdhttp://example.com」,它會將它插入到mysql – user1932820 2013-03-20 21:54:43

+0

@ user1932820你想驗證還是要清除它們? – Kermit 2013-03-20 22:01:54

+0

謝謝,redreggae給了我解決方案! – user1932820 2013-03-20 22:19:48

相關問題