Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Dodawanie rekordów i łączenie dwóch tabel
Forum PHP.pl > Forum > Przedszkole
lukaszm89
Witam, jestem początkujący w dziedzinie php i mysql. Problem mam następujacy: mam dwie tabele (Klient i Naprawa). Potrzebuję zrobić dodawanie rekordów do Naprawy, najlepiej żeby z listy rozwijanej można było wybrać Nazwisko klienta (znajdujące się w tabeli klient) i podać pozostałe dane (znajdujące się w tabeli naprawa, np data_dostarczenia, data_odbioru, itp.). W tabeli klient klucz główny IDKlient, a w tabeli naprawa klucz obcy Klient_IDKlient. Czy jest taka możliwość (zapewne jest) i jak to zrobić? Poniżej kod który wykombinowałem ale nie może działać bo jest niekompletny... Podejrzewam że wystarczy skleic odpowiedni kod sql, żeby dobrze dodało, ale nie jestem pewien closedeyes.gif

  1.  
  2. <br/> Dodawanie naprawy:<br/><br/>
  3.  
  4. <?php
  5. $zapytanie = mysql_query ("SELECT * FROM Klient ORDER BY Nazwisko ASC");
  6. echo '<select name="Nazwisko">';
  7. echo '<option value="">Wybierz Klienta</option>';
  8. while($option = mysql_fetch_assoc($zapytanie)) {
  9. echo '<option value="'.$option['Nazwisko'].'">'.$option['Nazwisko'].'</option>';
  10. }
  11. echo '</select>';
  12. ?>
  13.  
  14. <form action="dodaj_naprawe.php" method="post">
  15. Data dostarczenia:<br />
  16. <input type="text" name="Data_dostarczenia" /><br />
  17. Data odbioru:<br />
  18. <input type="text" name="Data_odbioru" /><br />
  19. Opis usterki:<br />
  20. <input type="text" name="Opis_usterki" /><br />
  21. Opis naprawy:<br />
  22. <input type="text" name="Opis_naprawy" /><br />
  23. Koszt czesci:<br />
  24. <input type="text" name="Koszt_czesci" /><br />
  25. Koszt uslugi:<br />
  26. <input type="text" name="Koszt_uslugi" /><br />
  27.  
  28. <input type="submit" value="dodaj" />
  29. </form>
  30.  
  31. <?php
  32. // odbieramy dane z formularza
  33. $Data_dostarczenia = $_POST['Data_dostarczenia'];
  34. $Data_odbioru = $_POST['Data_odbioru'];
  35. $Opis_usterki = $_POST['Opis_usterki'];
  36. $Opis_naprawy = $_POST['Opis_naprawy'];
  37. $Koszt_czesci = $_POST['Koszt_czesci'];
  38. $Koszt_uslugi = $_POST['Koszt_uslugi'];
  39.  
  40. if($Data_dostarczenia and $Data_odbioru and $Opis_usterki and $Opis_naprawy and $Koszt_czesci and $Koszt_uslugi ) {
  41.  
  42. // dodajemy rekord do bazy
  43. $ins = @mysql_query("INSERT INTO Naprawa SET Data_dostarczenia='$Data_dostarczenia', Data_odbioru='$Data_odbioru', Opis_usterki='$Opis_usterki', Opis_naprawy='$Opis_naprawy', Koszt_czesci='$Koszt_czesci', Koszt_uslugi='$Koszt_uslugi'");
  44.  
  45. if($ins) echo "Rekord został dodany poprawnie";
  46. else echo "Błąd nie udało się dodać nowego rekordu";
  47.  
  48. }
  49.  
  50. ?>
Michael2318
http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

W zapytaniu połącz te tabele sobie za pomocą left join, łącząc je po ID.
mortus
Po pierwsze nigdzie nie "odbierasz" zmiennej Nazwisko. Po drugie nawet gdybyś tę zmienną odbierał, to jako jej wartość przekazujesz właśnie Nazwisko, a chyba powinieneś przekazać IDKlient-a. Chodzi mi o linię 9 i wartość atrybutu value. No i w końcu w samym zapytaniu INSERT brakuje kolumny Klient_IDKlient i odpowiadającej jej wartości.
lukaszm89
Ok dzięki, trochę to uporządkowałem, ale dalej nie działa, działa gdy uzupełnię wszystkie pola oprócz nazwiska, wtedy dodaje do tabeli, ale nie o to przecież chodzi closedeyes.gif

Poniżej kod, jakby ktoś mógł mi łopatologicznie wytłumaczyć co trzeba zmienić, a najlepiej poprawić kod tak żeby to działało...trochę mnie to przerosło biggrin.gif

  1. <?php
  2. echo '<form name="Nazwisko">';
  3. $Nazwisko = mysql_query ("SELECT * FROM Klient ORDER BY Nazwisko, ASC");
  4. echo '<select name="Nazwisko">';
  5. echo '<option value="">Wybierz Klienta</option>';
  6. while($option = mysql_fetch_assoc($Nazwisko)) {
  7. echo '<option value="'.$option['Nazwisko'].'">'.$option['Nazwisko'].'</option>';
  8. }
  9. echo '</select>'; echo '</form>';
  10. ?>
  11.  
  12. <form action="dodaj_naprawe.php" method="post">
  13.  
  14. Data dostarczenia:<br />
  15. <input type="text" name="Data_dostarczenia" /><br />
  16. Data odbioru:<br />
  17. <input type="text" name="Data_odbioru" /><br />
  18. Opis usterki:<br />
  19. <input type="text" name="Opis_usterki" /><br />
  20. Opis naprawy:<br />
  21. <input type="text" name="Opis_naprawy" /><br />
  22. Koszt czesci:<br />
  23. <input type="text" name="Koszt_czesci" /><br />
  24. Koszt uslugi:<br />
  25. <input type="text" name="Koszt_uslugi" /><br />
  26.  
  27. <input type="submit" value="dodaj" />
  28. </form>
  29.  
  30. <?php
  31. // odbieramy dane z formularza
  32. $Nazwisko = $_POST['Nazwisko'];
  33. $Data_dostarczenia = $_POST['Data_dostarczenia'];
  34. $Data_odbioru = $_POST['Data_odbioru'];
  35. $Opis_usterki = $_POST['Opis_usterki'];
  36. $Opis_naprawy = $_POST['Opis_naprawy'];
  37. $Koszt_czesci = $_POST['Koszt_czesci'];
  38. $Koszt_uslugi = $_POST['Koszt_uslugi'];
  39.  
  40. if($Data_dostarczenia and $Opis_usterki and $Nazwisko) {
  41.  
  42. // dodajemy rekord do bazy
  43. $ins = @mysql_query("INSERT INTO Naprawa SET Data_dostarczenia='$Data_dostarczenia', Data_odbioru='$Data_odbioru', Opis_usterki='$Opis_usterki', Opis_naprawy='$Opis_naprawy', Koszt_czesci='$Koszt_czesci', Koszt_uslugi='$Koszt_uslugi', Nazwisko='$Nazwisko' INNER JOIN Klient ON Naprawa.Klient_IDKlient=Klient.IDKlient");
  44.  
  45. if($ins) echo "Rekord został dodany poprawnie";
  46. else echo "Błąd nie udało się dodać nowego rekordu";
  47.  
  48. }
  49.  
  50. ?>
mortus
Kolego zamiast Nazwiska w formie pisemnej powinieneś przesłać odpowiednią wartość z kolumny IDKlient, a w tym celu musisz zamienić linię 7 w powyższym listingu na coś takiego:
  1. echo '<option value="'.$option['IDKlient'].'">'.$option['Nazwisko'].'</option>';

Póżniej tę zmienną odbierasz i z niej właśnie korzystasz w zapytaniu INSERT (zapomnij w tym przypadku o złączeniach, bo one tutaj nie są potrzebne):
  1. $IDKlient = $_POST['IDKlient'];
  2. // ...
  3. @ mysql_query("INSERT INTO Naprawa SET Data_dostarczenia='$Data_dostarczenia', Data_odbioru='$Data_odbioru', Opis_usterki='$Opis_usterki', Opis_naprawy='$Opis_naprawy', Koszt_czesci='$Koszt_czesci', Koszt_uslugi='$Koszt_uslugi', Klient_IDKlient=$IDKlient");


Są to absolutne podstawy, dlatego powinieneś sięgnąć do jakiegoś kursu PHP + MySQL.

PS: Oczywiście powyższy kod pod względem bezpieczeństwa pozostawia wiele do życzenia.
lukaszm89
Dzięki wielkie, już sobie z tym poradziłem. Mam jeszcze ostatnie pytanie, zrobiłem edytowanie klientów z tym, że przy edycji nie zapamiętuje wcześniejszych wartości. Jak wyedytuję tylko Imie, to nazwisko się kasuje z bazy, itd. Czy jest jakiś prosty sposób, żeby wpisywało w formularzu edycji obecne wartości zmiennych?
pianta_d
Pobierasz dane z tabeli i wstawiasz do <input value="">

EDIT

np.
  1. $zapyt = "SELECT `nazwa_wykazu` FROM `wykazy` WHERE `id_wykaz`=2";
  2. $wynik = mysql_query($zapyt);
  3. while ($wiersz = mysql_fetch_assoc($wynik))
  4. {
  5. echo '<input type="text" name="nazwa" value="'.$wiersz[nazwa_wykazu].'">';
  6. }
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.