Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Импортиране на снимка в база данни, чрез php


Tomas07
 Сподели

Препоръчан отговор

Създадох форма, чрез html, css и php, в която се въвежда текст и може да се прикачи снимка. Проблемът ми е, че не разбирам от php, и не успявам да се справя с проблема. Искам, когато някой прикачи снимка, тя да се запазва в папка. Текста се визуализира в базата данни. Търсих и пробвах, различни варианти, но не успявам. Споделям кода и ще се радвам, ако някой помогне.

      <div class="container-form">
         <form action="upload.php" method="post" enctype="multipart/form-data">
            <div class="name">
               Имена:<br>
               <input type="text" name="name" value="" size="40"  />
            </div>
            <br>
            <div class="image">
               Прикачете ваша снимка! (максимален размер 20МБ)<br>
               <input type="file" name="image" id="image" size="40" accept="image/*"  />
            </div>
            <br>
            <div class="phone">
               Телефон:<br>
               <input type="tel" name="phone" value="" size="40"  />
            </div>
            <br>
            <div class="email">
               Имейл адрес:<br>
               <input type="email" name="email" value="" size="40"  />
            </div>
            <div class="submit">
               <input type="submit" name="submit" value="Изпращане" id="submit" />			
            </div>
         </form>
      </div>
<?php
// Connect to MyQSL
$link = mysqli_connect("localhost", "root", "", "my_form");

$link->query("SET NAMES 'UTF8'");

// Check our connection
if ($link === false)
{
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if file already exists
if (file_exists($target_file)) {
    echo "Съжаляваме, файлът вече съществува.";
    $uploadOk = 0;
}

// Check file size
if ($_FILES["image"]["size"] > 20000000) {
    echo "Съжалявамe, файлът ви е твърде голям.";
    $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" ) {
    echo "За съжаление са разрешени само файлове от тип изображение, JPG, JPEG или PNG.";
    $uploadOk = 0;
}

if(isset($_POST["submit"])) {
	
}

// Escape user inputs for security
$name = mysqli_real_escape_string($link, $_REQUEST['name']);
$image_name = mysqli_real_escape_string($link, $_REQUEST['image']);
$image = file_get_contents($image_name);
$phone = mysqli_real_escape_string($link, $_REQUEST['phone']);
$email = mysqli_real_escape_string($link, $_REQUEST['email']);

// Insert our data
$sql = "INSERT INTO form (name, image, phone, email) VALUES ('$name', '$image', '$phone', '$email')";
// Print response from MyQSL
if (mysqli_query($link, $sql))
{
    echo "<div class='echo-complete'> <div class='echo-text'> Формата беше приета успешно. Благодарим ви.</div></div><br>";
}
else
{
    echo "<div class='echo-error'> <div class='echo-text'> ГРЕШКА: Не може да се изпълни $sql.</div></div><br>" . mysqli_error($link);
}

// Close our connection
mysqli_close($link);
?>

Моля, не ми споделяйте линкове, от типа "тук е описано" и прочие. Не го разбирам толкова този php, но се налага да го използвам. 🙂

Линк към коментара
Сподели в други сайтове

Първо, заглавието на темата и кода казват различни неща. Искаш да качиш снимката директно в базата данни (mysql) или по разумният начин в базата данни да съхраняваш само името на файла и/или директорията, а самият файл да си е на сървъра? 

В началото взимаш правилно информация за качения файл и после в някакъв опит за валидация правиш това:

$_REQUEST['image']   - Може да направиш var_dump($_REQUEST); да видиш, че няма такова нещо... После може да разгледаш по същият начин $_FILES, променливата, която трябва да ползваш.

Набързо ще ти дам примери за двата начина спрямо твоя код, за да не чакаш отговор.

      1. Качване на файла в сървъра със запазване на информация за него в БД

Просто добави това и трябва да качи файла в папката images (ако я няма ще даде грешка).

$newFileName = $_FILES['image']['name'];
$dest_path = __DIR__ . "/images/" . $newFileName;
if(move_uploaded_file($_FILES["image"]["tmp_name"],$dest_path)){
  echo "Успешно.";
}

и по-долу вместо това:

$image_name = mysqli_real_escape_string($link, $_REQUEST['image']);

$image = file_get_contents($image_name);

слагаш това:

$image =  $newFileName;

или заместваш директно в sql. Това ще качи името на файла в базата данни.

От теб зависи да направиш валидация, че името на файла не е същото като на вече качен файл. Като цяла просто вземи разширението на файла и генерирай уникално име...Имам предвид и валидация на всичко друго, защото липсва.

     2. Ако искаш да буташ всичко в БД

$image_base64 = base64_encode(file_get_contents($_FILES['image']['tmp_name']) );
$image = 'data:image/'.$imageFileType.';base64,'.$image_base64;

Това по-горе ще конвертира снимката в base64 и ще запази всичко в променливата $image, съдържанието на която трябва да качиш в БД. 

Премахваш тея редове:

$image_name = mysqli_real_escape_string($link, $_REQUEST['image']);
$image = file_get_contents($image_name);

За да може после да качиш $image от по-горе.

👉 !!! Изисква много място и ще има проблеми с големи файлове (от лимита в php.ini). Колоната image където ще съхраняваш самата снимка, трябва да е най-малко от тип text, най-добре longtext.

И за да покажеш снимката:

Взимаш съдържанието на image в таблицата "form" и го слагаш в променлива, примерно $image_src:

<img src='<?php echo $image_src; ?>' >

Това е "тъпо", дано имаше предвид първия начин. Успех.

Линк към коментара
Сподели в други сайтове

Заглавието ми е неправилно, но както съм написал в публикацията искам да се качва в папка на сървъра.

След направените промени, снимката се качва на сървъра, но явно пропускам нещо, защото името на файла, не се изписва в базата данни. Може да са ми грешни параметрите на колоните в базата данни: image: BLOB; image_name: varchar(64) или не добавям нещо. 🤔

Линк към коментара
Сподели в други сайтове

Ами да... За какво е този BLOB като няма да качваш самата снимка в БД, нито кода е подходящ за BLOB...

Може да използваш image_name като замениш това:

$sql = "INSERT INTO form (name, image, phone, email) VALUES ('$name', '$image', '$phone', '$email')";

с това:

$sql = "INSERT INTO form (name, image_name, phone, email) VALUES ('$name', '$image', '$phone', '$email')";

Сега ако image не може да е празно ще има грешка...

 

 

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

 Сподели

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване