2013-01-09 83 views
0

我正嘗試從我的網站使用PHP將一些信息寫入SQL數據庫。我可以訪問數據庫進行登錄,但是我無法從我的網站上寫入任何內容。此外,我無法查看任何連接錯誤。無法將數據寫入sql表中,

窗體頁:

<?php 
    $dbh = new PDO('mysql:host='.$hostname.';dbname='.$dbname, $user, $pass); 

if (!$dbh) { die('Could not connect: ' . mysql_error()); }else echo 'connected';echo '<br>'; 
if(isset($_COOKIE['username'])) 
?> 
     <div id="imagel"> 
     <img class="imagel" src="../images/logos/logo2.jpg" width="300" height="300" alt="studio table" /> 
     </div> 
     <div id="textr"> 

     <form name="tableofevents" method="post" action="adminhome.php"> 
     Name of Event(Maximum of 83 characters): <input type="text" name="noe"/> 
     <br> 
     Event Description (Maximum of 288 characters): <input type="text" name="eventdescription"/> 
     <br> 
     Date of Event: <input type="text" name="date"/> 
     <br> 
     Ticket Price: <input type="text" name="price"/> 
     <br> 
     <input type="submit" name="submit" text="submit"/> 
     </form> 

處理頁面:

<?php 

$hostname = 'localhost'; 
$user='******'; 
$pass='***********'; 
$dbname='sth420'; 
$handler = new PDO('mysql:host='.$hostname.';dbname='.$dbname,$user,$pass); 

$dbh = mysql_connect ($hostname.';dbname='.$dbname, $user, $pass); 

if (!$dbh) { die('Could not connect: ' . mysql_error()); } 
else echo 'connected';echo '<br>'; 


if(isset($_COOKIE['username'])) 
{ 
    $username=$_COOKIE['username']; 
    $password=$_COOKIE['password']; 

    $sql='SELECT * FROM Users WHERE ID=:id'; 
    $results = $handler->prepare($sql); 
    $results->execute([':id' => $username]); 
    $row = $results->fetch(); 
    if($row!=null) 



    { 
     $pword = $row['Password']; 
     if($pword == $password) 
     { 
      if(isset($_POST['submit'])) 
      { 
       $noe=$_POST['noe']; 
       $ed=$_POST['eventdescription']; 
       $date=$_POST['date']; 
       $price=$_POST['price']; 



        $sql='INSERT INTO ismievents (title, evtdesc, dandt, price) VALUES(0, :noe, :eventdescription, :date, :price)'; 
        mysql_error() 
        $results = $handler->prepare($sql); 
        $results->execute([':noe' => $noe, ':eventdescription' => $ed, ':date' => $date, ':price' => $price]); 
        $handler = null; 
        header('Location: events.html'); 


      } 
     } 
    } 
} 
if (!mysql_query($sql,$dbh)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($dbh); 
require_once('adminhome.html'); 

?> 
+0

爲什麼你在表單頁面上有數據庫連接?確保在流程中的每個步驟都包括錯誤處理(例如執行'$ handler',準備語句,執行語句等,並註銷錯誤,以便您可以確切地知道錯誤發生的位置。 –

回答

3

你混合PDO和mysql_connect()。這是無效的,因爲它們是不兼容的API。刪除所有對mysql_*()的引用,並僅使用您的PDO語句。您基本上已經複製了每個PDO語句,但撥打mysql_query()的號碼不正確,但您應該沒有任何mysql_connect(), mysql_query(), mysql_error(), mysql_fetch_*()

參考the manual on PDO prepared statements看到很多例子。

我在這裏看到列計數不匹配。您列出4列,但VALUES()列表包含5:

// Prepared statemetn looks ok... 
$sql='INSERT INTO ismievents (title, evtdesc, dandt, price) VALUES(0, :noe, :eventdescription, :date, :price)'; 
// But this is meaningless here... 
mysql_error() 

我也注意到,您使用的是PHP 5.4數組常量,如:

$results->execute([':noe' => $noe, ':eventdescription' => $ed, ':date' => $date, ':price' => $price]); 

希望你實際上是在PHP 5.4運行此代碼。

真的,你需要採取這種代碼回到繪圖板清除PDO和mysql_*()之間的不兼容它。之後,你將能夠縮小與之相關的其他問題。

這裏最後一個注意點是,確實是不適宜在$_COOKIE存儲密碼。登錄成功後,請將登錄狀態保存在$_SESSION

+0

是,使用PDO或mysql_ *(或mysqli- *)函數不是兩者兼而有之,我建議您使用PDO或mysqli_ *,因爲mysql_ *函數已被棄用,如果我是一位教師教授並讓一名學生轉入我非常譴責提交到失敗的分數 –

+0

嗨感謝您的答覆,我正在修復mysql/PDO錯誤,列和值之間的不匹配是,第一個值是汽車增加ID列,我還需要補充嗎? – user1964965

+0

不,你根本不需要包含自動增量id。 –