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

Eléphant du PHP | 271 Messages

07 janv. 2006, 10:50

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.
Patience et obstination sont des qualités !

Mammouth du PHP | 19672 Messages

07 janv. 2006, 11:03

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 271 Messages

07 janv. 2006, 15:20

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
Patience et obstination sont des qualités !

Mammouth du PHP | 19672 Messages

07 janv. 2006, 15:29

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 271 Messages

07 janv. 2006, 16:38

Super, ça fonctionne très bien. Je te remercie beaucoup.

Un débutant en php.

Alain
Patience et obstination sont des qualités !