2012-05-28 50 views
0

我有一个网站,人们加入他们的网站在我的数据库,我已经做过类似的任何用户都可以添加只有一个相同的站点如 的条目;如果USER1补充说:http://site1.com则没有其他用户可以添加http://site1.com他们显示该网站已在DB,现在有些人做这件事情,他们让子域,http://subdomain.site1.com,那么他们可以添加这已经是在数据库中的主域的子域的UL号。现在我的问题是如何防止这种情况发生?使用PHP不要让另一个入口

我尝试:

.... 
     $check = mysql_query("SELECT * FROM domain WHERE url LIKE '%$suburl%'"); 
    if($check=="$url"){ 
echo"You cannot add a subdomain"; 

} 
?> 
+0

@Jordan加入吧:) –

+2

请停止与古MySQL扩展编写新的代码:它不再保持和社区已经开始了[弃用过程(http://news.php.net/php.internals/53799 )。相反,您应该使用改进的[MySQLi](http://php.net/mysqli)扩展或[PDO](http://php.net/pdo)抽象层。也不要将变量(尤其是那些来自用户的变量)放入SQL中,因为这会使您容易受到SQL注入的影响。您应该使用预准备语句,将变量作为参数传递给MySQL,而这些参数不会针对SQL进行评估。 – eggyal

+1

“mysql_query”函数的返回值是一个资源标识符;将它与'$ url'进行比较(为什么要引用它?)可能不是你想要的。也许你想要[?mysql_num_rows'](http://php.net/manual/en/function.mysql-num-rows.php)? – eggyal

回答

2

鉴于新的条目http://subdomain.site1.com,使用下面的函数来获取site1.com部分(我得到了它here),并把结果里面的LIKE '%%'

// Get the domain name from URL 
function get_domain($url) 
{ 
    $host = parse_url($url, PHP_URL_HOST); 
    if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $host, $regs)) { 
    return $regs['domain']; 
    } 
    return false; 
} 

$host = get_domain("http://subdomain.site1.com"); // site1.com 
$qry = mysql_query("SELECT * FROM domain WHERE url LIKE '%$host%' LIMIT 1"); 

if (mysql_num_rows($qry)) { 
    // Site already exist 
} 
+0

谢谢:) @eggyal感谢,它只能如果请求是从单一的形式,也有一个文本区域的形式,用户可以从中添加多数量的URL它不是在那里工作的。 。 有任何想法吗? –

相关问题