2015-12-05 77 views
0

我一直試圖讓這個工作近一個星期,我不知道爲什麼它不起作用。我有另一個頁面非常相似,它沒有問題。我在這裏錯過簡單的東西嗎?它連接到數據庫,但沒有插入數據。我檢查了3次sql語法並使用了一個在線檢查器,對我來說一切都很正常。PHP:插入到sql

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Authorizing Login</title> 
</head> 
<body> 
<?php 
    session_start(); 
    $username = $_SESSION["username"]; 
    echo "'$username'"; 
    $address = $_POST["address"]; 
    $city = $_POST["city"]; 
    $state = $_POST["state"]; 
    $ccno = $_POST["CCNo"]; 
    $ccexpm = $_POST["CCexpM"]; 
    $ccexpy = $_POST["CCexpY"]; 
    $query = "INSERT INTO Users (address,city,state,ccno,ccexpm,ccexpy) VALUES (?,?,?,?,?,?) WHERE username=$username"; 
    echo "$query"; 
    connectdb(); 
    $stmt = $mysqli->prepare($query); 
    $stmt->bind_param("ssssss", $address,$city,$state,$ccno,$ccexpm,$ccexpy); 
    $stmt->execute(); 
?> 

<?php 


function getDbParms() 
{ 

    $trimmed = file('parms/dbparms.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
    $key = array(); 
    $vals = array(); 
    foreach($trimmed as $line) 
    { 
     $pairs = explode("=",$line); 
     $key[]=$pairs[0]; 
     $vals[]=$pairs[1]; 
    } 

    $mypairs = array_combine($key,$vals); 

    $myDbparms = new DBparmsClass($mypairs['username'],$mypairs['password'], 
        $mypairs['host'],$mypairs['db']); 
    return $myDbparms;  
} 

function connectdb() 
{ 
    $mydbparms = getDbParms(); 
    $mysqli = new mysqli($mydbparms->getHost,$mydbparms->getUsername(), 
        $mydbparms->getPassword(),$mydbparms->getDb()); 

    if($mysqli->connect_error) 
    { 
     die('Connect Error (' . $mysqli->connect_errno . ')' . $mysqli->connect_error); 
    } 
    else 
    { 
     echo"Connected"; 
    } 

    return $mysqli; 

} 

class DBparmsClass 
{ 
    private $username=""; 
    private $password="";  
    private $host="";  
    private $db=""; 

    // Constructor  
    public function __construct($myusername,$mypassword,$myhost,$mydb)  
    {  
     $this->username = $myusername;   
     $this->password = $mypassword;  
     $this->host = $myhost;  
     $this->db = $mydb;  
    } 

    // Get methods  
    public function getUsername()  
    {  
     return $this->username;  
    } 

    public function getPassword()  
    {  
     return $this->password;  
    }  
    public function getHost()  
    {  
     return $this->host;  
    }  
    public function getDb()  
    {  
     return $this->db;  
    }  

    // Set methods  
    public function setUsername ($myusername)  
    {  
     $this->username = $myusername;   
    }  
    public function setPassword ($mypassword)  
    {  
     $this->password = $mypassword;   
    }  
    public function setHost ($myhost)  
    {  
     $this->host = $myhost;   
    }  
    public function setDb ($mydb)  
    {  
     $this->db = $mydb;   
    }    
} 


?> 


</body> 
</html> 
+1

你需要設置'session_start'之前的任何內容發送到瀏覽器 – RamRaider

+1

頭之前可能輸出。在打開PHP標記 (例如'<?php error_reporting(E_ALL);)後立即在文件頂部添加錯誤報告。 ini_set('display_errors',1);'然後你的代碼的其餘部分,看看它是否產生任何東西, 以及'或die(mysqli_error($ mysqli))'到'mysqli_query()'。 –

+0

也INSERT沒有WHERE子句,不是那樣。很可能你想要使用UPDATE。 http://dev.mysql.com/doc/en/insert.html --- http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html ---檢查錯誤http://php.net/manual/en/mysqli.error.php –

回答

1

首先,您可能會在其當前位置的標題爲session_start();之前輸出。

諮詢:

任何輸出之前所說的那樣。

<?php 
session_start(); 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
?> 
<!DOCTYPE html> 
... rest of your code. 

然後,INSERT沒有WHERE子句,不管怎麼樣。

  • 你可能想使用UPDATE。

參考文獻:

然後,你需要引用您的用戶名變量,因爲它是一個字符串。

WHERE username = '$username'"; 

但是,這仍然讓你開放SQL注入,所以參數化也。

WHERE username = ?併爲其添加綁定。

測試時,一定要檢查你的查詢錯誤: