Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odświeżanie rekordów w bazie mysql
elwierka
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


Piszę skrypt, który pozwoli mi dodać do bazy danych produkt. Dane o produkcie będą wysyłane przez formularz, na którym znajdują się też pola do dodania 3 obrazków. Założyłam że między tabelami produkty i obrazki, będzie relacja jeden do jednego, bo zdjęcia będą wyłącznie dla danego produktu.

Mój skrypt najpierw dodaje produkt do bazy danych. Następnie wywołuję funkcję, która pobiera mi id świeżo dodanego produktu, żeby za chwilę wykorzystać go przy zapisywaniu obrazków do bazy danych.

Tabela obrazki posiada pola:
- produkt_id
- zdj1
- zdj2
- zdj3

Okazuje się jednak, że nie pobiera mi się żadna wartość ID produktu, tak jakby baza danych się nie odświeżała po jego dodaniu..Albo robię coś nie tak....

Zapodaję kody:
Skrypt dodający nowy produkt
  1. function dodajProdukt($name,$gt,$jm,$kol,$mat,$wymiar,$opis,$cena){
  2. $lacz = con_to_db(); //połączenie z bazą danych
  3.  
  4. $wynik = $lacz->query("SELECT * FROM produkty WHERE nazwa='".$name."' AND gt_id = '".$gt."'");
  5.  
  6. if (!$wynik) {
  7. throw new Exception('<p class="uwaga">Wykonanie zapytania nie powiodło się.</p><a href="./?d=nowyProdukt">Powrót</a>');
  8. }
  9.  
  10. if ($wynik->num_rows>0) {
  11. throw new Exception('<p class="uwaga">Nazwa produktu istnieje już w bazie danych. Proszę wprowadzić inną. </p/><a href="./?d=nowyProdukt">Powrót</a>');
  12. }
  13.  
  14. // jeżeli wszystko w porządku, umieszczenie w bazie danych
  15. $zapytanie = "INSERT INTO produkty SET nazwa = '".$name."', gt_id = '".$gt."', miara_id = '".$jm."', kolor = '".$kol."', material = '".$mat."', wymiar = '".$wymiar."', opis = '".$opis."', cena_netto = '".$cena."'";
  16. $wynik = $lacz->query($zapytanie);
  17. if (!$wynik) {
  18. throw new Exception('<p class="uwaga">Rejestracja w bazie danych niemożliwa — proszę spróbować później.</p><a href="./?d=nowyProdukt">Powrót</a>');
  19. }
  20. return true;
  21. $wynik->free();
  22. $lacz->close();


oraz kod pobierający ID dodanego produktu
  1. function pobierzIdProduktu($name, $gt, $cena){
  2. $lacz = con_to_db();
  3. $wynik = $lacz->query("SELECT produkt_id FROM produkty WHERE nazwa='".$name."' AND gt_id = '".$gt."' AND cena_netto = '".$cena."'");
  4.  
  5. if (!$wynik) {
  6. throw new Exception('<p class="uwaga">Wykonanie zapytania nie powiodło się.</p><a href="./?d=nowyProdukt">Powrót</a>');
  7. }
  8.  
  9. if ($wynik->num_rows>0) {
  10. throw new Exception('<p class="uwaga">Taki produkt nie istnieje w bazie danych. </p/><a href="./?d=nowyProdukt">Powrót</a>');
  11. }
  12.  
  13. $dane = $wynik->fetch_object();
  14. $id = $dane->produkt_id;
  15. return $id;
  16. }


wywołanie funkcji w skrypcie:
  1. dodajProdukt($prod_name, $prod_gt, $prod_jm, $prod_kolor, $prod_mat, $prod_wymiar,$prod_opis, $prod_cena);
  2. $pr_id = pobierzIdProduktu($prod_name, $prod_gt, $prod_cena);


Jak uaktualnić bazę danych, żeby można było jeszcze wykorzystać to id? A może inaczej powinnam to "ugryźć"? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


a to:
if ($wynik->num_rows>0) {
powinno chyba wyglądać tak:
if (!$wynik->num_rows) {

no chyba, że lubisz zakłamywać rzeczywistość (IMG:style_emoticons/default/tongue.gif) [ah te kobiety]

ps. sprawdziłaś w phpmyadmin czy dany produkt został poprawnie dodany?

Ten post edytował CuteOne 2.10.2010, 02:58:54
Go to the top of the page
+Quote Post
elwierka
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


Tak, tak, zmieniłam, ale nic to nie dało. Dalej nie pobiera id w skrypcie zapisywania.

Produkt dodaje się się do bazy danych prawidłowo.
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Pogubiłem się..
"Dalej nie pobiera id w skrypcie zapisywania"
czy w skrypcie pobierania?

podmień to:
  1. $dane = $wynik->fetch_object();
  2. $id = $dane->produkt_id;

na to:
  1. $dane = $wynik->fetch_object();
  2. print_r($dane);
  3. $id = $dane->produkt_id;
  4.  

i zobacz co się wyświetli
Go to the top of the page
+Quote Post
elwierka
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


no już sobie poradziłam z problemem
Zamiast dwóch funkcji - dodajProdukt() i pobierzIdProduktu(), utwrzyłam jedną,
funkcję dodajProdukt, która zapisuje nowy obiekt do bazy danych, następnie pobiera id tego produktu i zwraca go.
  1. function dodajProdukt($name,$gt,$jm,$kol,$mat,$wymiar,$opis,$cena){
  2. $lacz = con_to_db();
  3.  
  4. // sprawdzenie, czy nazwa produktu nie powtarza się
  5. $wynik = $lacz->query("SELECT * FROM produkty WHERE nazwa='".$name."' AND gt_id = '".$gt."'");
  6.  
  7. if (!$wynik) {
  8. throw new Exception('<p class="uwaga">Wykonanie zapytania nie powiodło się.</p><a href="./?d=nowyProdukt">Powrót</a>');
  9. }
  10. if ($wynik->num_rows>0) {
  11. throw new Exception('<p class="uwaga">Nazwa produktu istnieje już w bazie danych. Proszę wprowadzić inną. </p/><a href="./?d=nowyProdukt">Powrót</a>');
  12. }
  13.  
  14. // jeżeli wszystko w porządku, umieszczenie w bazie danych
  15. $zapytanie = "INSERT INTO produkty SET nazwa = '".$name."', gt_id = '".$gt."', miara_id = '".$jm."', kolor = '".$kol."', material = '".$mat."', wymiar = '".$wymiar."', opis = '".$opis."', cena_netto = '".$cena."'";
  16. $wynik = $lacz->query($zapytanie);
  17. if (!$wynik) {
  18. throw new Exception('<p class="uwaga">Rejestracja w bazie danych niemożliwa — proszę spróbować później.</p><a href="./?d=nowyProdukt">Powrót</a>');
  19. }
  20.  
  21. if($wynik->affected_rows==-1){
  22. throw new Exception('<p class="uwaga">Dane nie zostały zapisane w bazie danych.</p><a href="./?d=nowyProdukt">Powrót</a>');
  23. }
  24. // pobieram id utworzonego produktu - do zapisu ścieżki do plików w tabeli obrazki
  25. $wynik = $lacz->query("SELECT produkt_id FROM produkty WHERE nazwa='".$name."' AND gt_id = '".$gt."'");
  26.  
  27. if (!$wynik) {
  28. throw new Exception('<p class="uwaga">Wykonanie zapytania nie powiodło się.</p><a href="./?d=nowyProdukt">Powrót</a>');
  29. }
  30.  
  31. if (!$wynik->num_rows>0) {
  32. throw new Exception('<p class="uwaga">Taki produkt nie istnieje w bazie danych. </p/><a href="./?d=nowyProdukt">Powrót</a>');
  33. }
  34.  
  35. $dane = $wynik->fetch_object();
  36. $id = $dane->produkt_id;
  37. return $id;
  38. }


W skrypcie dodawania produktu, zamiast samego wywołania funkcji dodajProdukt(), wywołałam ją i przypisałam jej wynik do zmiennej (czyli to co funkcja zwraca - ID).

  1. $id = dodajProdukt($prod_name, $prod_gt, $prod_jm, $prod_kolor, $prod_mat, $prod_wymiar,$prod_opis, $prod_cena);
  2. dodaj_foto($id);


Następnie utworzyłam funkcję dodaj_foto($id), która zapisuje pliki na serwerze i dodaje ścieżki dostępu do bazy danych...
  1. function dodaj_foto($id){
  2. $lacz = con_to_db();
  3. $wynik = $lacz->query('SELECT * FROM produkty WHERE produkt_id = "'.$id.'"');
  4. if (!$wynik) {
  5. throw new Exception('<p class="uwaga">Wykonanie zapytania nie powiodło się.</p><a href="./?d=nowyProdukt">Powrót</a>');
  6. }
  7.  
  8. if (!$wynik->num_rows>0) {
  9. throw new Exception('<p class="uwaga">Nie można pobrać danych produktu. </p/><a href="./?d=nowyProdukt">Powrót</a>');
  10. }
  11.  
  12. //skrypt obsługujący dodawanie plików na serwer i zapisywanie ich do bazy danych
  13. include_once('./uploaduj.php');
  14.  
  15. }
  16.  


Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 15:51