Autor | Zpráva | ||
---|---|---|---|
kikinet Profil |
#1 · Zasláno: 22. 3. 2014, 16:57:10
Zdravím,
spolupráce php s databázemi je mi cizí. Kdyby se našel někdo kdo mi chtěl zkontrolovat kód a říct mi, proč neplní svou funkci, byla bych vděčná. Formulář slouží k odesílání fotek do ftp adresáře. Databázi se posílá název fotky a zvolená skupina. Z databáze tahám adresu pro zmenšenou fotku a miniaturu. jednotlivé řádky kódu jsou popsané (co tím chtěl básník říct). Připojení k databázi je funkční, ale zápis už neproběhne. php: if($_POST['poslat'] == "ano") { require('script/dblogin.php'); //připojení k db //procházení souborů $x = -1; $y = -1; foreach ($photo as $img) { $x = $x++; //přiřazení čísla pole pro group $gr = $group[$x]; //číslo skupiny ($x - určuje číslo pole) if($_FILES['img']!=""){ //získání informací o fotce $tmpname = $_FILES['img']['tmp_name']; //název dočasného souboru $type = $_FILES['img']['type']; //typ souboru $name = $_FILES['img']['name']; //název souboru $fullname = $name.'.'.$type; //název souboru včetně formátu $query = "SELECT `url_orig` FROM `group` WHERE `ID_g`=".$gr.";"; $urlorig = mysql_query ($query, $db); //získání url adresy zmenšeného obrázku z db $query = "SELECT `url_thumb` FROM `group` WHERE `ID_g`=".$gr.";"; $urlthumb = mysql_query ($query, $db); //získání url adresy minitury obrázku z db $image = imagecreatefromjpeg($tmpname); //zápis údajů do db $query = "INSERT INTO `photo` (`name_p`, `group_id`) VALUES ('".$name."', '".$gr."');"; mysql_query($query, $db); //zmenšení nejdelší strany na 600px $width = imagesx($image); $height = imagesy($imgage); if ($height>$width) { $ratio = $height/$width; //poměr stran $imgorig = imagecreatetruecolor(600/$ratio,600); //zmenšený obrázek $imgthumb = imagecreatetruecolor(150/$ratio,150); //miniatura obrázek $imgthumb->cropimage(150,150,0,(($width-150)/2)); } else { $ratio = $width/$height; $imgorig = imagecreatetruecolor(600,600/$ratio); $imgthumb = imagecreatetruecolor(150,150/$ratio); $imgthumb->cropimage(150,150,0,(($height-150)/2)); }; move_uploaded_file($imgorig, $urlorig); //uložení fotky do adresáře move_uploaded_files($imgthumb, $urlthumb); // Uvolní systémové prostředky imagedestroy ($imgorig); imagedestroy ($imgthumb); imagedestroy ($imgage); }; }; }; html - formulář <form method="post" action="" enctype="multipart/form-data" name="photo-uploader"> <label> <input name="photo[]" type="file" /> <select name="group[]"> <option value="1">Příroda</option> <option value="2">Lidé</option> <option value="3">Zvířata</option> <option value="4">Nezařazeno</option> </select> <hr /> </label> <button name="addmore">Další foto</button> <input name="odeslat" type="submit" value="UPLOAD" /> <input type="hidden" name="poslat" value="ano" /> </form> |
||
Alphard Profil |
#2 · Zasláno: 23. 3. 2014, 10:32:48
Ten kód je dost komplexní, z dodaných informací ani není zřejmé, kde se zasekne, ale zdá se, že to bude velmi brzy.
Proměnná $photo s vypnutým register globals neexistuje, taktéž $_FILES['img'] neexistuje, protože ho nedefinuje formulář. Příklad pro upload více fotek je v PHP: Uploading multiple files - Manual, pracuje se tam s $_FILES['photo']['tmp_name'][0] .
Dotaz $query na 23. řádku si potom můžete případně vypsat a zkusit ho spustit v nějakém adminu, který zobrazí případnou chybu apod. Ta práce s databází je celkově nějaká zmatená, opravdu tím získáte strukturu, ve které najdete, co potřebujete? Mně v tabulce photo chybí sloupec s názvem souboru.
Zmenšování obrázků vypadá na další věc slepenou s 5 různých návodů. $imgorig bude jen černý obdélník, $imgthumb->cropimage() vyvolá chybu, protože GD resource obrazu nemá objektové rozhraní.
Řádky 41 a 42 se snaží přesouvat GD resource (což není soubor), takže to by pochopitelně selhalo také. Doporučuji nesnažit se ukládat soubory pod názvy obsahujícími diakritiku, budou s tím jen problémy. Vzhledem k předchozímu doporučuji postupný vývoj: 1. zprovoznit samotný upload a potom hromadný upload, 2. vytvořit zmenšování obrázků a uložení do databáze, v libovolném pořadí, ale ne najednou. |
||
kikinet Profil |
#3 · Zasláno: 23. 3. 2014, 19:46:13
Alphard:
Ok, děkuji za přehled, přečtu si ten návod a zkusím to ještě jednou po částech. |
||
Časová prodleva: 11 let
|
0