2

基本的に、バックエンドのユーザーがギャラリーの写真をアップロードできるようにするスクリプトを作成しました。スクリプトは、ファイルをサーバーにアップロードしてから、ファイル名と情報をデータベースに投稿することになっています。

ファイルは必ずサーバーにアップロードされますが、何らかの理由でデータベースに投稿されるのはときどきです。うまく動作することもありますが、10 回中 8 回はファイルがアップロードされます。スクリプトは次のとおりです。

<?php  

 //This is the directory where images will be saved  
 $target = "images/";  
 $target = $target . basename( $_FILES['photo']['name']);  

 //This gets all the other information from the form  
 $name=$_POST['name'];  
 $caption=$_POST['caption'];  
 $pic=($_FILES['photo']['name']);  
 $live=$_POST['live']; 

 //Connecting to the database 
 require_once('../Connections/tim.php');  


 //Writes the information to the database  
 mysql_query("INSERT INTO `gallery` VALUES ('$name', '$caption', '$pic', '$live')") ;  

 //Writes the photo to the server  
 if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))  
 {  

 //Tells you if its all ok  
 echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded successfully, press back to upload more";  
 }  
 else {  

 //Gives and error if its not  
 echo "Sorry, there was a problem uploading your file.";  
 }  
 ?>  
4

2 に答える 2

2

これはおそらく、SQL インジェクション ホールが原因です。たとえば、キャプション (または他の投稿されたフィールド) に が含まれて'いると、クエリが壊れます。

関数をダンプし、mysql_*PDO または mysqli を使用して準備済みステートメントに切り替える必要があります。そして、常にエラー処理を追加します。

于 2012-10-11T18:04:53.020 に答える
1

あなたは本当にSQLインジェクションで何かを読むべきであり、提案されたPDOまたはmysqlijeroenとして)を使用する必要があります。

しかし、あなたの状況でのデバッグはこれで行うことができます:

mysql_query("INSERT INTO `gallery` VALUES ('$name', '$caption', '$pic', '$live')") ;  
if( mysql_errno() != 0){
     // mysql error
     // note: message like this should never appear to user, should be only stored in log
     echo "Mysql error: " . htmlspecialchars( mysql_error());
     die();
}

また、データベース入力を少なくとも でエスケープする必要がありますmysql_real_escape_string()

于 2012-10-11T18:09:37.643 に答える