2016-02-04 162 views
1

我想插入數據到mysql數據庫,但所有的事情都沒有發生錯誤,但當我瀏覽數據,所以它沒有插入到數據庫在這裏我的代碼好心檢查出來。數據沒有插入到mysql數據庫在php

這裏我的html代碼:

<html> <head> 

<title>Insert Latest News</title> 

</head> 

<body> 

<form action="insert_post.php" method="POST" enctype="multipart/form-data"> 

<table align="center" border="10" width="800"> 

<tr> <td align="center" colspan="5" bgcolor="yellow"><h1>Insert Latest News</h1></td> </tr> 

<tr> <td>Post Title</td> <td><input type="text" name="title" size="30" /></td> </tr> 

<tr> <td>Post Author</td> <td><input type="text" name="author" /></td> </tr> 

<tr> <td>Post Image</td> <td><input type="file" name="image" /></td> </tr> 

<tr> <td>Post Content</td> <td><textarea name="content" cols="50" rows="20"></textarea></td> </tr> 

<tr> <td colspan="5" align="center"><input type="submit" name="submit" value="Publish" /></td> </tr> </table> 

</form> </body> </html> 

這裏是我的連接腳本

$connect = mysql_connect("localhost","root",""); 
$con = mysql_select_db("express", $connect); 
if ($con){ 
    echo ""; 
} else { 
    echo "databse not connected"; 
} 

這裏我的PHP代碼:

<?php require("connect.php"); 

if (isset($_POST['submit'])){ 

    $title = $_POST['title']; 
    $author = $_POST['author']; 
    $content = $_POST['content']; 
    $image_name = $_FILES['image']['name']; 
    $image_type = $_FILES['image']['type']; 
    $image_size = $_FILES['image']['size']; 
    $image_tmp = $_FILES['image']['tmp_name']; 
    $date = Date('y/m/d'); 

    if ($title=='' or $author=='' or $content=='' or $image_name==''){ 

     echo "<script>alert('Any feild is empty')</script>"; 
     exit(); 
    } 
    if ($image_type=='image/jpeg' or $image_type=='image/png' 
    or $image_type=='image/gif' or $image_type=='image/jpg'){ 

     echo ""; 
    } else { 
     echo "<script>alert('your image type is not allowed')</script>"; 
    } 
    if ($image_size<=1000000){ 
     move_uploaded_file ($image_tmp, "images/$image_name"); 
     exit(); 
    } else { 

     echo "<script>alert('Image is larger, not allowed by admin ')</script>"; 
    } 

    $query = "INSERT INTO news 
      (news_title, news_author, news_content, news_image, news_date) 
      values($title,$author, $content, $image_name, $date,)"; 

    if ($query){ 
     echo "<center><h1>Your News has Been Published</h1></center>"; 
    } 
} 
?> 
+0

額外的','有你'$ query' –

+1

'($標題, $ author,$ content,$ image_name,$ date,)'因爲幾個原因而失敗。 –

+0

你的db連接器在哪裏? –

回答

2

你忘了執行查詢: $result = mysql_query($query);

你忘了建立連接:

$connection = mysql_connect(DB_HOST, DB_USER , DB_PASS) 
or die("Could not connect to the database."); 
mysql_select_db(DB_NAME) or die ("Database could not be selected."); 

我 - 的方式 - 利用改爲1048576 1000000作爲最大圖像尺寸。

+0

我建立了數據庫連接並通過require函數添加它們,如下所示:require(「connect.php」);並在connect.php文件我編碼︰$ connect = mysql_connect(「localhost」,「root」,「」); $ con = mysql_select_db(「express」,$ connect); 如果($ CON){ 回聲 「」; } else { echo「databse not connected」; } –

+0

好的。但無論如何,你忘了執行它,然後用'mysql_query($ query)'或'mysqli_query($ query)' –

+0

@ J.Gower sidenote:'mysqli_query($ query)'MySQLi_ API需要將db連接傳遞給它,作爲第一個參數。 I.e .:'mysqli_query($ connection,$ query)'。然而,他們用來連接的API是完全未知的。 –

3

您的代碼基本上是可怕的:

1)易受SQL injection attacks
2)在所有
3號上傳驗證)簡單地假定所有操作

和您的主要問題的成功,忽略其它:

在您的查詢字符串由於你缺乏引號和逗號外的

4)語法錯誤::

$query = "INSERT INTO news 
(news_title, news_author, news_content, news_image, news_date) 
values('$title','$author', '$content', '$image_name', '$date',)"; 
     ^------^-^-------^--^--------^--^-----------^--^-----^---missing 
                  ^---wrong 

如果你已經完成任何類型的防禦性編程,例如檢查錯誤,你會被告知你的SQL語法問題...永遠不會EVER假設成功。總是假設失敗,檢查失敗,並將成功視爲令人驚喜的事情。

3

($title,$author, $content, $image_name, $date,)由於幾個原因而失敗。

字符串文字要求引用它們,並且您有一個尾隨逗號。

('$title','$author', '$content', '$image_name', '$date')

參考:

您還沒有查詢和您正在使用與連接MySQL的API是未知的。

  • connect.php潘多拉的盒子

諮詢:http://php.net/manual/en/mysqlinfo.api.choosing.php

查詢方法供你上閱讀起來,在查詢PHP MySQL數據庫的時候。

,並確保不要混用這些。

諮詢:Can I mix MySQL APIs in PHP?

添加error reporting到您的文件(S)的頂部,這將有助於找到錯誤。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

旁註:顯示錯誤應該只在分期完成,並且從不生產。

還檢查您的查詢錯誤。我無法提供鏈接,因爲我不知道您使用哪個MySQL連接。

  • mysql_?
  • mysqli_?
  • PDO?
  • 其他?

  • 只有你知道。

您現在的代碼對SQL injection開放。使用prepared statementsPDOprepared statements


腳註:

還要確保該文件夾你想要上傳到,有它設置正確的權限。

錯誤報告會告訴你是否有問題。


編輯:和最後的努力提供幫助。

我將在這裏假設MySQLi_連接。如果是MySQL_或PDO,則需要查看手冊。

  • 我相信我已經做得足夠幫助你解決這個問題。

旁註:我用$connection作爲連接變量。只有你知道你的connect.php文件中使用了什麼。

$query = mysqli_query($connection, "INSERT INTO news 
      (news_title, news_author, news_content, news_image, news_date) 
      values('$title','$author', '$content', '$image_name', '$date')"); 

if ($query){ 

    echo "<center><h1>Your News has Been Published</h1></center>"; 
} 

else{ 
    echo "Error: " . mysqli_error($connection); 
    } 

附加編輯:

看到這個評論您放置:

「我在這裏的connect.php文件代碼:$連接=的mysql_connect(」 localhost 「的」 根「;」「」); $ con = mysql_select_db(「express」,$ connect); if($ con){echo「」;} else {echo「databse not connected」;}「

您需要檢查這裏的真實錯誤,使用mysql_error()

然後,我上面的編輯將需要更改爲mysql_query(),如果需要連接,它需要是最後一個參數。

我建議你做的是切換到MySQLi_或PDO API。

這些鏈接已經在我的答案中提供。

MySQL_方法。

$query = mysql_query("INSERT INTO news 
      (news_title, news_author, news_content, news_image, news_date) 
      values('$title','$author', '$content', '$image_name', '$date')"); 

if ($query){ 

    echo "<center><h1>Your News has Been Published</h1></center>"; 
} 

else{ 
    echo "Error: " . mysql_error(); 
    } 

旁註:如果需要連接,請if ($query, $connection)

如果還是失敗,那麼你很可能需要切換到任何MySQLi_或PDO。

  • 祝你好運。
+0

但我試着在我的另一臺筆記本電腦上的相同代碼,以便數據正確插入到數據庫中,我想我的wamp服務器的任何問題我卸載,然後安裝它很多次,但問題是相同的我正在使用Windows 7 64位。 –

+0

@ZubairAli我在你的問題和我的回答下給你留下了一條評論。我們不知道您正在使用哪個MySQL API進行連接,或者您是否首次成功連接。正如我和其他人所說的,您沒有查詢數據庫,並且需要將連接傳遞給它。這是未知的。你需要閱讀我在答案中留下的鏈接,然後從那裏出發。沒有什麼我可以補充的,對不起。檢查錯誤,正如我在答覆中所述。 –

+0

@ZubairAli我已經對我的答案做了一個額外的編輯,試圖幫助你更多。重新加載並查看**編輯:並最終嘗試幫助。** - 這將是最後的嘗試,對不起。我真誠地祝你在這個好運。 *乾杯* –

1

對於一些人,誰喜歡我發現大部分的答案也沒治好的問題,嘗試

if (!mysqli_commit($link)) print("<p>Transaction commit failed</p>\n"); 

似乎有些MySQL的(或MariaDB的)發行可有自動提交關閉。關鍵在於,當我直接將查詢粘貼到mysql中時,我發現ID正在遞增,表中只有數據。

-1

你忘了在mysql中值引號插入

$query = "INSERT INTO news 
      (news_title, news_author, news_content, news_image, news_date) 
      values($title,$author, $content, $image_name, $date,)"; 

你必須用引號然後保存

$query = "INSERT INTO news 
      (news_title, news_author, news_content, news_image, news_date) 
      values('$title', '$author', '$content', '$image_name', '$date',)"; 
+0

你能格式化你的代碼嗎?你的答案是不可讀的。 – IanS