2009-05-11 7 views
0

Je développe un cms.Comment puis-je récupérer le chemin d'accès au fichier que je télécharge?

les clients Table contiennent de nombreux champs et l'un d'entre eux est la légende de l'image.

Lorsque l'utilisateur télécharge un fichier (image), le fichier est stocké dans un dossier public.

Le champ de légende d'image récupère le nom final du fichier et le stocke dans la table.

Le problème est lorsque l'utilisateur veut mettre à jour les informations. Si l'utilisateur ne veut pas changer l'image, quand il clique sur "mise à jour", le champ de légende d'image est vide, ainsi le chemin vers l'image devient nul et maintenant il montre juste (aucune image).

Heres ce que ive essayé de le faire:

Le formulaire 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> 

Et maintenant, le code PHP upload (ive juste inséré le code que je voulais u montrer) :

// 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

Je sens que je dois manquer quelque chose, car il me semble que $ row ['nome_foto'] et $ row ['image_caption'] sont tous les deux le nom du fichier? – da5id

+0

oui! J'ai changé les noms ici pour que les gens comprennent, mais oubliez de changer dans le PHP. – dutraveller

Répondre

1

Je ne suis toujours pas sûr de comprendre, mais ne pouvez-vous pas simplement passer le nom du fichier d'origine comme champ masqué? Ensuite, si rien n'est téléchargé, utilisez-le.

EDIT: Après avoir vu votre commentaire juste, vous avez déjà le nom du fichier d'origine, afin de changer votre PHP:

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

devrait fonctionner, non?

Et, bien sûr, si vous allez faire quelque chose comme ça, alors vous devez effectuer une sorte de sanitization sur les variables affichées pour assurer qu'il n'y a pas de méchancetés ...

+0

Je pense que c'est quelque chose à voir avec ceci: if (array_key_exists ('update', $ _POST)) { // préparer les éléments attendus pour insertion dans la base de données foreach ($ _POST as $ key => $ value) { si (in_array ($ key, $ prévu)) {$ { $ key} = mysql_real_escape_string (valeur $); } } ... reste du code .. – dutraveller

+0

Il serait préférable de ne pas envoyer le chemin au client cependant, cela crée un peu de problèmes de sécurité inutiles –

+0

ok..fixed! Merci beaucoup!! – dutraveller

0

Est-ce que vous récupérez les informations de la base de données après que le formulaire a été envoyé? Je veux dire, $ row ['nome_foto'] contient-il réellement le chemin précédent? Edit: De toute façon, il serait préférable de ne pas simplement mettre à jour le champ de chemin dans la base de données si aucun nouveau chemin n'est fourni.

De plus, vous devez ajouter une forme de vérification au téléchargement pour vous assurer qu'il s'agit bien d'une image. En ce moment, je pourrais télécharger un script php ou un virus sur le serveur si je le voulais.

+0

Ups ... désolé. J'ai changé les noms juste pour que les gens comprennent mieux, et ont oublié de changer pour le PHP. Eh bien, en fait oui, il est supposé aller chercher l'information quand le formulaire est soumis (if (array_key_exists ('update', $ _POST))). Mais ça ne marche pas :( – dutraveller

0

Je ne sais pas si je comprends correctement mais je vais essayer, si vous remplissez le formulaire de mise à jour avec les données de la base de données - alors le champ de légende de l'image ne sera pas vide même si le gars a seulement changé son nom et a tout quitté.

Questions connexes