Autor Zpráva
kikinet
Profil
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
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
Alphard:
Ok, děkuji za přehled, přečtu si ten návod a zkusím to ještě jednou po částech.

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: