Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP - resize obrázku a $_FILES["image"]["name"]

Prosím o radu. Jsem už trochu zoufalý, protože tenhle problém převracím ze všech stran a nevím jak na něj.
Je možné, že jsem něco přehlédl, ale už opravdu asi nevidím co.

Skript kterým odesílám:

<?
echo '<form name="formular1" action="odkazy1.php" method="post">
      Pořadí: <br>
      <input type="text" name="poradi" size="2" maxlength="2"><br>
      <br>
      Alt: <br>
      <input type="text" name="alternative" size="25" maxlength="35"><br>     <br>
      Adresa: <br>
      <input type="text" name="adresa" size="25" maxlength="35"><br>
      <br>
      Ikona: <br>
      <input type="file" name="image" size="40" alt="fotka"><br>
      <br>
      Text: <br>
      <textarea name="text" cols="70" rows="5"></textarea><br>
      <input type="hidden" name="akce" value="pridat">
      <input type="submit" value="odeslat" class="tlacitko1">
      </form>';
?>

Skript kterým zapisuju:

<?php
session_start();
session_register("ulozeno");

if (!$poradi  || !$adresa || !$image || !$text)	
{
$ulozeno = 1;
header ("Location: odkazy.php");
}

else
{
include("spojeni1.inc");

if ($image)
{ 
$soubor_name = ($_FILES["image"]["name"]);

$image = ($_FILES["image"]["name"]);
$size=GetImageSize($image);
$width=$size[0];
$height=$size[1];
}

if ($width)
$x_ratio=$max_width/$width;

if ($height)
$y_ratio=$max_height/$height;

if ( ($width <= $max_width) && ($height <= $max_height) ) {
$tn_width = $width;
$tn_height = $height;
}
else if (($x_ratio * $height) < $max_height) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else {
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}

switch ($size[2]) {
case 1: $src=imagecreatefromgif($image); break;
case 2: $src=imagecreatefromjpeg($image); break;
case 3: $src=imagecreatefrompng($image); break;
}

$dst=ImageCreateTrueColor($tn_width,$tn_height);
imagecopyresampled($dst, $src, 0, 0, 0, 0,$tn_width,$tn_height,$width,$height);

switch ($size[2]) {
case 1: ImageGif($dst,$cil.'/'.$image_name,100); break;
case 2: ImageJpeg($dst,$cil.'/'.$image_name,100); break;
case 3: ImagePng($dst,$cil.'/'.$image_name); break;
}
@ImageDestroy($src);
@ImageDestroy($dst);

$update = mysql_query("INSERT INTO odkazy (poradi, alt, adresa, obrazek, text)  VALUES ('$poradi', '$alternative', '$adresa', '$soubor_name', '$text') ");

mysql_close();
$ulozeno = 2;
header ("Location: odkazy.php");
}
?>

No a chybu kterou mi to hlásí:

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/www/mz-fans.cz/www/admin/odkazy1.php on line 50

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/www/mz-fans.cz/www/admin/odkazy1.php on line 51

Warning: Cannot modify header information - headers already sent by (output started at /home/www/mz-fans.cz/www/admin/odkazy1.php:50) in /home/www/mz-fans.cz/www/admin/odkazy1.php on line 65

Ještě jednou prosím o pomoc, a předem děkuju za postrčení správným směrem.

Předmět Autor Datum
Samozřejmě je dost těžké ověřit kód jen na pohled, ale první, co mi padlo do oka, je, že nevidím nap…
hynajs 04.11.2009 14:13
hynajs
Máš samozřejmě pravdu. Doplnil jsem. Přikládám jen výňatek z kódu, aby bylo jasné kam. Ještě doplním…
Brmboš 04.11.2009 14:35
Brmboš
Před řádkem $dst=ImageCreateTrueColor($tn_width,$tn_height); si nech vypsat proměnné $tn_width a $…
host 04.11.2009 18:53
host
Neukazují nic. Nicméně jsem zkusil i tohle a nic: $image = ($_FILES["image"]["name"]); $size=GetIma… poslední
Brmboš 04.11.2009 23:10
Brmboš

Samozřejmě je dost těžké ověřit kód jen na pohled, ale první, co mi padlo do oka, je, že nevidím naplněné proměnné $max_width a $max_height . Pak by ovšem $x_ratio a $y_ratio nenabyly číselné hodnoty - odtud by mohly pocházet blbé hodnoty $tn_width,$tn_height , což je předmětem hlášení.

Ale v žádném případě netvrdím, že jsem problém vyřešil, je to jen tip na první pohled.

Máš samozřejmě pravdu. Doplnil jsem. Přikládám jen výňatek z kódu, aby bylo jasné kam.
Ještě doplním, že adresář má CHMOD 777 - takže v zápisu to nebrání. A do tabulky se zapíše všechno kromě $image_name

...
$soubor_name = ($_FILES["image"]["name"]);

$image = ($_FILES["image"]["name"]);
$size=GetImageSize($image);
$width=$size[0];
$height=$size[1];
}

$max_width = '100'; 
$max_height = '500';

if ($width)
$x_ratio=$max_width/$width;
...

Chybová hláška:

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/www/mz-fans.cz/www/admin/odkazy1.php on line 53

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/www/mz-fans.cz/www/admin/odkazy1.php on line 54

Warning: Cannot modify header information - headers already sent by (output started at /home/www/mz-fans.cz/www/admin/odkazy1.php:53) in /home/www/mz-fans.cz/www/admin/odkazy1.php on line 68

Před řádkem

$dst=ImageCreateTrueColor($tn_width,$tn_height);

si nech vypsat proměnné $tn_width a $tn_height, jestli jsou naplněné?

echo $tn_width," ",$tn_height;

Pokud v nich nbude přiřazená hodnota, tak budeš mít chybu v nějaké podmínce, kde přiřazuješ $width a $height.

Zpět do poradny Odpovědět na původní otázku Nahoru