Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php mysql] wyswietlanie tabli w przegladarce
Forum PHP.pl > Forum > Przedszkole
jjerry
witam, jako ze jestem bardzo poczatkujacy moje pytanie pewnie wyda sie wam glupi i mimo iz ja mecze sie juz 2 dni nie moge sobie poradzic, w zwiazku z tym prosze o pomoc:

oto kod dodawania ksiazki do bazy magazyn (oczywiscie tabela i baza istnieje)
a przedstawione skrypty sa w 1 pliku

  1. <form action="dodaj.php" method="post">
  2. <tr><td>tytul</td><td> <input type="text" name="tytul" /> </td></tr>
  3. <tr><td>autor</td><td> <input type="text" name="autor" /> </td></tr>
  4. <tr><td>ilosc</td><td> <input type="text" name="ilosc" /> </td></tr>
  5. <tr><td></td><td> <input type="submit" value="dodaj" /> </td></tr>
  6. </table>
  7. </form>
  8. <hr />

  1. <?php
  2. $laczenie = mysql_connect('127.0.0.1','root','krasnal');
  3. $wybierz = mysql_query("use magazyn");
  4. $tworz = "create table ksiazki (id int unsigned not null auto_increment, tytul varchar(24) not null, autor varchar(24) not null, ilosc int not null, primary key (id))";
  5. $dodaj = ("insert into ksiazki values('0', '$_POST[tytul]','$_POST[autor]','$_POST[ilosc]')");
  6.  
  7.  
  8. if ($laczenie && $wybierz) {
  9. echo 'polaczyles sie z baza <br />';
  10. if (mysql_query($tworz)) {
  11. echo 'tabela stworzona';
  12. } else {
  13. echo 'tabela nie stworzona '.mysql_error();
  14. if ($_POST[tytul] <> NULL && $_POST[autor] <> NULL && $_POST[ilosc] > 0) {
  15. mysql_query($dodaj); # PROBELM WYSTEPUJE TUTAJ
  16. echo '<br />dodano rekord';
  17. } 
  18. }
  19. } else {
  20. echo 'brak polaczenia <br />';
  21. }
  22.  
  23.  
  24.  
  25. ?>

chodzi mi o to zeby w 15 linijce przed zapytaniem mysql wprowadzic instrukcje if zeby sprawdzala czy dana ksiazka jest juz w magazynie a jesli tak zeby jej nie dodawala, i aby po kazdorazowym dodaniu ksiazki wyswietlony zostal stan magazynu, probowalem select * from ksiazki ale jakos nie moge sobie poradzic, przypominam ze jestem poczatkujacy wiec bede wdzieczny za objasnienia,
z gory dzieki
Kicok
  1. <?php
  2. $tworz = "create table ksiazki (id int unsigned not null auto_increment, tytul varchar(24) not null, autor varchar(24) not null, ilosc int not null, primary key (id))";
  3.  
  4. // (...)
  5.  
  6. if (mysql_query($tworz)) {
  7. echo 'tabela stworzona';
  8. } else {
  9. echo 'tabela nie stworzona '.mysql_error();
  10. ?>

questionmark.gif? Ty chcesz tworzyć tą tabelę przy każdym wywołaniu strony?

Po drugie nie wstawiaj wartości do kolumny z auto_increment. Poczytaj sobie jak inaczej można zapisać zapytanie INSERT: http://home.pl/pomoc/1699

Po trzecie najpierw sprawdź SELECT'em czy jest już książka o danym tytule i autorze w bazie - jeśli nie (mysql_num_rows" title="Zobacz w manualu php" target="_manual) to dopiero potem wstawiaj nowy wiersz do tabeli.
Gość
questionmark.gif? Ty chcesz tworzyć tą tabelę przy każdym wywołaniu strony? - nie, jesli tabela istnieje zwracany jest blad i wykonywana instrukcja else (u mnie w kazdym razie to dziala)

Po trzecie najpierw sprawdź SELECT'em czy jest już książka o danym tytule i autorze w bazie - no wlasnie tego jak do tej pory nie potrafie zrobic, jak to wykonac? gdy select ma zwracac prawde lub fausz lub wyswietlic czy jest dana ksiazka to otzrymuje jedynie "resource id#3"
Kicok
mysql_fetch_row" title="Zobacz w manualu php" target="_manual
mysql_fetch_array" title="Zobacz w manualu php" target="_manual
mysql_fetch_assoc" title="Zobacz w manualu php" target="_manual

do wyboru do koloru


A co do tego błędu w przypadku nieznalezienia tabeli w bazie, to upewnij się, że jest ci to do szczęścia potrzebne...
Gość
no moze faktycznie nie jest to profesjonalne smile.gif
dzieki za nfo
jjerry
zastosowalem sie do rad ale teraz mam :

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\P_H_P\sklep\dodaj.php on line 27
wierszy

dodam ze linia 27 to "$num_rows = mysql_fetch_row($result);"
kossa
Ten błąd oznacza że sknociłeś coś w zapytaniu SQL, np. odwołujesz się do nieistniejącego pola w tabeli (sprawdź literówki)

Łukasz
=kokos=
1. Hmm, niepotrzebnie za każdym razem gdy uruchamiasz skrypt tworzysz tabelę. Tworzenie baz, oraz strukturę tabel najlepiej wrzucić do jednego pliku np. o nazwie install.php i uruchamiasz go tylko raz.

2. Poleceniem SELECT sprawdź jakie ksiązki w bazie już istnieją.

3. Proponuję dodać jeszcze jedno pole do tabeli ksiązki a mianowicie kod ISBN. Jest to niepowtarzalny dziesięciocyfrowy identyfikator książki.

4. Sprawdzać przy pomocy ISBN'a czy taki wpis już istnieje czy nie. Porównaj to co sprawdziłeś poleceniem SELECT z $_POST['isbn']

5. Jeśli po dodaniu chcesz wyswietlić stan magazynu użyj funkcji header

P.S. Jeśli poda jakaś wartość do pola w tabeli które jest auto_increment to i tak wartość ta zostanie zmieniona na taką jaka powinna być, z tym że nie jestem pewien czy powinna ona być w apostrofach. Ale jednak lepiej omijać to pole winksmiley.jpg
MagnuM
A Wam wszystkim ciężko opisać problem, tylko z błota w bagno kolege wprowadzacie?

Więc może ja spróbuje pomóc. Opiszmy więc problem.
  1. <?php
  2. $laczenie = mysql_connect('127.0.0.1','root','krasnal');
  3. $wybierz = mysql_query("use magazyn");
  4. $tworz = "create table ksiazki (id int unsigned not null auto_increment, tytul 
  5. varchar(24) not null, autor varchar(24) not null, ilosc int not null, primary key (id))";
  6. $dodaj = ("insert into ksiazki values('0', '$_POST[tytul]','$_POST[autor]','$_POST[ilosc]')");
  7.  
  8. if ($laczenie && $wybierz) {
  9. echo 'polaczyles sie z baza <br />';
  10. if (mysql_query($tworz)) {
  11. echo 'tabela stworzona';
  12. } else {
  13. echo 'tabela nie stworzona '.mysql_error();
  14. if ($_POST[tytul] <> NULL && $_POST[autor] <> NULL && $_POST[ilosc] > 0) {
  15. mysql_query($dodaj); # PROBELM WYSTEPUJE TUTAJ
  16. echo '<br />dodano rekord';
  17. } 
  18. }
  19. } else {
  20. echo 'brak polaczenia <br />';
  21. }
  22. ?>

Do linijki 2 jest dobrze, a w niej:
  1. <?php
  2. mysql_query("use magazyn");
  3. ?>

Jeżeli nie korzystasz z mysql w formie okienkowej, tylko łączysz się za pomocą standardowych funkcji w php, to polecenie wygląda nieco inaczej:
  1. <?php
  2. $wybierz = mysql_select_db('magazyn');
  3. ?>

Linia nr. 3. Niby wszystko ok, ale zapewne jesteś nastawiony na przyjmowanie tego typu zgłoszeń, czyli książek, więc śmiało możesz ręcznie (poprzez np. phpMyAdmin'a) wstawić tabelę do bazy danych aby nie przejmować się tym później w skrypcie. Możesz śmiało wyrzucić tę linijkę.

Linia nr. 5. Zapytanie możesz śmiało zadeklarować w momencie w którym będzie ono potrzebne więc linijka jest do przeniesienia.

Przechodzimy do if'a. Dobrze jest sprawdzana pierwsze zmienna, czyli '$laczenie', druga zaś, tak jak wcześniej wspomniałem, jest zbędna.

Przejdźmy do pierwszego zagnieżdzonego if'a:
  1. <?php
  2. if (mysql_query($tworz))
  3. ?>

- to zapytanie spróbuje utworzyć tabelę w bazie danych, co wywoła niepotrzebnie zapytanie, to już omawialiśmy.

Dalej:
  1. <?php
  2. if ($_POST[tytul] <> NULL && $_POST[autor] <> NULL && $_POST[ilosc] > 0)
  3. ?>

Jeżeli chodzi o tablice asocjacyjne to należy nazwy pól ujmować w apostrofy lub cudzysowy, czyli ilustrując przykładem:
  1. <?php
  2. $_POST['tytul'] // a nie $_POST[tytul]
  3. ?>
.
I tutaj w tym miejscu należy wykonać zapytanie. Nie jest koneiczne najpierw umieszczanie treści zapytania w zmiennej a później deklarowanie w funkcji mysql_query(), bo to niepotrzebne zajmowanie pamięci.
Czyli teraz deklarujemy zapytanie:
  1. <?php
  2. $zapytanie = mysql_query("INSERT INTO ksiazki VALUES('". $_POST['tytul'] ."', '". $_POST['autor'] ."', '". $_POST['ilosc'] ."') ");
  3. ?>

W tym miejscu zanim wypiszemy treść: 'dodano rekord', przydałoby się sprawdzić czy zapytanie zostało poprawnie wykonane. Pomoże nam w tym zmienna $zapytanie, do której 'wrzucony' został efekt wykonywania zapytania.
  1. <?php
  2. if ( $zapytanie )
  3. {
  4. echo 'dodano rekord <br />';
  5. }
  6. ?>

Ok więc omówinie skryptu chyba zakończone. Przejdźmy do dalszych pytań.
Cytat
chodzi mi o to zeby w 15 linijce przed zapytaniem mysql wprowadzic instrukcje if zeby sprawdzala czy dana ksiazka jest juz w magazynie a jesli tak zeby jej nie dodawala

Powinniśmy więc zaraz za sprawdzenie połączenia wywołać zapytanie które sprawdzi czy istnieje dana książka w bazie danych. Nie mamy tutaj neistety zabardzo jak zidentyfikować książki, np. po identyfikatorze ISBN, więc posłużymy się tytułem.
  1. <?php
  2. $zapytanie = mysql_query("SELECT tytul FROM ksiazki WHERE tytul = '". $_POST['tytul'] ."' ");
  3. $rows = mysql_num_rows( $zapytanie ); // zmienna $tablica zawiera dane dotyczace ilosci rekordow z tytulem podanym w for
    mularzu
  4. // pozostaje sprawdzic czy liczba jest wieksza od 0
  5. if ( $rows > 0 )
  6. {
  7. echo 'książka o podanym tytule znajduje się już w bazie danych';
  8. } else
  9. {
  10. // dalsza część skryptu związana z dodaniem książki do bazy
  11. }
  12. ?>

Cytat
aby po kazdorazowym dodaniu ksiazki wyswietlony zostal stan magazynu

Więc zaraz za funkcją dodającą książkę należy wyświetlić stan:
  1. <?php
  2. $zapytanie = mysql_query("SELECT * FROM ksiazki"); // brak klauzuli WHERE oznacza że pobrane zostan szystkie rekordy z tabeli
  3. while( $tablica = mysql_fetch_assoc( $zapytanie ) )
  4. {
  5. echo 'ID: '. $tablica['id'] .' tytuł '. $tablica['id'] .'<br />';
  6. }
  7. ?>


Ok. Troszkę namotałem więc przedstawię jak to powinno wyglądać w caej okazałości.
  1. <?php
  2. $laczenie = mysql_connect('127.0.0.1','root','krasnal');
  3. $wybierz = mysql_select_db('magazyn');
  4. if ( $laczenie && $wybierz )
  5. {
  6. echo 'polaczyles sie z baza <br />';
  7.  
  8. $zapytanie = mysql_query("SELECT tytul FROM ksiazki WHERE tytul = '". 
  9.  
  10. $_POST['tytul'] ."' ");
  11. $rows = mysql_num_rows( $zapytanie ); // zmienna $tablica zawiera dane dotyczace 
  12.  
  13. ilosci rekordow z tytulem podanym w formularzu
  14.  // pozostaje sprawdzic czy liczba jest wieksza od 0
  15. if ( $rows > 0 )
  16. {
  17. echo 'książka o podanym tytule znajduje się już w bazie danych';
  18. } else
  19. {
  20.  
  21. if ( $_POST['tytul'] <> NULL && $_POST['autor'] <> NULL )
  22. {
  23. $zapytanie = mysql_query("INSERT INTO ksiazki VALUES('". $_POST['tytul'] 
  24.  
  25. ."', '". $_POST['autor'] ."', '". $_POST['ilosc'] ."') ");
  26. if ( $zapytanie )
  27. {
  28. echo 'dodano rekord <br />';
  29.  
  30. $zapytanie = mysql_query("SELECT * FROM ksiazki"); // brak klauzuli 
  31.  
  32. WHERE oznacza &#380;e pobrane zostan szystkie rekordy z tabeli
  33. while( $tablica = mysql_fetch_assoc( $zapytanie ) )
  34. {
  35.  echo 'ID: '. $tablica['id'] .' tytuł '. $tablica['id'] .'<br />';
  36. }
  37. }
  38. }
  39. }
  40. } else
  41. {
  42. echo 'brak polaczenia <br />';
  43. }
  44. ?>


Uff... chyba wszystko jest ok

EDIT: oops, zapomnialem o wybraniu bazy, omg - juz dodałem do tego ostatniego kodu
jjerry
magnum wielkie dzieki juz dziala, (musialem troszku zmienic) wszystko pieknie dziala,
wielkie dzieki za odpowiedzi

po przerobkach wyglada MNIEJ WIECEJ* to tak:

  1. <form action="dodaj.php" method="post"> <!-- rozpoczecie formularza-->
  2. <tr><td>tytul </td><td> <input type="text" name="tytul" /> </td></tr>
  3. <tr><td>autor </td><td> <input type="text" name="autor" /> </td></tr>
  4. <tr><td>ilosc </td><td> <input type="text" name="ilosc" /> </td></tr>
  5. <tr><td>isbn </td><td> <input type="text" name="isbn" /> </td></tr>
  6. <tr><td> </td><td> <input type="submit" value="dodaj" /> </td></tr>
  7. </table>
  8. </form> <!-- koniec formularza-->
  9. <hr />

  1. <?php
  2. $laczenie = (@mysql_connect('127.0.0.1','root','krasnal')); #zmienna laczenie posiada wartosc polaczenia z baza danych
  3. $wybor_bazy = mysql_select_db('magazyn'); #zmienna wybor_bazy posiada wartosc wyboru bazy danych
  4.  
  5. $czy_ksiazka_istnieje = mysql_query #zmienna ... sprawdza czy dany isbn powtarza sie w tabeli ->
  6. ("select isbn from ksiazki where isbn ='".$_POST['isbn']."'"); #<-
  7.  
  8. $dodaj = ("insert into ksiazki values
  9. ('0', '$_POST[tytul]', '$_POST[autor]', '$_POST[ilosc]', '$_POST[isbn]')"); #zmienna dodaje dane do formularza
  10. $sprawdz = mysql_num_rows($czy_ksiazka_istnieje); #sprawdza czy zmienna czy ksiazka istnieje jest prawdiwa 
  11. $wyswietl = mysql_query("select * from ksiazki"); #zaznacza * z tabeli ksiazka
  12.  
  13. if ($laczenie && $wybor_bazy) { #jesli polaczyles sie z mysql i wybrales baza magazyn to:
  14. echo "polaczyles sie z baza mysql, wybrano tabele magazyn<br />";
  15. if ($sprawdz > 0) { #..to sprawdz czy ksiazka (isbn) wystepuje w tabeli ksiazki
  16. echo "taka ksiazka juz wystepuje w bazie<hr />";
  17. while ($ck = mysql_fetch_assoc($wyswietl)) { #jesli tak to wyswietl zawartosc magazynu 
  18. echo $ck['id'].' '.$ck['autor'].' '.$ck['tytul'].' '.$ck['ilosc'].' '.$ck['isbn'].'<br />';
  19. }
  20. } else { #jesli nie
  21. if ($_POST['tytul'] != NULL && $_POST['autor'] != NULL && $_POST['ilosc'] != NULL && $_POST['isbn'] != NULL) { #wyswietl zawartosc magazynu sprawdzajac czy uzytkownik podal wszytskie dane
  22. mysql_query($dodaj); #oraz dodaj ksiazke do tabeli
  23. echo "dodano nastepujaca pozycja: ".$_POST[isbn]."<hr />";
  24. while ($ck = mysql_fetch_assoc($wyswietl)) {
  25. echo $ck['id'].' '.$ck['autor'].' '.$ck['tytul'].' '.$ck['ilosc'].' '.$ck['isbn'].'<br />';
  26. } # i na koniec znow wyswietl zawartosc magazynu
  27. } else {
  28. echo "nie podales pelnych informacji o produkcie";
  29. }
  30. }
  31. } else {
  32. echo "nie udalo sie polaczyc z baza mysql lub wybrac tabeli magazyn<br />";
  33. }
  34. ?>


i co najwazniejsze dziala
*mniej wiecej bo do forum wstawiaja sie znaczniki \ przed " itp
kossa
Dobrze że wstawia ukośniki :-) (to dla bezpieczeństwa)

Wyświetlając dane na stronie usuwaj je za pomocą funkcji: stripslashes

aby je dodawać stosuje się funkcję: addslashes

Łukasz
jjerry
Cytat(kossa @ 7.08.2006, 19:41 ) *
Wyświetlając dane na stronie usuwaj je za pomocą funkcji: stripslashes

- usuwac z pamieci czy skad? mam rozumiec ze to takze dla bezpieczenstwa tak?

Cytat(kossa @ 7.08.2006, 19:41 ) *
aby je dodawać stosuje się funkcję: addslashes

- dodawac, hmmm ale gdzie?
kossa
usuwasz ukośniki na stronie (stripslashes) aby ładnie wyglądało :-) nie są potrzebne przecież, tylko dodając do bazy robisz to dla bezpieczeństwa ale chyba na stronie nie chcesz mieć tytułu książki \"Sierotka Marysia\" tylko "Sierotka Marysia" bez ukośnikow :-)

Łukasz
Gość
aha smile.gif
dzieki za nfo bede pamietal
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.