Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodawanie rekordu
Forum PHP.pl > Forum > Przedszkole
Mgorka
Witam wszystkich mam mały problem z dodaniem rekordu mianowicie pisze skrypt do składania zamówień na ulotki i mam problem z przenoszeniem danych z bazy z danymi tymczasowymi(tmpzam) a stałymi danymi (dataz). Struktura baz jest taka tmpzam: uid(numer użytkownika) offid(numer ulotki) ilosc(ilosc) oraz dataz: zid(numer zamówienia) offid ilosc.

podaje skrypt może ktoś podpowie w czym bład że pętla tylko wstawia mi jeden rekord a mianowicie zid.
  1. case 'Wyslij zamówienie':
  2. IF (isset($_POST ['id'])){
  3. $sql1 = "INSERT INTO zamowienia (uid) " .
  4. "VALUES ('" . $_POST['id'] . "')";
  5.  
  6. $result1 = mysql_query($sql1, $conn)
  7. OR die('Nie potrafie utworzya konta: ' . mysql_error());
  8.  
  9. }
  10. $sql2 = "SELECT * " .
  11. "FROM zamowienia " .
  12. "WHERE uid='" . $_POST['id'] . "'";
  13. $result2 = mysql_query($sql2, $conn)
  14. OR die('Nie potrafie odnale1a informacji o u?ytkowniku: ' .
  15. mysql_error());
  16. $row2 = mysql_fetch_array($result2);
  17.  
  18.  
  19. $sql = "SELECT * " .
  20. "FROM tmpzam " .
  21. "WHERE uid='" . $_POST['id'] . "'";
  22. $result = mysql_query($sql, $conn)
  23. OR die('Nie potrafie odnale1a informacji o u?ytkowniku: ' .
  24. mysql_error());
  25.  
  26. while($row = mysql_fetch_array($result)){
  27.  
  28. $sql3 = "INSERT INTO dataz (zid, offid, ilosc) " .
  29. "VALUES ('" . $row2['zid'] . "','" .
  30. $_row['offid'] . "','" .
  31. $_row['ilosc'] . "')";
  32.  
  33. $result3 = mysql_query($sql3, $conn)
  34. OR die('Nie potrafie utworzya konta: ' . mysql_error());
  35. }
  36. IF (isset($_POST['id'])) {
  37. $sql = "DELETE FROM tmpzam " .
  38. "WHERE uid='" . $_POST['id'] . "'";
  39.  
  40. $result = mysql_query($sql, $conn)
  41. OR die('Nie potrafie odnale1a has3a: ' . mysql_error());
  42. }
  43. redirect('index.php');
  44.  
  45.  
  46. break;


PS pętla while ma za zafanie powstawiać wszystkie zamówione przedmioty
mortus
Bo masz klauzule WHERE w zapytaniu SELECT i w odpowiedzi dostajesz jeden wiersz. Poza tym do skopiowania tabel w ten sposób możesz posłużyć się zapytaniem INSERT-SELECT.
Mgorka
a właśnie że nie jest to przez nią ponieważ klauzula where pozwala mi pobrać tylko rekordy danego użytkownika i im przypisać (zastąpić) pole uid polem zid(numer zamuwienia)
mortus
Myślę, że Twój kod można zastąpić tym:
  1. case 'Wyslij zamówienie':
  2. if(isset($_POST ['id'])) {
  3. $sql = "INSERT INTO zamowienia (uid) VALUES ('" . $_POST['id'] . "')";
  4. $results = mysql_query($sql, $conn)
  5. or die('Nie potrafie utworzya konta: ' . mysql_error());
  6. }
  7. /*
  8.   $sql2 = "SELECT * FROM zamowienia WHERE uid='" . $_POST['id'] . "'";
  9.   $result2 = mysql_query($sql2, $conn)
  10.   or die('Nie potrafie odnale1a informacji o użytkowniku: ' . mysql_error());
  11.   $row2 = mysql_fetch_array($result2);
  12. */
  13. $id_zamowienia = mysql_insert_id($results);
  14.  
  15. /*
  16.   $sql = "SELECT * FROM tmpzam WHERE uid='" . $_POST['id'] . "'";
  17.   $result = mysql_query($sql, $conn)
  18.   or die('Nie potrafie odnale1a informacji o użytkowniku: ' . mysql_error());
  19.  
  20.   while($row = mysql_fetch_array($result)) {
  21.   $sql3 = "INSERT INTO dataz (zid, offid, ilosc) VALUES ('" . $row2['zid'] . "','" . $_row['offid'] . "','" . $_row['ilosc'] . "')";
  22.   $result3 = mysql_query($sql3, $conn)
  23.   or die('Nie potrafię utworzyć konta: ' . mysql_error());
  24.   }
  25. */
  26. $sql = "INSERT INTO dataz (zid, offid, ilosc) SELECT ".$id_zamowienia." AS zid, t.offid, t.ilosc FROM tmpzam t WHERE t.uid = ".$_POST['id'];
  27. $results = mysql_query($sql, $conn);
  28. if($results) {
  29. echo '<pre>Kopiowanie danych przebiegło pomyślnie!</pre>';
  30. } else {
  31. echo '<pre>Wystąpił błąd podczas kopiowania danych:</pre><pre>'.mysql_error().'</pre>';
  32. }
  33.  
  34. if (isset($_POST['id'])) {
  35. $sql = "DELETE FROM tmpzam WHERE uid='" . $_POST['id'] . "'";
  36. $result = mysql_query($sql, $conn)
  37. or die('Nie potrafie odnale1a has3a: ' . mysql_error());
  38. }
  39. redirect('index.php');
  40. break;

Zamiast wykonywać $sql2 możemy skorzystać z mysql_insert_id(), aby pobrać numer nowego zamówienia (pole zid w tabeli zamówienia musi być automatycznie inkrementowane).
Zamiast wykonywać w pętli kilka lub nawet więcej INSERT-ów możemy "zrzucić odpowiedzialność" na silnik bazy danych poprzez przedstawione wyżej zapytanie.

W opisie problemu nie wspomniałeś, że w kopiowaniu pośredniczy jeszcze jedna tabela, stąd moje poprzednie przypuszczenia.
Szczerze przyznam, że nie potrafię powiedzieć, dlaczego kopiowało/uje Ci jeden rekord. Aby to sprawdzić możesz sobie przed pętlą while podejrzeć obiekt $result (linia 25 w Twoim kodzie):
  1. echo '<pre>'; print_r($result); echo '</pre>';
Mgorka
nadal nie pomogło w tabeli dataz jest nadal wypełniane tylko jedno pole mianowicie zid;/
nospor
Używasz $_row która nigdzie nie jest określona.

Zastosuj się do podanych tu porad:
Temat: Jak poprawnie zada pytanie
między innymi włącz wyświetlanie wszystkich błędów. Ale zastosuj się też do innych
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.