2016-01-22 121 views
-1

當我在PHP代碼中的錯誤提交評論,問題是代碼4號線:PHP錯誤提交評論

php_network_getaddresses:的getaddrinfo失敗:請求的名稱 有效的,但沒有找到所請求類型的數據。

任何想法?

<?php 
if($_POST) 
{ 
    $con = mysql_connect('%', 'myuser', 'mypassword'); 

    if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("_mysite", $link); 

    $users_name = $_POST['name']; 
    $users_email = $_POST['email']; 
    $users_website = $_POST['website']; 
    $users_comment = $_POST['comment']; 

    $users_name = mysql_real_escape_string($users_name); 
    $users_email = mysql_real_escape_string($users_email); 
    $users_website = mysql_real_escape_string($users_website); 
    $users_comment = mysql_real_escape_string($users_comment); 

    $articleid = $_GET['id']; 
    if(! is_numeric($articleid)) 
    die('invalid article id'); 

    $query = " 
    INSERT INTO `_mysite`.`comments` (`id`, `name`, `email`, `website`, 
     `comment`, `timestamp`, `articleid`) VALUES (NULL, '$users_name', 
     '$users_email', '$users_website', '$users_comment', 
     CURRENT_TIMESTAMP, '$articleid');"; 

    mysql_query($query); 

    echo "<h2>Thank you for your Comment!</h2>"; 

    mysql_close($con); 
} 
?> 
+0

[您的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+1

請[停止使用' mysql_ *'functions](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[編寫]​​(http://en.wikipedia.org/ wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli.quickstart .prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

關於特定錯誤消息的含義尚不清楚? – PeeHaa

回答

0

%是MySQL的通配符,當你使用它的用戶的允許的主機,這意味着'any host',你的情況這可能應該是localhost。

與你的問題沒有關係,但如果你不知道它,你應該考慮離開mysql_功能deprecated,mysqli是推薦的替代品。

+0

你在「mysqli是推薦的替代品」中有一個輸入錯誤,你可能打算輸入PDO – PeeHaa

+0

意味着直接替換,因爲它幾乎是即插即用,我更喜歡PDO,儘管不用擔心 – Meroje

0

$link替換爲$con這一行mysql_select_db("_mysite", $link);。 這是我第一次看到任何服務器名稱爲%。我對此沒有太多的想法。但是,你可以用localhostport numberIP Address

<?php 
if($_POST) 
{ 
    $con = mysql_connect('localhost', 'myuser', 'mypassword'); 

    if (!$con) { 
    die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("_mysite", $con); 

    $users_name = mysql_real_escape_string($_POST['name']); 
    $users_email = mysql_real_escape_string($_POST['email']); 
    $users_website = mysql_real_escape_string($_POST['website']); 
    $users_comment = mysql_real_escape_string($_POST['comment']); 

    $articleid = $_GET['id']; 

    if(!is_numeric($articleid)) 
    die('invalid article id'); 

    $query = "INSERT INTO `_mysite`.`comments` (`id`, `name`, `email`, `website`,`comment`, `timestamp`, `articleid`) 
     VALUES (NULL, '$users_name','$users_email', '$users_website', '$users_comment',CURRENT_TIMESTAMP, '$articleid')"; 

    mysql_query($query); 

    echo "<h2>Thank you for your Comment!</h2>"; 

    mysql_close($con); 
} 
?> 

更換%請停止使用mysql*功能。這些擴展在PHP 7中已被刪除。瞭解有關PDOMySQLi的準備語句。

使用的mysqli

<?php 
if($_POST) 
{ 
    $con = mysqli_connect("localhost", "myuser", "mypassword", "_mysite"); 
    if (!$con) { 
    die('Could not connect: ' . mysqli_connect_error()); 
    } 

    $users_name = mysqli_real_escape_string($con, $_POST['name']); 
    $users_email = mysqli_real_escape_string($con, $_POST['email']); 
    $users_website = mysqli_real_escape_string($con, $_POST['website']); 
    $users_comment = mysqli_real_escape_string($con, $_POST['comment']); 

    $articleid = $_GET['id']; 

    if(!is_numeric($articleid)) 
    die('invalid article id'); 

    $query = "INSERT INTO `_mysite`.`comments` (`id`, `name`, `email`, `website`,`comment`, `timestamp`, `articleid`) 
     VALUES (NULL, '$users_name','$users_email', '$users_website', '$users_comment',CURRENT_TIMESTAMP, '$articleid')"; 

    mysqli_query($con,$query) 

    echo "<h2>Thank you for your Comment!</h2>"; 

    mysqli_close($con); 
} 
?> 

參考php_network_getaddresses: getaddrinfo failed:瞭解更多詳情。