1

私はウェブサイトで作業しており、私の仕事はユーザーから製品画像を取得し、その画像をデータベースに保存することです。私はmysqlデータベースを使用しています。htmlフォームの私のコードは次のとおりです:-

      <FORM action="testimage1.php" ENCTYPE="multipart/form-data" method="post">
              <div style="font:bold 10px arial,serif;" >Product Name*</div>
              <input type="text" name="myuserName" maxlength="50" /><br />
             <div style="font:bold 10px arial,serif;" >Upload a photo</div>
               <input name="uploadimage" type="file" /></br>
              <div style="font:bold 10px arial,serif;">Product Description:</div> 
              <input type="text" name="product" value=""></br>
              <input id="submit" type="submit" value="submit" /><br />
     </FORM>

testimage1.phpの私のコードは次のとおりです:-

           require_once("dbconnect.inc.php");                       
    $db_name="thinstrokes";                                     //for localhost databasename
     $tbl_name="product";
     $db_selected=mysql_select_db("$db_name")or die("cannot select DB");

    $myusername=$_POST['myusername']; 
    $mypassword=$_POST['product'];
    $filename=$_FILES['uploadimage']['tmp_name']; 
    $imgData = file_get_contents($filename);
    $size = getimagesize($filename);
    $sql = "INSERT INTO product
    (productname, image_id , image_type ,image, image_size, image_name,   productdesc)VALUES
    ('$myusername','11', '{$size['mime']}', '{$imgData}', '{$size[3]}', 
     '{$_FILES['userfile']['name']}','$productdesc')";
    $result=mysql_query($sql) or die("error in uploading/*");

次のようなエラーが発生します:-アップロードエラー/ *どうすれば修正できますか?

4

4 に答える 4

0

クエリに入れる前に、エスケープする必要があり$imgDataますmysql_real_escape_string

于 2012-05-31T08:27:15.653 に答える
0

束縛変数を使用する必要があります。まず最初に、 SQLインジェクション攻撃に対して広くオープンです。

誰かがのファイル名を作成して\';DROP product;アップロードしたとします...

そうは言っても、バイナリデータをクエリにインライン化しても、99%の確率で機能するわけではありません。

バインドされたパラメーターの場合、クエリは次のようになり、bind_parmを呼び出して各?にデータを添付します。

$sql = "INSERT INTO product (productname, image_id , image_type ,image, image_size, image_name, productdesc) VALUES (?,?,?,?,?,?,?)";
于 2012-05-31T08:28:43.020 に答える
0

まず、画像をMysqlに直接アップロードするべきではないと思います。代わりに、ディレクトリを使用して、そこにすべてを配置します。だからそれでこのようなことを試してみてください:

//target to the path of my files
$target_path = "uploads/product_images/";
if(!is_dir($target_path)) mkdir($target_path);
$uploadfile = $target_path . basename($_FILES['userfile']['name']);

//Move the uploaded file to $taget_path
(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile));

次に、以下を使用して、アップロードされたファイルにアクセスできます。

echo "<a href=" . $target_path . basename($row['userfile']) . ">
     {$row['userfile']}</a>";
于 2012-05-31T08:31:54.413 に答える
0

これを変更してみてください:

$sql = "INSERT INTO product
(productname, image_id , image_type ,image, image_size, image_name, productdesc)VALUES
('$myusername','11', '{$size['mime']}', '{$imgData}', '{$size[3]}', 
'{$_FILES['userfile']['name']}','$productdesc')";

これとともに:

$size_mime = mysql_real_escape_string($size['mime']);
$size3 = mysql_real_escape_string($size[3]);
$filename = mysql_real_escape_string($_FILES['userfile']['name']);
$sql = "INSERT INTO product
(productname, image_id , image_type ,image, image_size, image_name, productdesc) VALUES
('{$myusername}','11', '{$size_mime}', '{$imgData}', '{$size3}', 
'{$filename}','$productdesc')";

これを編集します:

$myusername=$_POST['myusername']; 
$mypassword=$_POST['product'];
$filename=$_FILES['uploadimage']['tmp_name'];

これとともに:

$myusername = mysql_real_escape_string($_POST['myusername']); 
$mypassword = mysql_real_escape_string($_POST['product']);
$filedata = mysql_real_escape_string($_FILES['uploadimage']['tmp_name']);

SQLインジェクションは絶対に避けてください!

于 2012-05-31T08:33:09.417 に答える