2014-09-26 135 views
0

當我運行這些腳本時,MyPHP數據庫中沒有任何記錄顯示。我無法使用HTML表單和PHP將記錄插入到數據庫中

我運行: APACHE 2.4.7 MYSQL 5.6.15 PHP 5.5.8

首先HTML代碼...

<html> 

<center> 
    <font face="Helvetica"> 

<u><b>Matthew Gieger's Guestbook</b></u> 

<form action="link.php" method="post"/> 
<p>Name: </p> 
<input type="text" name="Name" required/> 
<p>Email: </p> 
<input type="email" name="Email" required /> 
<p>Message: </p> 
<p><textarea rows="4" cols="50" name="Message"> </textarea></p> 
<input type="submit" value="Submit" /> 
<input type="reset" value="Reset" /> 
</form> 
</center> 
</html> 

而且PHP腳本。這是我認爲問題所在的地方...

<?php 

$username='root'; 
$password=''; 
$database='guestbook'; 

$name= $_POST['Name']; 
$email= $_POST['Email']; 
$message= $_POST['Message']; 

new mysqli('localhost',$username,$password,$database) or die("could not connect to localhost"); 

echo"connected"; 

mysqli:"insert into contacts (Name,Email,Message,Timestamp) values ($name,$email,$message,date())"; 

?> 

我在運行代碼時沒有收到任何錯誤。我只是得到預期的 「連接」

+0

嘗試通過if條件進行調試。 – 2014-09-26 21:53:54

回答

1

您沒有任何地方定義的mysqli對象。而且你沒有在任何地方使用mysqli_query()

Here are the docs to mysqli.

嘗試是這樣的:

$mysqli = new mysqli('localhost', $username, $password, $database); 

/* check connection */ 
if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

$mysqli->query("INSERT INTO `contacts`(`Name`, `Email`, `Message`, `Timestamp`) VALUES ('". $name ."', '". $email ."', '". $message ."', '". $timestamp ."')"); 
+0

這樣做!非常感謝!對不起,我不能投票..我沒有足夠的聲譽。 – meichthys 2014-09-26 22:08:41

+0

@MattG看看Schlaus的答案,以防止安全問題(SQL注入)。 – Bono 2014-09-26 22:13:29

+0

我仍然有問題添加第二個記錄到數據庫。它看起來不會超過1條記錄。有什麼想法? – meichthys 2014-09-26 22:23:42

0

最有可能是格式問題,嘗試這樣的:

<?php 
$username='root'; 
$password=''; 
$database='guestbook'; 

$name= $_POST['Name']; 
$email= $_POST['Email']; 
$message= $_POST['Message']; 
$db = new mysqli('localhost',$username,$password,$database) or die("could not connect to localhost"); 

if($db->connect_errno > 0){ 
die('Unable to connect to database [' . $db->connect_error . ']'); 
} 
$currentDate=date(); 
$sql = "insert into contacts (Name,Email,Message,Timestamp) values ($name,$email,$message,$currentDate)"; 

if(!$result = $db->query($sql)){ 
die('There was an error running the query [' . $db->error . ']'); 
} 

?> 
+0

它返回了一些錯誤,但你說得對,我需要mysqli。我想我需要刷牙! – meichthys 2014-09-26 22:09:55

1

你沒有正確實例化的mysqli類。您需要將對象實例保存到一個變量:

$mysqli = new mysqli('localhost',$username,$password,$database); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

還有代碼中的嚴重的安全問題,因爲你不逃避你的輸入變量。最好的解決方案是研究PDO:http://php.net/manual/en/pdo.construct.php和參數綁定。

如果你真的想與mysqli的做到這一點,你應該先用mysqli_real_escape_string在您所有的輸入變量:

$name = mysqli_real_escape_string($mysqli, $_POST['Name']); 
$email = mysqli_real_escape_string($mysqli, $_POST['Email']); 
$message = mysqli_real_escape_string($mysqli, $_POST['Message']); 

然後正常運行查詢:

$mysqli->query("insert into contacts (Name,Email,Message,Timestamp) values ('$name','$email','$message',".date().")"; 

如果你不」 t逃避用戶輸入,使用簡單的SQL injection就可以輕鬆破解數據庫。

+0

+1爲注射漏洞,忘了提及我自己。 – Bono 2014-09-26 22:12:52

+0

感謝您的領導!這只是一個課程項目,但這絕對是很好的知道! – meichthys 2014-09-26 22:22:31

相關問題