Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odświeżanie rekordów w bazie mysql
Forum PHP.pl > Forum > PHP
elwierka
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źć"? smile.gif
CuteOne
a to:
if ($wynik->num_rows>0) {
powinno chyba wyglądać tak:
if (!$wynik->num_rows) {

no chyba, że lubisz zakłamywać rzeczywistość tongue.gif [ah te kobiety]

ps. sprawdziłaś w phpmyadmin czy dany produkt został poprawnie dodany?
elwierka
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.
CuteOne
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
elwierka
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.  


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.