web-dev-qa-db-fra.com

Comment stocker le nom de fichier dans la base de données, avec d'autres informations lors du téléchargement d'une image sur un serveur en utilisant PHP?

Bonjour, j'ai lu de nombreux forums et sites Web qui vous expliquent comment télécharger une image sur un serveur et j'ai réussi à le faire fonctionner. Je peux télécharger un fichier sur un serveur, mais l'enregistrement du nom de fichier fonctionne dans l'exemple suivant et j'ai également besoin de créer un formulaire permettant de saisir davantage de données dans la base de données. Je suis coincé avec cela car j'ai déjà beaucoup fait PHP auparavant. Je suis arrivé à la fin d'essayer différents didacticiels de sites Web sans grand succès si quelqu'un pouvait m'aider s'il vous plaît! J'en ai besoin pour un projet que je fais. 

J'essaie essentiellement de créer un CMS qui permette aux utilisateurs de télécharger une photo d'un membre du groupe et de stocker des informations à leur sujet afin de pouvoir les afficher sur une page Web à la vue du public. 


Ma table ressemble à ceci: 

Field              Type             Null    Default     
id                 int(10)          No                   
nameMember         varchar(25)      No                   
bandMember         text             No                   
photo              varchar(30)      No                   
aboutMember        text             No                   
otherBands         text             No      

Le formulaire que je veux ressemblera à ceci:

   <h1>Adding a new Band Member or Affiliate</h1>
      <form method="post" action="addMember.php" enctype="multipart/form-data">
       <p>
              Please Enter the Band Members Name.
            </p>
            <p>
              Band Member or Affiliates Name:
            </p>
            <input type="text" name="nameMember"/>
            <p>
              Please Enter the Band Members Position. Example:Drums.
            </p>
            <p>
              Member's Position:
            </p>
            <input type="text" name="bandMember"/>
            <p>
              Please Upload a Photo in gif or jpeg format. The file name should be named after the Members name. If the same file name is uploaded twice it will be overwritten!
            </p>
            <p>
              Photo:
            </p>
            <input type="file" name="filep" size=35 />
            <p>
              Please Enter any other information about the band member here.
            </p>
            <p>
              Other Member Information:
            </p>
<textarea rows="10" cols="35" name="aboutMember">
</textarea>
            <p>
              Please Enter any other Bands the Member has been in.
            </p>
            <p>
              Other Bands:
            </p>
            <input type="text" name="otherBands" size=30 />
            <br/>
            <br/>
            <input TYPE="submit" title="Add data to the Database" value="Add Member"/>
          </form>

L'exemple qui télécharge une image sur le serveur et uniquement, c'est ceci: 

<?

if ($_POST["action"] == "Load")
{
$folder = "images/";

move_uploaded_file($_FILES["filep"]["tmp_name"] , "$folder".$_FILES["filep"]["name"]);

echo "
<p align=center>File ".$_FILES["filep"]["name"]."loaded...";

$result = mysql_connect("localhost", "******", "*****") or die ("Could not save image name

Error: " . mysql_error());

mysql_select_db("project") or die("Could not select database");
mysql_query("INSERT into dbProfiles (photo) VALUES('".$_FILES['filep']['name']."')");
if($result) { echo "Image name saved into database

"; }

}

?>

Et le formulaire d’exemples que je dois utiliser est le suivant: 

<form action=addMember.php method=post enctype="multipart/form-data">
<table border="0" cellspacing="0" align=center cellpadding="3" bordercolor="#cccccc">
<tr>
<td>File:</td>
<td><input type="file" name="filep" size=45></td>
</tr>
<tr>
<td colspan=2><p align=center>
<input type=submit name=action value="Load">
</td>
</tr>
</table>
</form>

PS: Le fichier d'images est ouvert pour être écrit. 

25
James

Voici le réponse pour ceux d'entre vous qui ressemblent à ce que j'ai fait sur le Web et qui cherchent à savoir comment faire cette tâche. Télécharger une photo sur un serveur avec le nom de fichier stocké dans une base de données mysql et les autres données de formulaire que vous souhaitez dans votre base de données. S'il vous plaît laissez-moi savoir si cela a aidé. 

Tout d'abord le formulaire dont vous avez besoin: 

    <form method="post" action="addMember.php" enctype="multipart/form-data">
    <p>
              Please Enter the Band Members Name.
            </p>
            <p>
              Band Member or Affiliates Name:
            </p>
            <input type="text" name="nameMember"/>
            <p>
              Please Enter the Band Members Position. Example:Drums.
            </p>
            <p>
              Band Position:
            </p>
            <input type="text" name="bandMember"/>
            <p>
              Please Upload a Photo of the Member in gif or jpeg format. The file name should be named after the Members name. If the same file name is uploaded twice it will be overwritten! Maxium size of File is 35kb.
            </p>
            <p>
              Photo:
            </p>
            <input type="hidden" name="size" value="350000">
            <input type="file" name="photo"> 
            <p>
              Please Enter any other information about the band member here.
            </p>
            <p>
              Other Member Information:
            </p>
<textarea rows="10" cols="35" name="aboutMember">
</textarea>
            <p>
              Please Enter any other Bands the Member has been in.
            </p>
            <p>
              Other Bands:
            </p>
            <input type="text" name="otherBands" size=30 />
            <br/>
            <br/>
            <input TYPE="submit" name="upload" title="Add data to the Database" value="Add Member"/>
          </form>

Ensuite, ce code traite les données du formulaire: 

   <?php

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

// This gets all the other information from the form
$name=$_POST['nameMember'];
$bandMember=$_POST['bandMember'];
$pic=($_FILES['photo']['name']);
$about=$_POST['aboutMember'];
$bands=$_POST['otherBands'];


// Connects to your Database
mysqli_connect("yourhost", "username", "password") or die(mysqli_error()) ;
mysqli_select_db("dbName") or die(mysqli_error()) ;

// Writes the information to the database
mysqli_query("INSERT INTO tableName (nameMember,bandMember,photo,aboutMember,otherBands)
VALUES ('$name', '$bandMember', '$pic', '$about', '$bands')") ;

// 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, and your information has been added to the directory";
}
else {

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

Code édité de www.about.com

26
Cool Hand Luke

Vous avez un identifiant pour chaque photo, ma suggestion est donc de renommer la photo. Par exemple, vous le renommez par la date

<?php
 $date = getdate();
 $name .= $date[hours];
 $name .= $date[minutes];
 $name .= $date[seconds];
 $name .= $date[year];
 $name .= $date[mon];
 $name .= $date[mday];
?>

remarque: n'oubliez pas l'extension du fichier de votre fichier ou vous pouvez générer une chaîne aléatoire pour la photo, mais je ne le recommanderais pas. Je vous recommanderais également de vérifier l'extension du fichier avant de le télécharger dans votre répertoire.

<?php 
if ((($_FILES["photo"]["type"] == "image/jpeg")
            || ($_FILES["photo"]["type"] == "image/pjpg"))
            && ($_FILES["photo"]["size"] < 100000000))
            {
                move_uploaded_file($_FILES["photo"]["tmp_name"], $target.$name);

                if(mysql_query("your query"))
                {
                    //success handling
                }
                else 
                {
                    //failed handling
                }
            }
            else
            {
                //error handling
            }
?>

J'espère que cela pourrait aider.

3
<form method="post" action="addMember.php" enctype="multipart/form-data">
    <p>
              Please Enter the Band Members Name.
            </p>
            <p>
              Band Member or Affiliates Name:
            </p>
            <input type="text" name="nameMember"/>
            <p>
              Please Enter the Band Members Position. Example:Drums.
            </p>
            <p>
              Band Position:
            </p>
            <input type="text" name="bandMember"/>
            <p>
              Please Upload a Photo of the Member in gif or jpeg format. The file name should be named after the Members name. If the same file name is uploaded twice it will be overwritten! Maxium size of File is 35kb.
            </p>
            <p>
              Photo:
            </p>
            <input type="hidden" name="size" value="350000">
            <input type="file" name="photo"> 
            <p>
              Please Enter any other information about the band member here.
            </p>
            <p>
              Other Member Information:
            </p>
<textarea rows="10" cols="35" name="aboutMember">
</textarea>
            <p>
              Please Enter any other Bands the Member has been in.
            </p>
            <p>
              Other Bands:
            </p>
            <input type="text" name="otherBands" size=30 />
            <br/>
            <br/>
            <input TYPE="submit" name="upload" title="Add data to the Database" value="Add Member"/>
          </form>

enregistrez-le sous addMember.php

<?php

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

//This gets all the other information from the form
$name=$_POST['nameMember'];
$bandMember=$_POST['bandMember'];
$pic=($_FILES['photo']['name']);
$about=$_POST['aboutMember'];
$bands=$_POST['otherBands'];


// Connects to your Database
mysql_connect("yourhost", "username", "password") or die(mysql_error()) ;
mysql_select_db("dbName") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO tableName (nameMember,bandMember,photo,aboutMember,otherBands)
VALUES ('$name', '$bandMember', '$pic', '$about', '$bands')") ;

//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['photo']['name']). " has been uploaded, and your information has been added to the directory";
}
else {

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

dans le code ci-dessus, un petit bug, j'ai corrigé ce bug.

2
arjun

Ajouter les éléments suivants évite les problèmes de guillemets dans les noms de fichiers, par exemple.

"freddy's pic.jpg"

qui sont acceptables sur certains systèmes d'exploitation.

Avant:

$pic=($_FILES['photo']['name']);

Après:

$pic=(mysql_real_escape_string($_FILES['photo']['name']));
0
pog

Si vous souhaitez entrer plus de données dans le formulaire, vous devez simplement accéder aux données soumises via $ _POST. 

Si tu as 

<input type="text" name="firstname" />

vous y accédez avec 

$firstname = $_POST["firstname"];

Vous pouvez ensuite mettre à jour votre ligne de requête pour lire

mysql_query("INSERT INTO dbProfiles (photo,firstname)
             VALUES('{$filename}','{$firstname}')");

Remarque: Filtrez et désinfectez toujours vos données.

0
Sampson

Votre part:

$result = mysql_connect("localhost", "******", "*****") or die ("Could not save image name

Error: " . mysql_error());

mysql_select_db("project") or die("Could not select database");
mysql_query("INSERT into dbProfiles (photo) VALUES('".$_FILES['filep']['name']."')");
if($result) { echo "Image name saved into database

";

Cela n'a pas beaucoup de sens, votre connexion ne devrait pas être nommée $ result mais c'est un problème de nommage et non de codage.

Ce qui est un problème de codage, c'est si ($ result), si vous parvenez à vous connecter à la base de données, que la requête d'insertion ait échoué ou ait abouti, vous obtenez "Image enregistrée dans la base de données".

Essayez d'ajouter do 

$realresult = mysql_query("INSERT into dbProfiles (photo) VALUES('".$_FILES['filep']['name']."')");

et changez le if ($ result) en $ realresult

Je soupçonne que votre requête échoue, vous avez peut-être des colonnes supplémentaires ou quelque chose?

Essayez de copier/coller votre requête en remplaçant "". $ _ FILES ["filep"] ["nom"]. " avec test et l'exécuter dans votre navigateur de requête et voir si elle va dans.

0
savageguy