Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php + mysql]Upload plików na serwer + wpis do mysql, nie działa wpis
guilty82
post
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


Witam. Jestem poczatkujacym programista i probuje napisac skrypt, ktory przesle 4 pliki (jpg) z formularza na serwer oraz doda do mysql: id, nazwe i id_plikow (jednakowe dla wszystkich ktore przesylam jednorazowo). Przeszukałem forum i znalazlem kilka skryptow, jednak nie potrafie ich poskladac w calosc. Oto moj kod:

  1. CREATE TABLE pliki (id int NOT NULL, nazwa varchar(25), id_domku int);


id - dla kazdego pliku wgrywanego jednorazowo inne, ale gdy wgram kolejne pliki aby powtarzalo sie np.
plik1.jpg id=1, plik2.jpg id=2 ... drugiplik1.jpg id=1, drugiplik2.jpg id=2 ... itd.

A to kod php:

  1. <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  2. <input type="file" name="plik[]"><br />
  3. <input type="file" name="plik[]"><br />
  4. <input type="file" name="plik[]"><br />
  5. <input type="file" name="plik[]">
  6. <input type="submit" value="Wyślij na serwer">
  7. </form>
  8.  
  9. <?php
  10. for ($i=0; $i<sizeof($_FILES['plik']['size']); $i++) {
  11. if ($_FILES['plik']['size'][$i] !=0) {
  12. $uploaded = "upload/". $_FILES['plik']['name'][$i];
  13. if (is_uploaded_file($_FILES['plik']['tmp_name'][$i])) {
  14. if ($_FILES['plik']['size'][$i] > 1024*1024*1024) {
  15. echo "Plik numer $i jest za duży<br />";
  16. } else {
  17. move_uploaded_file($_FILES['plik']['tmp_name'][$i],$uploaded);
  18. echo "Operacja wysyłania pliku $i przebiegła pomyslnie<br />";
  19.  
  20. }
  21. } else {
  22. echo "Błąd przy przesyłaniu danych w pliku $i!<br />";
  23. }
  24. }
  25.  
  26. echo "<pre>";print_r($_FILES);echo "</pre>";
  27. }
  28.  
  29. $nazwa = $_POST['plik']['name'];
  30. // $id = questionmark.gif;
  31. // $id_domku = questionmark.gif;
  32.  
  33. if ($nazwa) {
  34.  
  35. $dbcnx = mysql_connect('localhost', 'login', 'haslo');
  36. if (!$dbcnx) {
  37. exit('<p>Nie mozna polaczyc sie z baza danych.</p>');
  38. }
  39.  
  40. if (!@mysql_select_db('domek')) {
  41. exit('<p>Nie mozna zlokalizowac bazy danych.</p>');
  42. }
  43.  
  44. $ins = @mysql_query("INSERT INTO pliki SET
  45. id = '$id', nazwa = '$nazwa', id_domku = '$id_domku'") or die (mysql_error());
  46. // tutaj nie wiem czy dobre zapytanie..
  47.  
  48. if ($ins) {
  49. echo "Dodano do bazy inf o plikach";
  50. } else {
  51. echo "Blad - nie udalo sie";
  52. }
  53. mysql_close($dbcnx);
  54. }
  55.  
  56. ?>


Pliki ładuja sie na serwer, ale zupelnie nie wiem jak sobie poradzic z wpisaniem informacji o nich do tabelki

Dzieki za pomoc!

Ten post edytował guilty82 26.03.2007, 16:46:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




po pierwsze:
nie:
  1. <?php
  2. $ins = mysql_query("INSERT INTO pliki SET
  3. id = '$id', nazwa = '$nazwa' id_domku='$id_domku'");
  4. ?>

a:
  1. <?php
  2. $ins = mysql_query("INSERT INTO pliki SET
  3. id = '$id', nazwa = '$nazwa' id_domku='$id_domku'") or die(mysql_error());
  4. ?>
Bedziesz widzial jaki masz blad

po drugie:
zjadles przecinek, a wiec nie: ....nazwa = '$nazwa' id_domku....
a: ...nazwa = '$nazwa', id_domku.....

po trzecie:
przenosze smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
guilty82
post
Post #3





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


Ok poprawilem tak jak napisales. Mimo to nie pokazuje mi jaki error - chyba wogole pomija caly ten fragment. Prosze o podpowiedz co powinienem wstawic dla $id i $id_domku oraz czy $nazwa jest dobrze napisana tu:

  1. <?php
  2. $nazwa = $_POST['plik']['name'];
  3. // $id = questionmark.gif;
  4. // $id_domku = questionmark.gif;
  5. ?>
Go to the top of the page
+Quote Post
Istalacar
post
Post #4





Grupa: Zarejestrowani
Postów: 108
Pomógł: 4
Dołączył: 3.03.2007

Ostrzeżenie: (0%)
-----


Witam
  1. $ins = @mysql_query("INSERT INTO pliki SET
  2. id = '$id', nazwa = '$nazwa', id_domku = '$id_domku'") OR die (mysql_error());
  3. // tutaj nie wiem czy dobre zapytanie..

Mam wrażenie że po prostu średnik zjadłeśtongue.gif
czyli powinno być:
  1. $ins = @mysql_query("INSERT INTO pliki SET
  2. id = '$id', nazwa = '$nazwa', id_domku = '$id_domku';") OR die (mysql_error());
  3. // tutaj nie wiem czy dobre zapytanie..

Go to the top of the page
+Quote Post
guilty82
post
Post #5





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


Istalacar dziala rowniez bez srednika, ale dzieki za podpowiedz smile.gif
Natomiast poprawilem ten fragment:

  1. <?php 
  2. $nazwa = $_FILES['plik']['name'];
  3. // $id = questionmark.gif;
  4. // $id_domku = questionmark.gif;
  5. ?>


oraz zapytanie:

  1. <?php
  2. $ins = @mysql_query("INSERT INTO pliki SET
  3. id = 1, nazwa = '$nazwa', id_domku = 1") or die(mysql_error());
  4. ?>


I teraz zapisuje mi do bazy ale zamiast nazwy plikow tabela wyglada tak:

  1. id | nazwa | id_domku
  2. 1 | Array | 1


dla $id i $id_domku przypisalem po prostu wartosc 1 bo nie wiem jak rozwiazac ten problem..
Nie wiem jednak dlaczego w nazwie jest Array?

Ten post edytował guilty82 26.03.2007, 17:21:37
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) zmodyfikuj strukture tabeli i zrob z ID autoincrement. Wowcza w insert nie ustawiaj juz ID
2) dostajesz "array" gdyz "plik" to u ciebie tablica plikow, powinienes wiec miec:
  1. <?php
  2. $nazwa = $_FILES['plik']['name'][0];
  3. ?>

To ci pobierze pierwsza nazwe, a ty w formie masz ich cztery. Kombinuj wiec chlopie winksmiley.jpg
3)A co to $id_domku? skad je bierzesz? Nigdzie tego nie ma.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
guilty82
post
Post #7





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


1) zrobilem tak na probe i dziala, ale mi chodzi o cos innego.. mianowicie id nie moze byc auto_increment poniewaz bedzie sie powtarzac dla roznych domow. przykladowo mam 2 domki: domek1, domek2. dla kazdego po 4 obrazki. i teraz wgrywam sobie obrazki dla domek1:
id=1, plikdomek1.jpg, id_domku=1; id=2, plikdomek2.jpg, id_domku=1... itd.
natomiast dla domek2 wgrywam:
id=1, plikdomek2.jpg, id_domku=2; id=2, plikdomek2.jpg, id_domku=2... itd.
to wszystko po to aby mysql "wiedzial" pozniej ktore obrazki sa do ktorego domku (id_domku) oraz ktory obrazek z tego wlasnie domku chce pobrac (id).

2) dzieki za podpowiedz - dziala! jesli zas chodzi o to ze mam 4 domki narazie do tego nie doszedlem.. wydaje mi sie ze powinienem uzyc jakiejs petli. tymczasem zrobilem na chlopski rozum, niestety takie rozwiazanie nie dziala:
  1. <?php
  2. $nazwa1 = $_FILES['plik']['name'][0];
  3. $nazwa2 = $_FILES['plik']['name'][1];
  4. $nazwa3 = $_FILES['plik']['name'][2];
  5. $nazwa4 = $_FILES['plik']['name'][3];
  6.  
  7. ...
  8.  
  9. $ins1 = @mysql_query("INSERT INTO pliki SET
  10. nazwa = '$nazwa1', id_domku = 2") or die(mysql_error());
  11. $ins2 = @mysql_query("INSERT INTO pliki SET
  12. nazwa = '$nazwa2', id_domku = 2") or die(mysql_error());
  13. $ins3 = @mysql_query("INSERT INTO pliki SET
  14. nazwa = '$nazwa3', id_domku = 2") or die(mysql_error());
  15. $ins4 = @mysql_query("INSERT INTO pliki SET
  16. nazwa = '$nazwa4', id_domku = 2") or die(mysql_error());
  17. // tutaj nie wiem czy dobre zapytanie..
  18.  
  19. if ($ins1 and $ins2 and $ins3 and $ins4) {
  20. echo "Dodano do bazy inf o plikach";
  21. } else { echo "Blad - nie udalo sie";
  22. }
  23. ?>


3) jak juz wspomnialem id_domku dotyczy wprowadzanego jednorazowo domu i jest za kazdym razem inne, ale nie wiem jak sie do tego zabrac narazie..
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ad1)
Cytat
mianowicie id nie moze byc auto_increment poniewaz bedzie sie powtarzac dla roznych domow
autoincrement sie nie powtarza. dla kazdego rekordu jest inne. U ciebie ma sie powtarzac id_domku a nie id

ad2) w jakim sensie nie dziala? jakis blad?

ad3) No ale skad wiesz do jakiego domku wgrywasz pliki? Skads musisz to wiedziec. Chyba nie wgrywasz na slepo?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
guilty82
post
Post #9





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


1) jesli id bedzie primary key i auto_increment to nie wiem jak baza rozpozna ze obrazek z danego domku to np. rzut_parteru.jpg a nie elewacja.jpg. poniewaz typy tych obrazkow beda sie powtarzac dla wszystkich wprowadzanych domkow np. id=1 to rzut parteru, id=2 to elewacja id=3 to widok_domu_przod.jpg...itd. dlatego przyjalem ze nr id bedzie sie powtarzal w kazdym domie, abym mogl wyciagnac konkretny obrazek z ktoregos domu (id_domku).
chyba, ze zostawie id autoincrement i dodam kolumne, ktora przypisze kazdemu obrazkowi ten typ - wydaje mi sie ze roznica bedzie tylko taka ze bede mial 1 kolumne wiecej, ale nie wiem..
nie jestem pewny czy taka forma tabeli ma sens, ale nie znalazlem narazie alternatywy..

2) no wlasnie nie wyskakuje ani blad ani ze dodano do bazy.. gdy sprawdzam tabelke to jest pusta

3) pliki wgrywam do jednego katalogu, natomiast skojarze je z domkiem za pomoca id_domku
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ad1) no to trzeba bylo od razu tak mowic smile.gif
Dodaj kolumne typ i po sprawie. Id jako ID zawsze sie przyda, nawet jak sie wydaje ze nie

ad2) Dla wszystkiego powywalaj jeszcze te malpy (@) i daj jakiej kontrolne echo 'kontrolne'; przy tych mysql_query by sprawdzic czy tam wogole dochodzi

ad3)
Cytat
natomiast skojarze je z domkiem za pomoca id_domku
To wiem. Nie wiem natomiast skad ty te id_domku bierzesz smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
guilty82
post
Post #11





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


nospor dzieki wielkie za pomoc!

mam jeszcze 1 pomysl na rozwiazanie tego calego problemu. otoz zaladuje sobie wszystko do 1 tabeli (dane o domku + info o obrazkach na serwerze).

i chyba tak zrobie. dzieki wszystkim za pomoc!

Ten post edytował guilty82 28.03.2007, 11:11:26
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Unknown column 'technologia' in 'field list'.
Skoro ci pisze ze nie mia kolumny technologia, znaczy ze jej nie ma smile.gif
Moze literowke jakac zrobiles przy tworzeniu tej tabeli, moze masz cos z malej litery a powinno byc z duzej lub na odwrot.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
guilty82
post
Post #13





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


nospor tak, to byla literowka zamiast INSERT INTO text mialo byc INSERT INTO domki...
coz.. poczatki bywaja trudne. dzieki za pomoc
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:30