Page 1 sur 1

Ecrire le chemin d'un fichier dans la base de donnée ?

Posté : 07 janv. 2006, 10:50
par alaingpl
Bonjour à tous,

Cela fais peu de temps que je m'intéresse au php et beaucoup de chose m'échappe encore.

Je réussi à uploader un fichier (image ou photo) dans un répertoire mais ce que je souhaite c'est quand il est uploader que le chemin de ce même fichier s'écrive automatiquement dans un champs de ma base pour que la photo puisse s'afficher à un endroit précis sur mon site.

Quel est le script car là je bloque ?
Où dois - je le placer ? dans mon formulaire ou dans la page admin qui gère l'envoi.

Merci de m'aider car là j'ai vraiment du mal à saisir toutes les subtilités du php.

Posté : 07 janv. 2006, 11:03
par Cyrano
J'ai des raisons de croire que tu connais ce chemin puisque tu arrives à le déterminer précisément lors de l'upload du fichier. Tout ce qu'il te reste à faire, c'est enregistrer ce même chemin en relatif dans un des champs de la table appropriée de ta base de données.

Fais ça dans le même script que celui servant à l'upload en ajoutant les lignes avec la requête SQL et son exécution.

Posté : 07 janv. 2006, 15:20
par alaingpl
Je pense avoir compris ce que tu m'expliques mais il me reste un petit souci :

Le chemin du fichier uploadé ne s'écrit pas dans la base. l'Id s'incrémente bien et le nombre de requête est juste.



mon formulaire est :
  <td width="336" valign="top" > 
	  <form method="POST" action="adminph.php" enctype="multipart/form-data">
	  <!-- Limiter la taille des fichiers à 500Ko -->
	  <input type="hidden" name="MAX_FILE_SIZE" value="500000" /> 
	  <fieldset><legend>Envoi de fichiers</legend><!-- champs d'envoi de fichier, de type file -->
	  <input type="file" name="photo" /></p>
	   <p><input type="submit" name="envoi" value="Envoyer" />
	  </p></legend></fieldset></form> 
les infos :

ma table est : imag
mes champs sont : id, url
ma page adminph.php est : et c'est là que ça ne vas pas !!
1er: est ce que la réception du nom du fichier et de son chemin est correct ?
2ème: Est - ce que le script pour écrire dans le champ url est correct ?
<BODY><?php 
// je réceptionne le formulaire et indique le répertoire de destination//
if(isset($_FILES['photo'])){  $dest_dossier = 'imag/';  
// il est copié du temporaire vers mon répertoire//
 $dest_fichier = basename($_FILES['photo']['name']); 
  move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
  }
 ?>
 <?php
 require("config.php");
	$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
	@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
//je réceptionne le nom du fichier et son chemin//
if(isset($_FILES['photo']['name']))      $FILES=$_POST['url'];

else      $_FILES="";

{
// je l'écris dans le champ url//
	
	$sql = "INSERT INTO imag(id,url) VALUES('','$imag')";
	
	mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
}	
	mysql_query("SELECT * FROM $url");
  
echo'<br><br><center><a href="index2.php">Revenir au site pour vérifier les modifications</a></center>';
 
?> 
</body>
Je précise que l'image s'upload bien.

Merci de m'aider

Posté : 07 janv. 2006, 15:29
par Cyrano
Ben regarde : dans ton code, tu as cette ligne:
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
Tu sais donc où va ce fichier.

Maintenat, il te reste à ajouter cette valeur avec celles que tu ajoutes dans ta base de données : donc il te faut un champ de plus, par exemple "chemin_fichier". Ta requête devient donc:
$sql = "INSERT INTO imag(url, chemin_fichier) VALUES('". $imag ."', '". $dest_dossier . $dest_fichier ."')";
Et c'est tout. Note que j'ai enlevé la colonne "id" qui ne sert à rien puisque tu n'envoies pas de valeur, et donc j'ai également enlevé les apostrophes vides dans la liste des valeurs.

MAIS, tu as des accolades orphelines dans ton code : en remettant une indentation propre, ça donne ça, regarde la partie insertion et les commentaires :
<BODY><?php
// je réceptionne le formulaire et indique le répertoire de destination//
if(isset($_FILES['photo']))
{
    $dest_dossier = 'imag/';
    // il est copié du temporaire vers mon répertoire//
    $dest_fichier = basename($_FILES['photo']['name']);
    move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
}
?>
<?php
require("config.php");
$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
//je réceptionne le nom du fichier et son chemin//
if(isset($_FILES['photo']['name']))
{
    $FILES = $_POST['url'];
}
else
{
    $_FILES="";
}

{ // <=== c'est quoi cette accolade ??
    // je l'écris dans le champ url//

    $sql = "INSERT INTO imag(url, chemin_fichier) VALUES('". $imag ."', '". $dest_dossier . $dest_fichier ."')";

    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
} // <=== c'est quoi cette accolade ??
mysql_query("SELECT * FROM $url");

echo'<br><br><center><a href="index2.php">Revenir au site pour vérifier les modifications</a></center>';
?>
</body>

Posté : 07 janv. 2006, 16:38
par alaingpl
Super, ça fonctionne très bien. Je te remercie beaucoup.

Un débutant en php.

Alain