2016-08-16 16 views
-3

所以我做的圖像上傳表單和圖片上傳得很好,但在圖像加載後的SQL語句不工作。我想知道我該如何解決這個問題,這也是我第一次嘗試準備好的陳述,所以idk如果我的語法是正確的或什麼。sql語句不與圖像加工上傳

<?php 

// Check for errors 
if($_FILES['file_upload']['error'] > 0){ 
    die('An error ocurred when uploading.'); 
} 

if(!getimagesize($_FILES['file_upload']['tmp_name'])){ 
    die('Please ensure you are uploading an image.'); 
} 

// Check filetype 
if($_FILES['file_upload']['type'] != 'image/png'){ 
    die('Unsupported filetype uploaded.'); 
} 

// Check filesize 
if($_FILES['file_upload']['size'] > 500000){ 
    die('File uploaded exceeds maximum upload size.'); 
} 

//Rename File 
$temp = explode(".", $_FILES["file"]["name"]); 
$filename = round(microtime(true)) . '.' . "png"; 

// Upload file 
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], '../images/' . $filename)){ 
    die('Error uploading file - check destination is writeable.'); 
} 

// die('File uploaded successfully.'); 

session_start(); 

require_once('connection.php'); 

$sql = $conn->prepare("INSERT INTO items (poster, item_name, item_desc, item_type, item_price, link) VALUES (?, ?, ?, ?, ?, ?)"); 
$sql->bind_param($poster, $item_name, $item_desc, $item_type, $item_price, $link); 

$item_type = $_POST['item_type']; 
$item_name = $_POST['item_name']; 
$item_desc = $_POST['item_desc']; 
$item_price = $_POST['item_price']; 
$poster = $_SESSION['username']; 
$link = $filename; 

$poster = filter_var($item_type, FILTER_SANITIZE_STRING); 
$item_name = filter_var($item_type, FILTER_SANITIZE_STRING); 
$item_desc = filter_var($item_type, FILTER_SANITIZE_STRING); 
$item_type = filter_var($item_type, FILTER_SANITIZE_STRING); 
$item_price = filter_var($item_type, FILTER_SANITIZE_STRING); 
$link = filter_var($item_type, FILTER_SANITIZE_STRING); 

$sql->execute(); 

?> 
+1

你應該檢查手冊,'bind_param()'的第一個參數應該是帶有類型的字符串。 – jeroen

+0

[手冊應該是你的朋友(http://php.net/manual/en/mysqli-stmt.bind-param.php) – RiggsFolly

+0

我忘了,剛剛添加PARAM在和時間來檢驗。 –

回答

0

您錯過了定義bind_param中的數據類型。類似下面:

$sql->bind_param('ssssds',$poster, $item_name, $item_desc, $item_type, $item_price, $link); 
+0

你可能想要做一個快速計票有哥們 – RiggsFolly

+0

啊哈!從小屏幕很難看到 – jonju

+0

對我有最後一個 – RiggsFolly

0

請注意始終在第一線的第一個項目開始PHP會話的所有密碼

<?php 
session_start(); 

的頂部和設定值的類型

$sql->bind_param("ssssss", $poster, $item_name, $item_desc, $item_type, $item_price, $link); 

後執行所不要忘記關閉語句:)

1

首先你需要移動這條線在日爲了安全起見,腳本的頂部。

<?php 
session_start(); 

因爲你正在使用的bind_param變量還不存在,你必須做之前bind_param

的varibale創建如果變量存在這本來是精細設置新的vaues進入現有的變量按您最初的bind_param和數據分配的順序排列。

您也可以減少代碼了一下,過濾後的變量,而不是去通過一個新的標量集合。您還將$item_type過濾到所有變量中。哈哈複製/粘貼會讓你每一次。

$sql = $conn->prepare("INSERT INTO items (poster, item_name, item_desc, item_type, item_price, link) VALUES (?, ?, ?, ?, ?, ?)"); 


$poster  = filter_var($_SESSION['username'], FILTER_SANITIZE_STRING); 
$item_name = filter_var($_POST['item_name'], FILTER_SANITIZE_STRING); 
$item_desc = filter_var($_POST['item_desc'], FILTER_SANITIZE_STRING); 
$item_type = filter_var($_POST['item_type'], FILTER_SANITIZE_STRING); 
$item_price = filter_var($_POST['item_price'], FILTER_SANITIZE_NUMBER_FLOAT); 
$link  = filter_var($filename,    FILTER_SANITIZE_STRING); 

$sql->bind_param('ssssds',$poster, $item_name, $item_desc, $item_type, $item_price, $link);