2009-05-11 10 views
0

imはCMSを開発しています。アップロードしたファイルのパスをどのように取得できますか?

テーブルクライアントには多くのフィールドがあり、そのうちの1つは画像キャプションです。

ユーザーがファイル(イメージ)をアップロードすると、ファイルはパブリックフォルダに格納されます。

イメージのキャプションフィールドは、ファイルの最終的な名前を取得し、テーブルに格納します。

問題は、ユーザーが情報を更新したいときです。ユーザーが画像を変更したくない場合、「更新」をクリックすると、画像キャプションフィールドが空になるので、画像へのパスはnullになり、今度は(画像なし)表示されます。

アイブがやろうとして何をHERES

HTMLフォーム:

<p> 
     <label for="image_caption">Image Caption:</label> 
    <input name="image_caption" id="image_caption" type="text" class="formbox" size="60" disabled="disabled" value="<?php echo htmlentities($row['image_caption']); ?>" /> 
    </p>                      
    <p> 
     <label for="image">Insert image:</label> 
     <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_FILE_SIZE; ?>" /> 
     <input type="file" name="image" id="foto" value="<?php echo htmlentities($row['image_caption']); ?>"/> 
    </p> 
    <p> 
     <?php 
     if($row['image_caption']!= ""){ 
     ?> 
      <img src="../images/clientes/<?php echo $row['image_caption'];?>" width="194" height="145" title="Imagem cliente" class="floatright"/> 
     <?php 
     }else{ 
     ?> 
      <img src="../images/sem_imagem.gif" width="194" height="145" title="Imagem não disponível" class="floatright"/><br />            
     <?php 
     } 
     ?> 
    </p>   
    <p> 
     <input type="submit" name="update" value="Update" /> 
     <input name="cliente_id" type="hidden" value="<?php echo $row['codigo']; ?>" /> 
    </p> 

そして今アップロードPHPコード(私はuのを見せたかっただけで挿入されたコードをアイブ) :

// This checks if the file input is empty, and if it is, insert the value from the table that was previously inserted 

    if(empty($_FILES['image']['name'])){ 
$image_caption = $row['image_caption']; 

}else{ 

$image = str_replace(' ', '_', $_FILES['image']['name']); 
// move the file to the upload folder and rename it 
move_uploaded_file($_FILES['image']['tmp_name'],UPLOAD_DIR.$foto); 
$image_caption = $image; 
} 
+0

$ row ['nome_foto']と$ row ['image_caption']の両方がファイルの名前であるように見えるので、私は何かが欠けているように感じますか? – da5id

+0

はい!私は人々の理解のためにここに名前を変更したが、PHPで変更することを忘れてしまった。 – dutraveller

答えて

1

私はまだ分かりませんが、元のファイルの名前を隠しフィールドとして渡すことはできませんか?その後、何もアップロードされていない場合は、それを使用します。

EDITは:いいえ、

if(empty($_FILES['image']['name'])){ 
    $image_caption = $_POST['image_caption']; 
}else{ 
    ....(etc) 

動作するはずです:ちょうど、すでにそうにあなたのPHPを変更し、元のファイルの名前を持っているあなたのコメントを見ましたか?

そして、あなたはそのようなことをやろうとしている場合はもちろん、あなたは何の意地の悪さはありません確実にするために掲載の変数にサニタイズのいくつかの種類を実行する必要があります...

+0

番号 if(array_key_exists( 'update'、$ _POST)){ //データベースに挿入するアイテムを準備する foreach($ _POST as $ key => $ value){ if(in_array($ key、$ expected)){ $ {$ key} = mysql_real_escape_string($ value); } } ...コードの残りの部分 – dutraveller

+0

クライアントにパスを送信しない方が良いでしょう。不必要​​なセキュリティ問題が発生します。 –

+0

ok ... fixed!どうもありがとう!! – dutraveller

0

フォームが送信された後に情報をフェッチしますか?つまり、$ row ['nome_foto']には実際に前のパスが含まれていますか?

編集:どちらの方法でも、新しいパスが指定されていない場合は、単にデータベースのパスフィールドを更新しないほうがよいでしょう。

また、あなたが画像になっていることを確認するために、何らかの形のチェックを追加する必要があります。今は、私が望むなら、PHPスクリプトやウイルスをサーバーにアップロードできます。

+0

アップス...ごめんなさい。 Iveは、人々のためだけに名前を変更し、PHPの変更を忘れてしまった。実際、フォームが送信されたときに情報を取得するはずです(if(array_key_exists( 'update'、$ _POST)))。しかし、それは動作しません:( – dutraveller

0

私は理解している場合わかりませんデータベースからのデータで更新フォームにデータを入力すると、正しく表示されます。画像キャプションフィールドは、その人が名前を変更してすべてを残したとしても空ではありません。

関連する問題