Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]rozbudowany formularz dodawania danych
Forum PHP.pl > Forum > Przedszkole
michal_86
Witam!

Chciałbym stworzyć formularz razem z skryptem dodawania, który będzie równocześnie dodawał tekst i zdjęcie

formularz wygląda tak:

  1. <form action="ddbwpow52.php" method="POST">
  2.  
  3. ID - tylko cyfry<br/>
  4. <input type="text" name="id"/ size=\"5\"><br/>
  5. Lokalizacja<br/>
  6. <input type="text" name="Lokalizacja"/ size=\"50\"><br/>
  7. Tytul<br/>
  8. <input type="text" name="tytul"/ size=\"150\"><br/>
  9. Opis<br/>
  10. <textarea name="opis" cols="70" rows="25"></textarea><br/>
  11.  
  12. Powierzchnia<br/>
  13. <input type="text" name="powierzchnia"/ size=\"150\"><br/>
  14. czynsz<br/>
  15. <input type="text" name="czynsz"/ size=\"150\"><br/>
  16. Dostepne<br/>
  17. <input type="text" name="dostepne"/ size=\"100\"><br/>
  18. Zdjecie<br/>
  19. <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  20. <form enctype="multipart/form-data" action="ddbwpow52.php" method="POST">
  21. Zdjęcie : <input name="zdjecie" type="file" /><br/>
  22. <input type="submit" value="dodaj"/>
  23. <input type="reset" value="Kasuj" />
  24. </CENTER>
  25. </form>


problem polega na tym, iż jak pewnie zauważyliście są dwie opcje wysyłania: <form action="ddbwpow52.php" method="POST"> oraz <form enctype="multipart/form-data" action="ddbwpow52.php" method="POST">
Jak się również zapewne domyślacie skrypt wykonuje tylko jedną metodę wysyłki - tą która znajduje się wyżej. Co ciekawe jeśli drugą opcje umieszczę ponad zwykłe wysyłanie - skrypt nie robi niczego, gdy jest tak jak teraz dodaje tylko tekst

Oto skrypt dodawania:
  1. $id = $_POST['id'];
  2. $tytul = $_POST['tytul'];
  3. $opis = $_POST['opis'];
  4. $powierzchnia = $_POST['powierzchnia'];
  5. $czynsz = $_POST['czynsz'];
  6. $dostepne = $_POST['dostepne'];
  7. $Lokalizacja = $_POST['Lokalizacja'];
  8. $zdjecie= $_POST['zdjecie'];
  9.  
  10. if( $id and $tytul and $opis and $powierzchnia and $czynsz and $dostepne and $Lokalizacja and $zdjecie ) {
  11.  
  12.  
  13. $connection = @mysql_connect('localhost', 'root')
  14. or die('Brak połączenia z serwerem MySQL');
  15. $db = @mysql_select_db('biurapow5', $connection)
  16. or die('Nie mogę połączyć się z bazą danych');
  17.  
  18. // dodajemy rekord do bazy
  19. $ins = @mysql_query("INSERT INTO pow5 SET id='$id', tytul='$tytul', opis='$opis', powierzchnia='$powierzchnia', czynsz='$czynsz', dostepne='$dostepne', Lokalizacja='$Lokalizacja', zdjecie='$zdjecie' ");
  20.  
  21. if($ins) echo "Rekord został dodany poprawnie";
  22. else echo "Błąd nie udało się dodać nowego rekordu";
  23. if( is_uploaded_file( $_FILES['zdjecie']['tmp_name'] ) )
  24. {
  25. $strUploadDir = 'images/' . $_FILES['zdjecie']['name'];
  26. if( move_uploaded_file( $_FILES['zdjecie']['tmp_name'], $strUploadDir ) )
  27. {
  28. echo 'Plik został pomyślnie uploadowany! <br />';
  29. }
  30. else
  31. {
  32. echo 'Upload pliku nie powiódł się!';
  33. }
  34. echo 'Dodatkowe informacje o uploadowanym pliku: <pre>' . print_r( $_FILES, true ) . '</pre>';
  35. }
  36. else
  37. {
  38. echo 'Wystąpił błąd podczas wysyłania pliku na serwer!';
  39. }
  40.  
  41. mysql_close($connection);
  42. }
  43.  
  44. ?>


I moje pytanie - czy da się zmienić coś w samym formularzu aby oba typy wysłania szły za jednym kliknięciem, czy musze kombinować ze skryptem, a jeśli tak to w jakim kierunku?

Pozdr
Lewiatan
A próbowałeś wrzucić to w jeden formularz? Tzn. z enctype="multipart/form-data" wysyłać też tekst? Nigdy czegoś takiego nie próbowałem, ale może by zadziałało.

Z drugiej strony możesz pokombinować z AJAXem. Zrobić jeden submit i do niego podpisać zdarzenie które wyśle dane tekstowe z formularza, a potem normalnie wykona ACTION odnośnie obrazka.
phpion
Do pierwszego <form> dodaj enctype="multipart/form-data", a drugi <form> wywal.
nospor
Cos przekombinowales. Jak chcesz dodatkowo formem wyslac plik to dodajesz do forma enctype="multipart/form-data" i juz. zadnych dodatkowych formularzy nie musisz robic.
Inna sprawa ze ty nie umiesz robic zwyklego uploadu - widac to po kodzie. Najpierw zapoznaj sie z tym
http://www.php.net/manual/pl/features.file...post-method.php
michal_86
na tym linku co dałeś bazuje cały skrypt

poza tym...jak daje to w dwóch oddzielnych formularzach to wszystko działa...gdy jednak łącze coś się gryzie

zrobiłem tak jak powiedziliści czyli "
  1. <form action="ddbwpow52.php" enctype="multipart/form-data" method="POST">
i nie dodaje niczego...pusta strona

jakiś inne pomysły? smile.gif
nospor
no bo masz
$zdjecie= $_POST['zdjecie'];
a potem sprawdzasz w ifie czy jest $zdjecie czy nie. No a jak przesylasz plik formem to $_POST nie zawiera tego pliku. Dlatego wlasnie stwierdzilem , ze nie masz zielonego pojecia o uploadzie i podałem ci link do przeczytania smile.gif
michal_86
$zdjecie jest po to by została do bazy dopisana jego nazwa - tu nic nie jest przypadkowe akurat. Chodzi mi o to że plik jest wysyłany na server do katalogu a nie do bazy, a do bazy idzie jego nazwa dzięki której będę mógł potem wyświtlić to zdjęcie na stronie smile.gif Założenie jest takie - wszystko co dodaje w tym formularzu potem wyświetlić się ma na stronie

Może nie da się tego wszystkiego na jednym formularzu "załatwić" ?

nospor
Cytat
$zdjecie jest po to by została do bazy dopisana jego nazwa - tu nic nie jest przypadkowe akurat.
Kiedy ci tlumacze, ze przy uploadzie w $_POST nie ma informacji o pliku tylko w $_FILES.
michal_86
no wiem właśnie się zorientowałem ..ale jak z $files wyciągnąć jedynie jego nazwę?
nospor
o zgrozo.... przeciez juz to robisz chociazby tutaj:
$strUploadDir = 'images/' . $_FILES['zdjecie']['name'];

ty weź sie naucz uploadowac jak ci radzilem bo ty jedynie skopiowales kod bez jakiegokolwiek namyslu
michal_86
sory też teraz zorientowałęm..za szybko zadaje pytania..przepraszam!!!

dzięki!

a jak przerobić $_FILES['zdjecie']['name']
na $name i $zdjecie

powiem wprost nie wiem jak wrzucić to name do bazy
ten kod jest zły
  1. sql_query("INSERT INTO pow5 SET id='$id', tytul='$tytul', opis='$opis', powierzchnia='$powierzchnia', czynsz='$czynsz', dostepne='$dostepne', Lokalizacja='$Lokalizacja', zdjecie=" . $_FILES['name'] );


próbowałem różnych nawiasów i albo był błąd albo nic nie dodawał...nie wiem jak to rozszyfrować, nie rozumiem tego systemu znacznikowania przy opracjach na bazie w tym przypadku jak wstawić $_FILES['zdjecie'] do komendy insert
manual php mi nie pomógł - musze mieć jakiś przykład, wzór...

i nie chodzi że się lenie ale w tutorialach które przejrzałem nie spotkałem opisu wyjaśnienia takiego przykładu
nospor
  1. $name = $_FILES['zdjecie']['name'];

I teraz w zmiennej $name masz nazwe pliku - jest to zwykly tekst w zmiennej. A zwykly tekst w zmiennej przeciez juz wkladasz do zapytania...
michal_86
  1. $name = $_FILES['name'];
  2.  
  3. if( $id and $tytul and $opis and $powierzchnia and $czynsz and $dostepne and $Lokalizacja ) {
  4.  
  5.  
  6. $connection = @mysql_connect('localhost', 'root')
  7. or die('Brak połączenia z serwerem MySQL');
  8. $db = @mysql_select_db('biurapow5', $connection)
  9. or die('Nie mogę połączyć się z bazą danych');
  10.  
  11. // dodajemy rekord do ba
  12. $ins = @mysql_query("INSERT INTO pow5 SET id='$id', tytul='$tytul', opis='$opis', powierzchnia='$powierzchnia', czynsz='$czynsz', dostepne='$dostepne', Lokalizacja='$Lokalizacja', zdjecie='$name' ");


zrobiłem tak - niewiem czy cie dobrze zrozumiałem, w kazdym razie efekt jest taki że pole zdjecie w bazie jest puste ;/ coś źle zinterpretowałem?
nospor
zaraz zamkne temat....

ZNAJDZ 10 ROZNIC:

$name = $_FILES['zdjecie']['name']; - kod co ci podałem
$name = $_FILES['name']; - kod jaki ty napisałeś
michal_86
przepraszam..rozumiałem to jako dwie różne zmienne, po prostu zajmuje sie tym dopiero od 4 dni dlatego czasem robie głupie manewry..tutaj wydawało mi się że samo name daje nazwę..

w każdym razie działa - DZIĘKUJĘ ! ! !
nospor
Cytat
.tutaj wydawało mi się że samo name daje nazwę..
To skoro zajmujesz sie tym 4 dni to zrob wkoncu to o co cie prosilem. Nie polegaj na swoim WYDAWANIU SIE bo sami widzisz ze cie zawodzi. Dalem ci na początku linka to go przejedź od deski do deski 100 razy az wkoncu załapiesz co jest co w tym krociutkim kodzie.
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.