Vkládání obrázků a ukládání cesty do db error – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vkládání obrázků a ukládání cesty do db error – PHP – Fórum – Programujte.comVkládání obrázků a ukládání cesty do db error – PHP – Fórum – Programujte.com

 

Karel
~ Anonymní uživatel
156 příspěvků
2. 2. 2018   #1
-
0
-

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();
}
?>
Nahlásit jako SPAM
IP: 213.192.12.–
MilanL+1
Expert
2. 2. 2018   #2
-
0
-

#1 Karel
neodpovídá ti počet parametrů, dotaz očekává 4 hodnoty a v bindu jich posíláš 5

Nahlásit jako SPAM
IP: 185.112.167.–
Karel
~ Anonymní uživatel
156 příspěvků
2. 2. 2018   #3
-
0
-

#2 MilanL
ne, insertuji, i binduji 4 hodnoty, ty uvozovky definují datové typy jednotlivých proměnných, nikoliv samotnou proměnnou

Nahlásit jako SPAM
IP: 213.192.12.–
MilanL+1
Expert
2. 2. 2018   #4
-
0
-

#3 Karel

aha, koukal jsem na net co jsem viděl příklady tak v nich definujou ty proměnný až mezi bindem a execute, nemůže být problém tam?

navíc nemáš definovaný ID když je v poznámce  - nebo je nadefinovaný jinde?

Nahlásit jako SPAM
IP: 185.112.167.–
Kit+14
Guru
2. 2. 2018   #5
-
0
-

#1 Karel
Vadí mu, že v proměnné $Obr není string, ale pole.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
MilanL+1
Expert
2. 2. 2018   #6
-
0
-

#5 Kit

no vlastní obrázek do db přeci ukládat nechceš ne? tan jsi přeci chtěl mít tu cestu k souboru.

Nahlásit jako SPAM
IP: 185.112.167.–
Kit+14
Guru
2. 2. 2018   #7
-
0
-

#6 MilanL
Obrázek do DB skutečně ukládat nechci. Proč bych měl chtít?

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Karel
~ Anonymní uživatel
156 příspěvků
2. 2. 2018   #8
-
0
-

#7 Kit
Do db nechci uložit obrázek, pouze jeho název, samotný obrázek půjde do složky na disk

Nahlásit jako SPAM
IP: 213.192.12.–
Karel
~ Anonymní uživatel
156 příspěvků
2. 2. 2018   #9
-
0
-

#4 MilanL
Id je pouze v komentu, ale když je uvedený v bindu, tak by se mělo ukládat, jako null,

Nahlásit jako SPAM
IP: 213.192.12.–
Kit+14
Guru
2. 2. 2018   #10
-
0
-

#8 Karel
Tak tam do $Obr dej jen ten název obrázku.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Karel
~ Anonymní uživatel
156 příspěvků
2. 2. 2018   #11
-
0
-

#10 Kit
ale jak ho z toho inputu teda vztáhnu?

Nahlásit jako SPAM
IP: 213.192.12.–
MilanL+1
Expert
2. 2. 2018   #12
-
0
-

#6 MilanL
tak by snad do Obr měl přiřazovat "name" nebo "tmp_name"

Nahlásit jako SPAM
IP: 185.112.167.–
gna
~ Anonymní uživatel
1209 příspěvků
2. 2. 2018   #13
-
0
-

No, nějaké pole se konvertuje na string. Já z toho nepoznám kde a které, ale abys měl ten image v postu i files (a tam jako pole), tak bys ve formu musel mít toto:

něco name="image"
file name="image[]"

A netuším, jestli PHP takovou funkčnost zaručuje, nebo dokumentuje a jak to funguje v různých verzích neliší. Možná máš v tom postu stejná data jako ve files, čili pole. Každopádně je to prasárna.

Jinak se prostě podívej na všechny proměnné, co v nich máš.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Expert
2. 2. 2018   #14
-
0
-

Je otázka jaká je tam vlastně celková struktura, podle insertu jde o ukládání článku od autora včetně obrázků, napadlo mě co takhle do $Obr serializovat ty názvy s nějakým oddělovačem

Případná další řešení by měla  na nějaké úrovni rozlišit k jakému článku obrázky patří

- bud v úložišti galerie/uživatel/článek (ID nebo název - u názvu kontrola na duplicitu), pak do DB nemusí dávat nic cesta k obrázkům je daná uživatelem a článkem.

 - nebo přes doplňkovou tabulku v db na obrázky k článkům (ID-uživatele, ID nebo název článku, cesta/název obrázku) - pro každý obrázek.

Nahlásit jako SPAM
IP: 185.112.167.–
Karel
~ Anonymní uživatel
156 příspěvků
3. 2. 2018   #15
-
0
-

#14 MilanL
Ano, jedná se o vkládání článků, ale předpokládám, že cestu nepotřebuji nějak zesložiťovat, prostě budu fotky vkládat do složky galerie, která je v rootu, 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?

Nahlásit jako SPAM
IP: 37.48.54.–
MilanL+1
Expert
3. 2. 2018   #16
-
0
-

#15 Karel

jde o to že u článku můžeš mít víc obrázků viz smyčka for, podle mě bys ten seznam obrázků v tý smyčce musel skládat v tý podmínce s "Uloženo", to tam vytáhneš snad přes $_FILES['name'][$i] , kvůli těm více obrázkům k 1 článku je třeba to udělat složitější varianta je do $Obr naskládat do řetězce ty názvy s oddělovačem něco jako

$Obr = $Obr + /nebo &/ $_FILES['name'][$i] + oddělovač

další problém pokud to budeš všechno cpát na 1 místo bez nějakého rozlišení, tak ti může nastat duplicita názvů obrázků.

EDIT:

možná by to mělo být ještě s image

místo  $_FILES['name'][$i]   tak    $_FILES['image']['name'][$i]

je třeba kouknout co ty varianty dávaj
 

Nahlásit jako SPAM
IP: 185.112.167.–
Karel
~ Anonymní uživatel
156 příspěvků
3. 2. 2018   #17
-
0
-

#16 MilanL
u $_FILES['name'][$i] je opět chyba undefined index a $_FILES['image']['name'][$i] hází undefined offset 1 a vardump vrací null

Nahlásit jako SPAM
IP: 37.48.54.–
Kit+14
Guru
3. 2. 2018   #18
-
0
-

#17 Karel
To je tak těžké si udělat 

var_dump($_FILES);

a zjistit si z toho strukturu předávaných dat?

Pro průchod takovou strukturou se však nepoužívá for, ale foreach.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Karel
~ Anonymní uživatel
156 příspěvků
3. 2. 2018   #19
-
0
-

#18 Kit
dump na $FILES je:

array(1) { ["image_"]=> array(5) { ["name"]=> array(2) { [0]=> string(5) "1.jpg" [1]=> string(5) "2.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(24) "C:\xampp\tmp\php673D.tmp" [1]=> string(24) "C:\xampp\tmp\php674D.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(215934) [1]=> int(311373) } } },

Nahlásit jako SPAM
IP: 37.48.54.–
Kit+14
Guru
3. 2. 2018   #20
-
0
-

#19 Karel
Vidíš sám, že tam žádné $_FILES['name'][$i] není. Názvy souborů si tedy vypíšeš takto: 

foreach ($_FILES["image_"]["name"] as $name) {
    echo $name, PHP_EOL;
}

$_FILES má poněkud nešikovnou strukturu, proto se bez for zřejmě neobejdeme:

$images = $_FILES['image_'];
$count = count($images['name']);
for ($i = 0; $i < $count; $i++) {
    if (! move_uploaded_file($images['tmp_name'][$i], 'galerie/' . $images['name'][$i])) {
        echo 'chyba';
    }
}
Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
MilanL+1
Expert
3. 2. 2018   #21
-
0
-

#17 Karel
musíš s tím pracovat uvnitř smyčky, jak se dostaneš ze smyčky ven tak je $i mimo rozsah pole

 


Nahlásit jako SPAM
IP: 185.112.167.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 21 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý