Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][GD] Dziwny błąd skryptu
Forum PHP.pl > Forum > PHP
enemyofarcha
Witam, witam... Ponownie.. Już teoretycznie udało mi się wszystko zrobić w Panelu administracji portfolio.. Tylko mam dziwny problem.

Przy dodawaniu nowego rekordu do bazy danych wraz z uploadem obrazka, wszystko działa jak należy, lecz podczas edycji rekordu jest problem z plikiem.
Nie wysyła go i nie dodaje wpisu nazwy do bazy danych - Jak to robi przy dodawaniu nowego rekordu.

W czym może polegać problem?

skrypt dodawania:
  1. if ($_POST['dodaj']) {
  2.  
  3. $id = trim($_POST['id']);
  4. $klient = trim($_POST['klient']);
  5. $wykonano = trim($_POST['wykonano']);
  6. $web = trim($_POST['web']);
  7. $data = trim($_POST['data']);
  8. $img = ($_FILES['obrazek']['name']);
  9. uploadobrazka();
  10.  
  11. $sql = @mysql_query("INSERT INTO portfolio SET id='$id', klient='$klient', wykonano='$wykonano', web='$web', data='$data', img_tb=' $img', img_big='$img'");
  12. $dodaj = mysql_query($sql);
  13.  
  14. if ($dodaj)
  15. echo "<center>Rekord został dodany</center>";
  16. else
  17. echo "<center>Rekord został dodany</center>";
  18. }


skrypt edycji:
  1. if ($_POST['zmien']) {
  2.  
  3. $id = trim($_POST['id']);
  4. $klient = trim($_POST['klient']);
  5. $wykonano = trim($_POST['wykonano']);
  6. $web = trim($_POST['web']);
  7. $data = trim($_POST['data']);
  8. $img = ($_FILES['obrazek']['name']);
  9. uploadobrazka();
  10.  
  11. $sql = "UPDATE portfolio SET
  12. klient = '$klient',
  13. wykonano = '$wykonano',
  14. web = '$web',
  15. img_big = '$img',
  16. img_tb = '$img',
  17. data = '$data' WHERE id =".$_POST['id'];
  18.  
  19. $edycja = mysql_query($sql);
  20.  
  21.  
  22. if ($edycja)
  23. echo "<center>Naniesiono poprawki</center>";
  24. else
  25. echo "<center>Wystąpił błąd!</center>";
  26. }


Formularze są identyczne /* HTML */. (ale raczej nie ma potrzeby pokazywania ich)

Jeszcze dodam skrypt GD, żeby nie było niejasności:
  1. function uploadobrazka(){
  2.  
  3. if( is_uploaded_file( $_FILES['obrazek']['tmp_name'] ) )
  4. {
  5. $strUploadDir = '../images/portfolio/' . $_FILES['obrazek']['name'];
  6. if( move_uploaded_file( $_FILES['obrazek']['tmp_name'], $strUploadDir ) )
  7. {}else{}}
  8. $img = imagecreatefromjpeg($strUploadDir);
  9. $width = imagesx($img);
  10. $height = imagesy($img);
  11. $width_mini = 80;
  12. $height_mini = 80;
  13. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  14. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  15. imagejpeg($img_mini, '../images/portfolio/thumb/' . basename($_FILES["obrazek"]['name']), 100);
  16. imagedestroy($img);
  17. imagedestroy($img_mini);
  18. }


Zapomniałbym o najważniejszym, przy zapisie wy-edytowanego formularza, pokazuje mi takie błędy:

  1. Warning: imagesx(): supplied argument is not a valid Image resource in E:\xampp\htdocs\archa\admin\portfolio.php on line 158
  2.  
  3. Warning: imagesy(): supplied argument is not a valid Image resource in E:\xampp\htdocs\archa\admin\portfolio.php on line 159
  4.  
  5. Warning: imagecopyresampled(): supplied argument is not a valid Image resource in E:\xampp\htdocs\archa\admin\portfolio.php on line 163
  6.  
  7. Warning: imagejpeg() [function.imagejpeg]: Unable to open '../images/portfolio/thumb/' for writing: No such file or directory in E:\xampp\htdocs\archa\admin\portfolio.php on line 164
  8.  
  9. Warning: imagedestroy(): supplied argument is not a valid Image resource in E:\xampp\htdocs\archa\admin\portfolio.php on line 165
drPayton
Formularze sa identyczne na pewno?

wewnątrz funkcji uploadu masz fragment:
  1. if( move_uploaded_file( $_FILES['obrazek']['tmp_name'], $strUploadDir ) )
  2. {}else{}}


Wstaw cokolwiek (echo etc) w obie klamry i zobacz, czy aby na pewno plik jest łapany i uploadowany na swoje miejsce...
thek
Logika skryptu... Jeśli ktoś uploaduje plik to jest wszystko ok... Ale co jeśli nie robi tego? smile.gif Wtedy zmienna $strUploadDir nawet nie istnieje, choć zaraz potem próbujesz jej użyć wywołując imagecreatefromjpeg($strUploadDir)i to jest ten błąd.

Sprawdzaj najpierw czy w ogóle coś w zmiennej $_FILES jest i dopiero od tego uzależniaj czy uploadobrazka() się wykona czy nie.

Zresztą inny błąd... Po co masz kolumny img_big i img_tb skoro przechowują one to samo? Jedna zbędna smile.gif
enemyofarcha
Zaraz przejże skrypty winksmiley.jpg
img_big i img_tb muszą być winksmiley.jpg big to jest obrazek wysłany, a tb to jest odnośnik

Formularz edycji:
  1. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
  2. <tr><td></td><td><input type="hidden" size="5" name="id" value="<?php echo $row['id'];?>"></td></tr>
  3. <tr><td align="right">Klient:</td><td> <input size="30" name="klient" value="<?php echo $row['klient'];?>"></td></tr>
  4. <tr><td align="right">Wykonano:</td><td> <input size="30" name="wykonano" value="<?php echo $row['wykonano'];?>"></td></tr>
  5. <tr><td align="right">Data:</td><td> <input size="30" name="data" value="<?php echo $row['data'];?>"></td></tr>
  6. <tr><td align="right">Strona projektu:</td><td> <input size="30" name="web" value="<?php echo $row['web'];?>"></td></tr>
  7. <tr><td align="right">Obrazek:</td><td> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"><input size="14" type="file" name="obrazek" ></td></tr>
  8. <tr><td></td><td<input name="zmien" type="submit" value="zapisz zmiany"></td></tr>


Formularz dodawania:
  1. <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
  2. <tr><td></td><td><input type="hidden" size="5" name="id"></td></tr>
  3. <tr><td align="right">Klient:</td><td> <input type="text" name="klient" size="30"></td></tr>
  4. <tr><td align="right">Wykonano:</td><td> <input type="text" size="30" name="wykonano"></td></tr>
  5. <tr><td align="right">Data:</td><td> <input type="text" size="30" name="data" value="2009-00-00"></td></tr>
  6. <tr><td align="right">Strona projektu:</td><td> <input type="text" size="30" name="web"></td></tr>
  7. <tr><td align="right">Obrazek:</td><td> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"><input size="14" type="file" name="obrazek" ></td></tr>
  8. <tr><td></td><td<input name="dodaj" type="submit" value="dodaj"></td></tr>


najpierw zobaczymy co będzie z tymi klamrami...

Aaa.. Już widzę mały błąd, chyba drPayton Masz rację..

Już można zakończyć temat, miałeś rację z formularzami, w educji nie wpisałem enctype winksmiley.jpg
Małe zwrócenie uwagi i jest wszystko dobrze winksmiley.jpg
drPayton
enctype="multipart/form-data"

No faktycznie takie same formularze ^^

@down: Spoko, już siedze cicho tongue.gif
enemyofarcha
no już ciii tongue.gif

jak wstawiałem na forum to zauważyłem to winksmiley.jpg w pliku nie są obok siebie i nie mogło oko tego wyłapać, ale może dlatego że zaczynam wszystko winksmiley.jpg a myślałem że to coś z php się namieszało

Jeszcze raz dzięki..

Jeszcze o coś chcę zapytać. Ponieważ nie zawsze w edycji będzie zmiana obrazka, tylko wpisów do rekordu. Jak zrobić żeby nie pokazywał się błąd o pliku? Jak nie jest wybierany plik to wyskakuje ten błąd, ale nie potrzebnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.