Как сохранить имя файла в базе данных, с другой информацией при загрузке изображения на сервер с помощью PHP? - PullRequest
25 голосов
/ 16 января 2009

Привет! Я прочитал много форумов и веб-сайтов, на которых рассказывается, как загрузить изображение на сервер, и мне удалось это сделать, я могу загрузить файл на свой сервер, но сохранение имени файла работает на следующих Пример, который я нашел, и мне также нужно создать форму, которая позволяет вводить больше данных в базу данных. Я застрял с этим, как много сделал PHP раньше. Я подошел к концу, пытаясь безуспешно попробовать учебники на разных сайтах, может кто-нибудь, пожалуйста, помогите мне! Мне нужно сделать это для проекта, который я делаю.

Я в основном пытаюсь создать CMS, которая позволяет пользователям загружать фотографии участников группы и хранить информацию о них, чтобы они могли отображаться на веб-странице для всеобщего обозрения.


Мой стол выглядит так:

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      

Форма, которую я хочу, будет выглядеть так:

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

Пример, который загружает изображение на сервер и только, а именно:

<?

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

"; }

}

?>

И Форма примеров, которую я должен использовать, такова:

<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: файл изображений открыт для записи.

Ответы [ 6 ]

26 голосов
/ 29 января 2009

Вот ответ для тех из вас, кто выглядел так, как я делал по всему Интернету, пытаясь выяснить, как выполнить эту задачу. Загрузка фотографии на сервер с именем файла, хранящимся в базе данных mysql, и другими данными формы, которые вы хотите указать в своей базе данных. Пожалуйста, дайте мне знать, если это помогло.

Во-первых, вам нужна форма:

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

Затем этот код обрабатывает ваши данные из формы:

   <?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.";
}
?> 

Код отредактирован с www.about.com

3 голосов
/ 30 декабря 2012

У вас есть идентификатор для каждой фотографии, поэтому я предлагаю вам переименовать фотографию. Например, вы переименовываете его по дате

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

примечание: не забывайте расширение файла вашего файла, иначе вы можете сгенерировать случайную строку для фотографии, но я бы не советовал. Я также рекомендовал бы вам проверить расширение файла, прежде чем загружать его в свой каталог.

<?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
            }
?>

Надеюсь, это поможет.

2 голосов
/ 17 февраля 2010
<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>

сохранить как 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.";
}
?>

в приведенном выше коде одна маленькая ошибка, я исправил эту ошибку.

0 голосов
/ 20 мая 2010

Добавление следующего позволяет избежать проблем с кавычками в именах файлов, например

"freddy's pic.jpg"

, которые допустимы в некоторых операционных системах.

До:

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

После того, как:

$pic=(mysql_real_escape_string($_FILES['photo']['name']));
0 голосов
/ 16 января 2009

Ваша часть:

$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

";

Не имеет особого смысла, ваше соединение не должно называться $ result, но это проблема именования, а не кодирования.

В чем проблема кодирования, если ($ result), если вы скажете, что вы можете подключиться к базе данных, независимо от того, был ли запрос вставки неудачным или успешным, вы выведете «Изображение сохранено в базу данных».

Попробуйте добавить do

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

и измените if ($ result) на $ realresult

Я подозреваю, что ваш запрос не выполняется, возможно, у вас есть дополнительные столбцы или что-то в этом роде?

Попробуйте скопировать / вставить ваш запрос, заменив ". $ _ FILES ['filep'] ['name']." с помощью test и запустите его в браузере запросов и посмотрите, войдет ли он.

0 голосов
/ 16 января 2009

Если вы хотите ввести больше данных в форму, вы просто получаете доступ к отправленным данным через $ _POST.

Если у вас есть

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

вы получаете к нему доступ

$firstname = $_POST["firstname"];

Затем вы можете обновить строку запроса, чтобы прочитать

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

Примечание: Всегда фильтруйте и очищайте ваши данные.

...