NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: vkládání obrázků a ukládání cesty do db

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Juklicekcz
Člen
Avatar
Juklicekcz:2.2.2018 15:52

Ahoj, mám tento kód, který by měl ukládat vložený soubor do složky a následně uložit jeho název do db, ale když ho spustím, tak mi vyhazuje chybu: Notice: Array to string conversion in C:\xampp\php\www\m­aturitniprace\ga­lerie1.php on line 21
mohly by někdo prosím poradit?

<?php

include "php.php";

$pripojeni = pripojeni();

if (isset($_POST["submit"])) {
    $imagesCount = count($_FILES['image']['name']);
    for ($i = 0; $i < $imagesCount; $i++) {
        if (move_uploaded_file($_FILES['image']['tmp_name'][$i], 'galerie/' . $_FILES['image']['name'][$i]))
            echo ('nahráno');
        else
            echo ('chyba');
    }
    $Nadpis = $_POST["Nadpis"];
    $Text   = $_POST["Text"];
    //$Id     = $_SESSION["Id"];
    $Obr    = $_POST["image"];
    $Dotaz  = $pripojeni->prepare("INSERT INTO `clanek`(`Id_uzivatele`,`Nadpis`, `Txt`, `Obr`) VALUES (?,?,?,?)");
    var_dump($Dotaz);
    $Dotaz->bind_param("isss", $Id, $Nadpis, $Text, $Obr);
    $Dotaz->execute();
}
?>
<form method=POST class=clanek>Nadpis:<input type=text name=Nadpis>
Text: <textarea name=Text cols=30 rows=10></textarea>
Obr: <input type=file multiple= size=26 name=image[]>
<input type=submit name=submit value=odeslat>
</form>
 
Odpovědět
2.2.2018 15:52
Avatar
Hando
Člen
Avatar
Odpovídá na Juklicekcz
Hando:2.2.2018 23:12

Ahoj.
Ta chyba je celkem všeříkající, ne?
Vypiš si přes var_dump() obsah proměnné $obr. :) Soubory máš pod $_FILES, pod $_POST[] bych je nečekal. :)
Pokud chceš ukládat více souborů a zapisovat si je do databáze, tak při každém průchodu polem ulož soubor a rovnou si ho zapiš do databáze. Budeš s tím mít ze začátku menší problémy, než když to budeš řešit odděleně.

 
Nahoru Odpovědět
2.2.2018 23:12
Avatar
Juklicekcz
Člen
Avatar
Odpovídá na Hando
Juklicekcz:3.2.2018 7:05

Ano, tudíž bych měl tedy asi do proměnné ládovat $_FILES['image_']['na­me'], ale pokud to tam vložím takto, tak se do db zapíše pouze "array" a pokud uložím pouze $_FILES['name'], tak to failne, jak z toho tedyvytáhnu pouze name?

 
Nahoru Odpovědět
3.2.2018 7:05
Avatar
Hando
Člen
Avatar
Odpovídá na Juklicekcz
Hando:4.2.2018 11:04

Juklíčku, vypsal sis obsah té proměnné? Sice jsem psal přes var_dump(), abys zjistil typ, ale další krok je tento:

<pre>
        <?= print_r($array); ?>
</pre>

Uvidíš, jakou strukturu mají data v tom tvém poli. Z toho už bys měl vytušit, co je potřeba udělat, resp. jaký název budou ty proměnné mít. $_FILES['name'] je blbost, jelikož nadřazené pole je $_FILES['image'], takže to nemůže takovou proměnnou vůbec najít. Co se týče pole upoadovaných souborů, tak není úplně od věci si to pole přetransformovat - více zde: Uploading multiple files

Zkus si upravit pole svých souborů tak, aby se jedno pole rovnalo informacím o jednom souboru, je s tím pohodlnější práce.

A jak už jsem psal výše, uprav si ten script, aby šel v tomto sledu, bude to jednodušší:
1.) je odesláno?
2.) spočítám soubory pro for, nebo rovnou foreach...
3.) for / foreach (postupně pro všechny soubory) {
- vezmu 1 soubor, přesunu kam potřebuji, uložím název do db;
}

 
Nahoru Odpovědět
4.2.2018 11:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.