2013-03-20 4 views
0

PHP 스크립트가 아약스로 보낸 잘못된 URL을 게시하고 있습니다. URL을 필터링하고 mysql에 삽입을 취소하려고하면 작동하지 않습니다. 내가하고 싶은 것은 그것이 링크라면 $ link 변수를 확인하는 것이다. 그렇지 않다면, 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

[** 새 코드 **] (http://bit.ly/phpmsql)에는 mysql_ * 함수를 사용하지 마십시오. 그들은 더 이상 유지되지 않으며 [공식적으로 사용되지 않습니다] (http://j.mp/XqV7Lp). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. – Kermit

+0

나는 같은 코멘트를 게시하려고했다 :) –

답변

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에 잘못된 URL을 게시하고있다. – user1932820

+0

URL을 찾는 방법을 게시하십시오. – bitWorking

+0

내가 게시하고 싶은 URL은 ----> http://example.com/#![somerandomkeys]![somerandomkeys]이거나 https : // mega입니다. .co.nz/#! nMYBFJIJ! QZQXh1NNxiDGyoFqUpHPGWnwGpR4E8Er1K3mRDrRDn8 나는 이런 식으로 URL을 게시하고 싶지 않습니다. ---> xxxhxtxtp : //example.com 또는 완료되지 않은 URL. – user1932820

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

여전히 잘못된 URL을 게시하고 있습니다. 내가 작동하지 않는 URL을 게시하면 ---> "sdsdhttp : //example.com", mysql에 삽입합니다. – user1932820

+0

@ user1932820 유효성을 검사 하시겠습니까, 아니면 삭제 하시겠습니까? – Kermit

+0

감사합니다. – user1932820

관련 문제