2014-07-15 38 views
0

我給自己買了一個小腳本,檢查由用戶提供的鏈接的有效性,使得它的安全數據庫來存儲(至少更安全)和確認這是一個鏈接到Facebook。我怎麼這樣聰明的辦法代碼的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

你爲什麼不增加一個額外的參數,它是要允許的網站?

function check_url($dirty_url, $websiteURL)

然後更新您的功能使用$websiteURL變量而不是硬編碼「facebook.com」

然後,當你想有幾個不同的網址,你可以做到這一點

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

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

或者,你希望能夠爲您在單一功能多個站點?如facebook.com和twitter.com

+0

我也不太清楚,這就是爲什麼我想諮詢一下。我希望在的地方,我可以檢查Facebook,微博,谷歌+,Instagram的,YouTube和他們的個人網站用戶提供的URL,如果他們有一個,確保了主要的匹配環節的正確的格式來獲取系統。 我的想法是提供一個形式6場和提交表單時,檢查,看看是否有被填補的字段,然後運行該腳本 –

+1

你可以創建你可以列出所有允許的URL函數內部的數組。然後,您的代碼可以檢查粘貼的URL是否與陣列中保存的任何URL匹配。你可以使用'''in_array()'''函數來做到這一點。 –

相關問題