Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] porownanie i dodawanie danych w bazie
yasiu_kam
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.02.2007

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


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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


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.


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
yasiu_kam
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.02.2007

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


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??

Ten post edytował yasiu_kam 18.05.2007, 15:01:58
Go to the top of the page
+Quote Post
Darti
post
Post #4





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


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.


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
yasiu_kam
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.02.2007

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


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ć??
Go to the top of the page
+Quote Post
Darti
post
Post #6





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


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ą.


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 07:52