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

Vkládání obrázků do databáze – PHP – Fórum – Programujte.comVkládání obrázků do databáze – PHP – Fórum – Programujte.com

 

Anonym
~ Anonymní uživatel
454 příspěvků
5. 5. 2018   #1
-
0
-

Ahoj mohl by mi někdo prosím poradit, jak vložit obrázky do SQL databáze? Který datový typ je nejvhodnější použít pro jpg obrázky a jaký dotaz použít?

Momentálně mám datový typ binary(255) a dotaz (je součástí celého php souboru):

Db::query('
        INSERT INTO uzivatele (jmeno, prijmeni, datum_narozeni, obrazek)
        VALUES ("Janaaaaaa",  "ffdhdhgf",  "1984-11-03", "1.jpg")

Ale bohužel mi to nefunguje. Děkuju za rady :)

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

#1 Anonym
Nejprve si ujasni, zda skutečně chceš do databáze ukládat obrázky, když v ukázce se snažíš uložit jen odkaz na obrázek. Pro tyto účely se běžně používá typ varchar(255).

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:89e8:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Anonym
~ Anonymní uživatel
454 příspěvků
5. 5. 2018   #3
-
0
-

#2 Kit
No chtěl bych tam vložit přímo obrázek, ale vůbec nevím jak na to :D

Nahlásit jako SPAM
IP: 109.105.39.–
Kit+15
Guru
5. 5. 2018   #4
-
0
-

#3 Anonym
Pokud nevíš, jak na to, tak do databáze obrázky neukládej. Je to docela opruz a užitek je sporný. Raději obrázek ulož do souborového systému a do databáze ulož jen link. Většina vývojářů to dělá přesně takhle.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:89e8:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Anonym
~ Anonymní uživatel
454 příspěvků
5. 5. 2018   #5
-
0
-

#4 Kit
No moje představa byla vytvořit "aktuality" o 3-4 zprávách, kde by vlastně každá zpráva měla svůj nadpis, autora, text a nějaký ten obrázek. Tak říkáš že ten obrázek vložit do databáze a pak jej vyvolat společně s ostatními údaji je blbost? :) Jak by si ty aktuality tedy ideálně vytvořil? :)

Nahlásit jako SPAM
IP: 109.105.39.–
Kit+15
Guru
5. 5. 2018   #6
-
0
-

#5 Anonym
Stejně se ten obrázek nevytahuje z databáze současně s textem, neboť prohlížeč pro každý obrázek posílá na server samostatný dotaz, byť v jednom navázaném spojení. Vytahování obrázků z databáze je zpravidla pomalejší, než když je máš uložené na disku serveru.

Teoreticky by mělo smysl ukládat ukládat do databáze jen velmi malé obrázky (stovky bajtů) a inlajnovat je do HTML. Ovšem tím vyřadíš z činnosti cache prohlížeče a musíš je natahovat pokaždé znovu, což zatěžuje linku. Pokud máš obrázky na disku, tak se kešují na různých místech přenosové trasy a celkově je stránka rychlejší.

Je docela zajímavé webovou grafiku inlajnovat do CSS. Takové CSS je sice o dost větší, ale pro celý web se natahuje pouze jednou, takže je to dost výhodné. Dělá to jen málokdo, je to poněkud pracné.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:89e8:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
5. 5. 2018   #7
-
0
-

#5 Anonym
Aktuality bych vytvořil tak, že obrázky uložím na disk serveru a do HTML dal jen odkazy na ně přes elementy <img src="obrazek.jpg">. Takhle to dělají skoro všichni.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:89e8:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Koblih
~ Anonymní uživatel
4 příspěvky
7. 5. 2018   #8
-
0
-

Ahoj, řeším podobný problém. Snažím se zobrazit obrázky z databáze, ale nejde mi to. Někde dělám chybu :D (Pokud je to blbý dotaz tak se omlouvám O:) jsem teprve začátečník a nevím si s tím rady)

Php kod:

	<body>

		<h1>Registrace uživatele</h1>
		
		<?php

require_once 'Db.php';
      Db::connect('127.0.0.1', 'fotogalerie', 'root', '');

$foto = Db::queryAll('
			SELECT *
			FROM fotogalerie
		');
   echo('<h2>Tabulka škola</h2><table border="1">');
		foreach ($foto as $s)
		{
			echo('<tr><td>' . htmlspecialchars($s['ID']));
			echo('</td><td>' . htmlspecialchars($s['foto']));
			echo('</td></tr>');
		}
		echo('</table>');                              
		?>
	</body>

Ukázka z databáze(doufám že se obrázky nahrajou :D):

Nahlásit jako SPAM
IP: 109.105.40.–
Kit+15
Guru
7. 5. 2018   #9
-
0
-

#8 Koblih
Stejně jako předchozí: Rozmysli si, zda chceš do databáze vložit obrázek nebo URL obrázku. Je v tom docela podstatný rozdíl.

Nahlásit jako SPAM
IP: 2a00:1028:83a4:25fa:b0cd:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Koblih
~ Anonymní uživatel
4 příspěvky
7. 5. 2018   #10
-
0
-

Ideální by bylo, kdyby šla do databáze napsat adresa z disku (tak jak to vlastně mám), ale nehodilo by mě to výstup tu adresu (F:\xampp\htdocs\PhpProject4\obrazky\A01), ale obrázek :)

Šlo by to nějak? Popřípadě jak? :)

Nahlásit jako SPAM
IP: 109.105.40.–
Koblih
~ Anonymní uživatel
4 příspěvky
7. 5. 2018   #11
-
0
-

Připojen obrázek.Už se mi povedlo nahrát textový soubor přesně tak jak chci:

   echo('<h2>Tabulka škola</h2><table border="1">');
		foreach ($foto as $s)
		{
			echo('<tr><td>' . htmlspecialchars($s['ID']));
			echo('</td><td>' . file_get_contents($s['foto']));
			echo('</td></tr>');
		};
                
echo('</table>');    

Ale pokud tam chci vložit obrázek, tak mi to nefunguje a hodí mi to tohle:

Nahlásit jako SPAM
IP: 109.105.40.–
gna
~ Anonymní uživatel
1891 příspěvků
7. 5. 2018   #12
-
+1
-
Zajímavé
Kit +

Na obrázky je tag IMG a data určuje jeho atribut SRC.

Takže v HTML budeš mít

<img src="kurvafix.jpg" />

Prohlížeč když to uvidí tak stáhne a zobrazí ten obrázek.

Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
4014 příspěvků
8. 5. 2018   #13
-
0
-

#11 Koblih
http://php.net/image
http://php.net/file
google = php file image

http://php.net/manual/en/function.imagejpeg.php

Verze1

--- obrazek.php?id=123 ---
$ImageData = nactes_z_db();
header("Content-type: image/jpeg");
//header("Content-Length: ".$ImageDataLength);
echo $ImageData;

--- stranka.php ---
<img src="obrazek.php?id=123">

verze 2

echo "<img src='data:image/jpeg;base64," . base64_encode( $ImageData )."'>";

Cili, lze ukladat obrazek i se strankou jako base64 text. ale velikost se zvysi v pomeru 256/64, cili asi 3x. U malych obrazku (do 5k) by to nevadilo. Obcas se base64 vyuziva v css pro ruzne ramecky.
Nicmene, moderni servery se ted snazi stranku posilat jako zip balicky z kese.Takze, uz neposilaji 100 malych souboru a kazdy ma 1k hlavicku pro prenos, ale treba jako 5 balicku. Takze, base64 je spis malou nevyhodou.

Nahlásit jako SPAM
IP: 193.84.205.–
Koblih
~ Anonymní uživatel
4 příspěvky
8. 5. 2018   #14
-
0
-

Zdravím. :) Nevím zda je to úplně ideální, každopádně mi to už funguje tak jen přidávám řešení pro ostatní (kdyby někdo potřeboval) :) A každopádně děkuji za rady

$foto = Db::queryAll('
			SELECT *
			FROM fotogalerie
		');

   echo('<h2>Tabulka škola</h2><table border="1">');
		foreach ($foto as $s)
		{
			echo('<tr><td>' . htmlspecialchars($s['ID']));
                        echo ('</td><td>' . '<img src="' . $s['foto'] . '" width="150" />');
    echo('</td></tr>'); 
Nahlásit jako SPAM
IP: 109.105.39.–
Kit+15
Guru
8. 5. 2018   #15
-
0
-

#14 Koblih
Takže v databázi nemáš obrázky, ale pouze jejich URL, což je správně.

Ještě pozor na uvozovky v názvech obrázků, s nimi to nebude fungovat. Je lepší použít htmlspecialchars() na tyto názvy místo na bezproblémové ID.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:fdd8:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 30 hostů

 

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