2016-08-16 8 views
-3

画像アップロードフォームを実行していて、画像アップロードがうまくいきますが、画像ロード後にSQL文が機​​能しません。私はこれを修正できる方法が不思議に思っていました。これは私の文法が正しいかどうか、準備された文をしようとするのです。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

このパラメータを追加してテストする時間を忘れました。 –

答えて

0

bind_paramでデータ型を定義していませんでした。以下のような何か:

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

あなたはそこにクイックカウントをしたいかもしれません – RiggsFolly

+0

ああ!小さな画面から見るのは難しいです。 – jonju

+0

私の最後のものがあります – RiggsFolly

0

に注意してください、常にすべてのコード

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

や後など

<?php 
session_start(); 

と最初の項目の値のセットタイプのトップとして、最初の行でPHPのセッションを開始実行閉じるステートメントについて忘れないでください:)

1

まず、この行をthで移動する必要がありますあなたのスクリプトのトップを安全にするだけです。

<?php 
session_start(); 

bind_paramで使用している変数がまだ存在していないので、変数はに新しいvauesを設定するために罰金だったでしょう存在していた場合、あなたはbind_param

前varibaleの作成を行う必要があります既存の変数は元々bind_paramの順序で割り当てられ、データが割り当てられています。

また、新しいスカラ変数のセットを調べるのではなく、コードを少し減らして、ポスト変数をフィルタすることもできます。また、すべての変数に$item_typeをフィルタリングしていました。 hahaコピー/ペーストは毎回あなたを得るでしょう。

関連する問題