2011-06-23 6 views
0

をアップロードし、PHPサーバーとSQL画像[OK]を

私はPHPの画像アップローダーを設定に関して前のポストの背面に挿入画像ページ(uploader.php)を構築しているが、いくつかの問題を抱えています......

コードは次のとおり

<?php 

$target = "images/test/"; 
$target = $target . basename($_FILES['photo']['name']); 

$title=$_POST['title']; 
$desc=$_POST['desc']; 
$pic=($_FILES['photo']['name']); 

mysql_connect("dbhost", "dbuser", "dbpass") or die(mysql_error()) ; 
mysql_select_db("dbname") or die(mysql_error()) ; 
mysql_query("INSERT INTO `test` VALUES ('$title', '$desc', '$pic')") ; 

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) 
{ 

echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
} 
else { 
echo "Sorry, there was a problem uploading your file."; 
} 
?> 

<form enctype="multipart/form-data" action="uploader.php" method="POST"> 
Title: <input type="text" name="title"><br> 
Description: <input type="text" name = "desc"><br> 
Photo: <input type="file" name="photo"><br> 
<input type="submit" value="Add"> 
</form> 

したがって、最初の問題は、情報がデータベースに入力されていないことである - ID(INT)、タイトル( - 表は、4つのフィールドを有していますvarchar)、desc(varchar)、およびphoto(varchar)です。 idフィールドが指定されていないためですか?これは単にテーブルの自動インクリメントプライマリキーです。

2番目の問題は、アップロードする画像に空白が含まれていることです。たとえば、"test image.jpg"をアップロードするときにstr_replace()を組み込んで"testimage.jpg"を作成したいとします。これをコードに挿入する場所を知っていますか?任意の助け再び

おかげで、

JD

答えて

1

明示的にあなたのINSERT文で列をリストしていない場合は、そうですあなたは含める必要があり、VALUES()でそれらのすべてを含める必要がありますidしかし

より良い、列をリストするようになります:

mysql_query("INSERT INTO `test` (title, `desc`, photo) VALUES ('$title', '$desc', '$pic')") ; 

注をその上記のバッククォートはです。これはMySQLの予約キーワードであり、引用符で囲まれていない限り構文エラーです。

また、SQLインジェクションに対して値をエスケープしてください。

$title = mysql_real_escape_string($_POST['title']); 
$desc = mysql_real_escape_string($_POST['desc']); 
$pic = (mysql_real_escape_string($_FILES['photo']['name'])); 

// And your space replacement 
$pic = str_replace(" ","", $pic); 

// Now that it's cleaned up, you can insert. 
mysql_query("INSERT INTO `test` (title, `desc`, photo) VALUES ('$title', '$desc', '$pic')") ; 
+0

HMM - I .....推奨されるように4行を更新し、str_replaceを含め、BUT 画像がアップロードされ(ただしspaces-を除去することなく、依然としてサーバにimage.jpgテスト)されて、 1つの行がデータベースに挿入されますが、id-allフィールド以外は空白です....!私のコードはこれらの変更を除いて上記と全く同じです – JD2011

+0

'$ _POST'の値が空ではないことは確かですか?値がそこにあることを確認する 'var_dump($ _ POST)'を行い、 'mysql_query()'に送る前にSQL文の文字列をエコーし​​てください。 –

+0

それは今働いています。上記のコードを使用して新しく始まったばかりで、イメージがサーバーに正しく配置され、詳細がデータベース表に正しく入力されました。 しかし何らかの理由で2行がテーブルに挿入されています(1つは空白、もう1つは詳細があります)。なぜこのようなことが起こるのか分かりません。感謝! – JD2011

関連する問題