2014-07-15 3 views
0

사용자가 제공 한 링크의 유효성을 검사하여 데이터베이스에 안전하게 저장하고 (적어도 더 안전함) 그것이 페이스 북에 대한 링크인지 확인하십시오.Ajax/PHP를 똑똑하게 코딩하는 방법

이제이 코드를 다른 링크에 대해 롤아웃하고 필요에 따라 매개 변수를 변경하여이 사이트의 사용자 프로필에 대한 링크가 작동하도록하고 싶은데 비트를 복사하여 5 번 붙여 넣기를 시도한 다음 다시 시도하십시오. 이것을 접근하는 더 좋은 방법이라면 Ajax가 그것을 사용하도록 조정하십시오.

이것은 내 코드입니다. www.vwrx_project.co.uk/test.php에서 볼 수 있습니다. 아마 facebook.com/ (여기에있는 것) 만 허용됩니다.

link_checker.php

<?php 

function check_url($dirty_url) { 
//remove anything before facebook.com using strstr() 
//clean url leaving alphanumerics :/. only - required to remove facebook link format with /#!/ 
$clean_url = strstr(preg_replace('#[^a-z0-9:/.?=]#i', '', $dirty_url), 'facebook.com'); 

$parsed_url = parse_url("http://www.".$clean_url); //parse url to get brakedown of components 

$safe_host = $parsed_url['host']; // safe host direct from parse_url 

// str_replace to switch any // to a/inside the returned path - required due to preg_replace process above 
$safe_path = str_replace("//", "/", ($parsed_url['path'])); 

if ($parsed_url['host'] == 'www.facebook.com' && $parsed_url['path'] != '' && $parsed_url['path'] != '/') { 
    echo "<a href=\"http://$safe_host$safe_path\" alt=\"facebook\" target=\"_new\">Facebook</a>"; 
} else if ($parsed_url['host'] == 'www.facebook.com' && $parsed_url['path'] == '') { 
    echo "missing_profile1"; 
} else if ($parsed_url['host'] == 'www.facebook.com' && $parsed_url['path'] == '/') { 
    echo "missing_profile2"; 
} else {    
    echo "invalid_url"; 
} 
} 
?> 

Test.php이

<?php 
include_once ("includes/check_login_status.php"); 
include_once ("includes/link_checker.php"); 

// AJAX CALLS THIS LOGIN CODE TO EXECUTE 
if(isset($_POST["L"])){ 
$dirty_url = $_POST["L"]; //user supplied link 
//$dirty_url = "http://www.facebook.com/profile.php?id=4"; 
    // if $dirty_url is blank 
if($dirty_url == ""){ 
    echo "no link supplied"; 
    exit();  
} else { 
    check_url($dirty_url); 
} 
exit(); 
} 
?> 

<html> 
<head> 
<title>testing</title> 
<script type="text/javascript" src="js/main.js"></script> 
<script src="js/main.js"></script> 
<script src="js/ajax.js"></script> 
<script> 

function emptyElement(x){ 
_(x).innerHTML = ""; 
} 

function cleanURL(){ 
var user_url = _("user_link").value; 
var func = _("hidden").value; 
if(user_url == ""){ 
     _("status").innerHTML = "Please provide a link before clicking submit"; 
    } else { 
     _("submitbtn").style.display = "none"; 
     _("status").innerHTML = 'please wait ...'; 
     var ajax = ajaxObj("POST", "test.php"); 
     ajax.onreadystatechange = function() { 
      if(ajaxReturn(ajax) == true) { 
       if(ajax.responseText == "no link supplied"){ 
        _("status").innerHTML = "Submitted blank form data."; 
        _("submitbtn").style.display = "block"; 
       } else if(ajax.responseText == "invalid_url"){ 
        _("status").innerHTML = "The url supplied is invalid"; 
        _("submitbtn").style.display = "block"; 
       } else if(ajax.responseText == "missing_profile1"){ 
        _("status").innerHTML = "Please supply a link to your profile"; 
        _("submitbtn").style.display = "block"; 
       } else if(ajax.responseText == "missing_profile2"){ 
       _("status").innerHTML = "Please supply a link to your profile"; 
       _("submitbtn").style.display = "block"; 
      } else{ 
       _("status").innerHTML = ajax.responseText; 
      } 
     } 
    } 
    ajax.send("L="+user_url); 
} 
} 
</script> 
</head> 
<body> 
    <p id="status"></p> 

<form id="linkform" onSubmit="return false;"> 
    <input type="text" id="user_link"> 
    <input type="hidden" id="hidden" value="Facebook"> 
    <button id="submitbtn" onClick="cleanURL()">Submit</button> 
</form> 

답변

1

왜 허용 할 웹 사이트가 추가 매개 변수를 추가 해달라고? 당신이

check_url($dirty_url, 'facebook.com');

할 수있는 여러 가지 다른 URL을 사용하고자 할 때

function check_url($dirty_url, $websiteURL)

그런 다음 다음 대신 하드 'facebook.com'

$websiteURL 변수를 사용하는 함수를 업데이트

또는

check_url($dirty_url, 'twitter.com');

또는 단일 기능에서 여러 사이트를 확인할 수 있기를 원하십니까? facebook.com 및 twitter.com과 같이

+0

나는 너무 확신하지 못하기 때문에 조언을 구하고 싶습니다. 나는 페이스 북, 트위터, 구글 +, 인스 타 그램, 유튜브, 개인 사이트 등 사용자가 제공 한 URL을 확인할 수있는 시스템을 원했고, 주요 사이트가 링크의 올바른 형식과 일치하는지 확인했다. 내 생각에는 6 개의 필드가있는 양식이 제공되었으며 양식을 제출할 때 어떤 필드가 채워지는지 확인한 다음 스크립트를 실행하십시오. –

+1

허용 된 모든 URL을 나열 할 수있는 함수를 배열 내에 만들 수 있습니다. 그런 다음 코드는 붙여 넣기 된 URL이 배열의 저장된 URL과 일치하는지 여부 만 확인할 수 있습니다. ''in_array()''함수를 ​​사용하여이를 수행 할 수 있습니다. –