Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] porownanie i dodawanie danych w bazie
Forum PHP.pl > Forum > Przedszkole
yasiu_kam
Witam. Mam takie skrytpy:
1. nowa_ksiazka.php
  1. <?php
  2. <html>
  3. <head>
  4. <title>Dodawanie nowych książek do biblioteki "Bib"</title>
  5. </head>
  6. <body background="tlo1.jpg">
  7.  
  8. <h1><p>Dodawanie nowych książek do biblioteki "Bib"</p></h1>
  9.  
  10. <form action="wstaw_ksiazke.php" method="post">
  11. <table border=0>
  12. <tr><td>Tytuł</td><td><input type=text name="tytul" maxlength=30 size=30><br></td></tr>
  13. <tr><td>Autor</td><td><input type=text name="autor" maxlength=30 size=30><br></td></tr>
  14. <tr><td>Gatunek</td><td>
  15. <select name="gatunekID">
  16. <option value=""selected>Wybierz gatunek książki...</option>
  17. <option value="1">Książki informatyczne</option>
  18. <option value="2">Książki historyczne</option>
  19. <option value="3">Poradniki i hobby</option>
  20. <option value="4">Ekonomia</option>
  21. <option value="5">Sztuka</option>
  22. <option value="6">Literatura</option> 
  23. <tr><td colspan=2><input type=submit value="Zapisz"></td></tr>
  24. </table> 
  25. </form>
  26. </body>
  27. </html>
  28. ?>

2.wstaw_ksiazke.php
  1. <html>
  2. <head>
  3. <title>Biblioteka "Bib"</title>
  4. </head>
  5. <body background="tlo1.jpg">
  6. <h1><p><font color=blue><MARQUEE behavior=alternate SCROLLAMOUNT=10>Biblioteka "Bib"</MARQUEE></font></p></h1> 
  7. <?php
  8. mysql_connect("localhost", "root", "krasnal")
  9.  or die (mysql_error());
  10.  
  11.  
  12. if (!$tytul || !$autor || !$gatunekID)
  13. {
  14.  echo "Nie podano wszystkich potrzebnych danych.<br>"
  15. ."Wróć do poprzedniej strony i spróbuj ponownie.";
  16.  exit;
  17. }
  18. $tytul = addslashes($tytul);
  19. $autor = addslashes($autor);
  20. $gatunekID = addslashes($gatunekID);
  21.  
  22. $zapytanie = mysql_query("SELECT ksiazki.tytul,autorzy.autor FROM ksiazki LEFT JOIN autorzy on ksiazk
    i.autorID=autorzy.autorID"
    ); 
  23. while($row = mysql_fetch_array($zapytanie)) 
  24. {
  25. if ($tytul == $row['tytul'] && $autor == $row['autor'])
  26.  { 
  27.  echo '</br>',"Tytuł książki: $tytul już istnieje w bazie";  
  28.  echo '</br>',"Autor książki: $autor już istnieje w bazie";  
  29.  } 
  30. else 
  31. $sql = "INSERT INTO `autorzy` (`autorID`, `autor`) VALUES ('', '$autor')"; 
  32.  $result = mysql_query($sql) or die(mysql_error()); 
  33.  echo '<h3>Poprawnie dodano autora książki</h3>'; 
  34.  $query = "SELECT MAX(autorID) FROM autorzy"; 
  35.  $Wynik=mysql_query($query); 
  36.  $Wiersz=mysql_fetch_row($Wynik); 
  37.  echo $Wiersz['0']; 
  38.  $query2 = "SELECT MAX(wydawnictwoID) FROM wydawnictwo"; 
  39.  $wynik2=mysql_query($query2); 
  40.  $wiersz2=mysql_fetch_row($wynik2); 
  41.  echo '</br>',$wiersz2['0']; 
  42.  $sql = "INSERT INTO `ksiazki` (`ksiazkiID`, `tytul`, `wydawnictwoID`, `autorID`, `gatunekID`,  `data_wypozyczenia`, `czytelnikID`) VALUES ('', '$tytul', '$wiersz2[0]', '$Wiersz[0]', '$gatunekID', '0000-00-00', '0')"; 
  43.  $result = mysql_query($sql) or die(mysql_error()); 
  44.  
  45.  echo '</br><h3>Poprawnie dodano książkę</h3>'; 
  46.  } 
  47. ?>
  48. </body>
  49. </html>

Już sam nie wiem co mam zrobic zeby to dzialalo bo teraz zwraca mi ok 120 wynikow (tyle mam ksiazek w bazie) ze dodano ksiazke, nastepne ok 120 wynikow jest ze ta ksiazka i autor juz istnieja...pomozcie bo nie daje rady z tym...
Darti
Skoro w 28 wierszu i tak to sprawdzasz, pozwól zatroszczyć się o to bazie danych:
  1. SELECT ksiazki.tytul,autorzy.autor FROM ksiazki LEFT JOIN autorzy ON ksiazki.autorID=autorzy.autorID WHERE ksiazki.tytul = $tytul AND autorzy.autor = $autor


Dzięki temu dowiesz się czy w bazie istnieje taki wpis (mysql_num_rows) i na podstawie tego możesz (lub nie) dodać go do bazy.
yasiu_kam
Przerobiłem to tak:
  1. <?php
  2. $zapytanie = mysql_query("SELECT ksiazki.tytul,autorzy.autor FROM ksiazki LEFT JOIN autorzy on ksiazk
    i.autorID=autorzy.autorID WHERE ksiazki.tytul = '$tytul' AND autorzy.autor = '$autor'"
    ); 
  3. $row = mysql_fetch_array($zapytanie); 
  4. $ile_znalezionych = mysql_num_rows($zapytanie);
  5. echo '<h2>','<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>','</h2>';
  6. {
  7. if ($tytul == $row['tytul'] && $autor == $row['autor'])
  8.  { 
  9.  echo '</br>',"Tytuł książki: $tytul już istnieje w bazie";  
  10.  echo '</br>',"Autor książki: $autor już istnieje w bazie";  
  11.  } 
  12. else 
  13. $sql = "INSERT INTO `autorzy` (`autorID`, `autor`) VALUES ('', '$autor')"; 
  14.  $result = mysql_query($sql) or die(mysql_error()); 
  15.  echo '<h3>Poprawnie dodano autora książki</h3>'; 
  16.  $query = "SELECT MAX(autorID) FROM autorzy"; 
  17.  $Wynik=mysql_query($query); 
  18.  $Wiersz=mysql_fetch_row($Wynik); 
  19.  echo $Wiersz['0']; 
  20.  $query2 = "SELECT MAX(wydawnictwoID) FROM wydawnictwo"; 
  21.  $wynik2=mysql_query($query2); 
  22.  $wiersz2=mysql_fetch_row($wynik2); 
  23.  echo '</br>',$wiersz2['0']; 
  24.  $sql = "INSERT INTO `ksiazki` (`ksiazkiID`, `tytul`, `wydawnictwoID`, `autorID`, `gatunekID`,  `data_wypozyczenia`, `czytelnikID`) 
  25.  VALUES ('', '$tytul', '$wiersz2[0]', '$Wiersz[0]', '$gatunekID', '0000-00-00', '0')"; 
  26.  $result = mysql_query($sql) or die(mysql_error()); 
  27.  
  28.  echo '</br><h3>Poprawnie dodano książkę</h3>'; 
  29.  }
  30. ?>


teraz gdy uruchamiam skrypt, ktory dodaje tytul i autora ktory juz istnieje to za pierwszym razem wyrzuca mi ze nie znaleziono i dodaje do bazy, gdy drugi raz uruchamiam ten skrypt wyswietla, że:

Ilość znalezionych pozycji: 1
Tytuł książki: ABC internetu już istnieje w bazie
Autor książki: Danuta Mendrala już istnieje w bazie
Notice: Undefined variable: sql in c:\usr\apache\httpd\html\wstaw_ksiazke.php on line 38
Zapytanie by�o puste

Za drugim razem nie dodaje juz ksiazki do bazy ale nadal nie dziala to tak jakbym chcial...

Wiem już o co chodzi smile.gif
ABC internetu nie napisala Danuta Mendrala tylko Krzysztof Pikoń, dlatego za pierwszym razem wyrzuciło mi, że nie znalazło książki i dodało do bazy, za drugim razem ABC internetu jest przypisane do Danuty Mendrali więc jest ok i wyswietla ze ksiazka istnieje smile.gif

dzieki wielkie Darti chyba wlasnie o to chodzilo
pozdro

Jednak nie do końca jest dobrze bo dodaje mi na końcu bazy autora, który już istnieje...Nie dałoby się zrobić tak, aby pobierało autorID i ewentualnie dopisywało nowy tytuł do autora, który już istnieje??
Darti
W takim przypadku dobrze byłoby w pierwszym pliku już zadziałać i zrobić oddzielnie przycisk "Dodaj autora" i wybierać go później np z listy rozwijanej (zamiast przez pole input text). Dzięki temu od razu dowiesz się, jakie ID ma autor w bazie i unikniesz dublowania autorów.
yasiu_kam
Nie tylko z autorem jest problem bo to samo jest z tytułami książek, nie wiem czy to dobry pomysł ze zrobieniem rozwijanej listy autorów lub tytułów bo jest ich po ok 120 pozycji. Nie da sie jakoś inaczej tego zrobić??
Darti
Zaprzęgnij w takim razie do pracy AJAXa (coś na kształt autocomplete).
Chodzi tutaj o uniknięcie sytuacji, w której błąd w postaci dodatkowej spacji w nazwie autora spowoduje ponowne jego dodanie. Dzięki AJAXowi można również w dynamiczny sposób (bez przeładowywania strony) zobaczyć, jakie książki tego autora już w bazie są.
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.