Autor Zpráva
omc003
Profil
Dobrý den,
zlehounka začínám s PHPkem a narazil jsem na jednu banalitu, která mě už nějakou chvilku trápí.
Potřebuji uložit url již nahraného souboru na webu do databáze (jako admin ručně přetáhnu kvantum obrázků do složky webu a pak potřebuji jednotlivé soubory přiřadit k jednotlivým řádkům databázové tabulky; obrázky poté budu na stránce zobrazovat pomocí url v db). Údaj o obrázku v db ukládám do varchar(50) not null.

Script:

$url_obr = "obrazky/slozka/".$_FILES["obrazek"]["name"];
$url_obr = addslashes($url_obr);                                        
dotaz("INSERT INTO tabulka SET obrazek = '$url_obr';");
                        

input:
<input type=\"file\" name=\"obrazek\" />

Do databáze se mi uloží pouze cesta "obrazky/slozka/", $_FILES to nějak nebere ve zřetel. Vše jinak funguje bez problémů až na ty obrázky. Zkoušel jsem i různé varianty řešení nalezené přes google. Byl bych rád za objasnění této blbůstky, která mi stále uniká.

Díky za reakce.
Honza
LaMMa
Profil
A tomu ukladaniu predchádza odoslanie formulára s obrázkom?
ShiraNai7
Profil
omc003:
a následující řádek vložený před volání dotaz() ti vypíše co?

var_dump($url_obr);

Pro vývoj si taky určitě zapni zobrazování všech chyb - error_reporting(E_ALL)


Jinak funkce addslashes() není dostatečná pro escapování hodnot pro SQL dotazy.. použij funkci, která je pro danou databázi určená (např. mysql_real_escape_string() pro mysql).
omc003
Profil
Pro upřesnění:

if(isset($_POST[odeslat])) {

               //definovani retezce chyba_vlozeni (nevyplneni formularu apod)

                if(!empty($chyba_vlozeni))  { 
                       //vypise error
                } else {
                                                
                        $url_obr = "obrazky/slozka/".$_FILES["obrazek"]["name"];
                        $url_obr = addslashes($url_obr);
                         
                        dotaz("INSERT INTO tabulka SET obrazek = '$url_obr';");
                        
                        header ("Location: index.php");
                }
        }

echo $chyba_vlozeni;

echo "
<form action=\"index.php\" method=\"post\">
  <fieldset>
    <label for=\"obrazek\">Obrázek:</label><br />
    <input type=\"file\" name=\"obrazek\" /><br />
  
    <label for=\"odeslat\"></label>
    <input type=\"submit\" name=\"odeslat\" value=\"Odeslat\" />
  </fieldset>
     
</form>";



var_dump($url_obr) vypise string(15) "obrazky/slozka/"

LaMMa: obrázek neodesílám. Je pro mě rychlejší zkopírovat vše ručně a pak jen pomocí formuláře zjistit dané URL.
LaMMa
Profil
obrázek neodesílám. Je pro mě rychlejší zkopírovat vše ručně a pak jen pomocí formuláře zjistit dané URL.
Neviem, či to chápem úplne správne, ale ak vo formulári neodosielaš súbor, potom logicky bude $_FILES["obrazek"]["name"] prázdny. Ak tam vkladáš len názov súboru do textového inputu tak sa k nemu dostaneš cez $_POST['obrazek']

edit: teraz som si všimol formulár, musíš mu nastaviť:
<form action=\"index.php\" method=\"post\" enctype=\"multipart/form-data\">
Ugo
Profil
ještě upřesnim, že pro odeslání souboru a tedy vyplnění pole $_FILES je potřeba dát formuláři patříčný enctype - enctype="multipart/form-data"
omc003
Profil
LaMMa:
Aha, šel jsem na to zbytečně složitě. $_POST['obrazek'] dělá přesně to, co potřebuju. Děkuji mnohokrát :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: