Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z prostym kodem do sprawdzania rekordu
MalyKazio
post
Post #1





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Chcialem przed wykonaniem zapytania sprawdzic czy istnieje juz odpowiedni wpis w bazie. Kod nie działa a wygląda tak:

(...)
  1. <?php
  2. $zapytanie = "SELECT * FROM hodowle WHERE hodowla=$_POST[hodowla]";
  3. $wykonaj = mysql_query($zapytanie);
  4. $znaleziono = mysql_num_rows($wynonaj);
  5. echo $znaleziono;
  6.  
  7. if ($znaleziono == 0) {
  8. $query = "INSERT INTO hodowle VALUES ('','$_POST[hodowla]')";
  9. $wynik = mysql_query($query);
  10.  
  11. echo "Dodano do bazy danych hodowle $_POST[hodowla]";
  12. echo "<BR><a href="modules.php?op=modload&name=Ranking&file=hodowle">Dodaj kolejna hodowle</a>";
  13. } else {
  14. echo "Hodowla istnieje!";
  15. }
  16.  
  17.  
  18. mysql_close($link);
  19. ?>


Niby banalna sprawa ale nie dziala.
Nie działa już w tym: echo $znaleziono; miejscu. Nie wyświetla nic i za każdym razem dodaje do bazy (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Probowalem też z COUNT(*) as ilosc ale to samo.
co robię zle?

Ten post edytował MalyKazio 25.12.2005, 00:47:16
Go to the top of the page
+Quote Post
mikess
post
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.11.2005

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


Sprobuj takiego zapytania


  1. <?php
  2.  
  3. $zapytanie = 'SELECT * FROM hodowle WHERE hodowla="'.$_POST['hodowla'].'"';
  4.  
  5. ?>


i sprawdz czy przypadkiem zmienna $_POST['hodowla'] jest poprawnie napisana bo czasem duza litera moze narobic problemow (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował mikess 25.12.2005, 01:11:34
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A ja proponuję zmienić podejście.
IMO sprawdzanie czy coś jest już w bazie danych tylko po to żeby to dadać lub nie jest niepotrzebne. Bezsensowna operacja.

1. Zakładasz na pola, które mają być unikalne odpowieni klucz (UNIQUE)
2. Dodajesz rekord.
3. Jeśli takiego jeszcze nie było to wszystko spoko.
4. Jeśli juz był to baza nie dada danych a zwróci komunikat o kodzie błądu 1062.
Banalne i nie trzeba się męczyć.

BTW już komuś tak polecałem: Ponowny zapis do bazy po odświeżeniu strony. Jest tam jakiś kawałek kodu, który naświetli Ci sprawę.
Go to the top of the page
+Quote Post
MalyKazio
post
Post #4





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Dzięki wielkie mikess
Ale skad taka różnica w cudzysłowach? Wszędzie indziej działa...kiedy dodaje pola do bazy, kiedy wyciągam z bazy...
Czym różni się (z punktu widzenia interpretatora php) kod:
  1. <?php
  2. $zapytanie = 'SELECT * FROM hodowle WHERE hodowla="'.$_POST['hodowla'].'"';
  3. ?>


Od:

  1. <?php
  2. $zapytanie = "SELECT * FROM hodowle WHERE hodowla=$_POST['hodowla']";
  3. ?>
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
mikess
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.11.2005

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


podejrzewam ze zmienna $_POST['hodowla'] nie jest typu int wiec musi byc w cudzyslowiach bo baza danych przyjmuje wszystkie rekordy w cudzyslowiach oprocz integer-ów (chociaz int z cudzyslowiem tez dzialaja (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ) czyli wszystkie zmienne w zapytaniu do bazy musisz uzywac cudzysłowiów i mozesz stosowac cos takiego

  1. <?php
  2.  
  3. $zapytanie = "SELECT * FROM hodowle WHERE hodowla='".$_POST['hodowla']."'";
  4.  
  5. ?>


lub

  1. <?php
  2.  
  3. $zapytanie = 'SELECT * FROM hodowle WHERE hodowla="'.$_POST['hodowla'].'"';
  4.  
  5. ?>


oba powiny dzialac
Go to the top of the page
+Quote Post
MalyKazio
post
Post #6





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Dzięki wielkie za wyjaśnienie. Faktycznie, zmienna hodowla jest typu text. czyli wszedzie, gdzie dodaje do bazy danych i pobieram z niej to powinieniem ujac zmienne w takie skomplikowane cudzysłowy?
Go to the top of the page
+Quote Post
mikess
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.11.2005

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


własnie tak wszystko procz int musi byc w cudzysłowiach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
qbuz
post
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 4.02.2004

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


w apostrofach nie w cudzyslowach, najlepiej tak

  1. <?php
  2.  
  3. $zapytanie = 'SELECT * FROM hodowle WHERE hodowla=''.$_POST['hodowla'].''';
  4.  
  5. ?>


to tak jak w php - sa to po prostu stringi, nie moga byc niczym nie 'polaczone', w koncu skad MySQL by "wiedzialo", czy jakies kolejne slowo to jakies polecenie/funkcja, czy tylko slowo do wstawienia do bazy?

Ten post edytował qbuz 28.12.2005, 05:48:39
Go to the top of the page
+Quote Post
miedzna
post
Post #9





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


A może chodzi po prostu o literówkę w zmiennej w 4 linii:

  1. <?php
  2. $znaleziono = mysql_num_rows($wynonaj);
  3. ?>


przed tym używasz zmiennej $wykonaj a tu używasz $wynonaj

pozdrawiam
Go to the top of the page
+Quote Post
SongoQ
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
własnie tak wszystko procz int musi byc w cudzysłowiach

Ale i tak bazka sobie rzutuje na format pola (przewaznie tak jest), wiec najlepiej posylac wszystko jako string.
Go to the top of the page
+Quote Post
mikess
post
Post #11





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.11.2005

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


Cytat(qbuz @ 2005-12-28 04:47:20)
w apostrofach nie w cudzyslowach, najlepiej tak

  1. <?php
  2.  
  3. $zapytanie = 'SELECT * FROM hodowle WHERE hodowla=''.$_POST['hodowla'].''';
  4.  
  5. ?>

to nie ma az takie roznicy czy w cudzyslowiach czy w apostrofach bo mozna to zapisac na 4 sposoby

  1. <?php
  2.  
  3. $zapytanie = 'SELECT * FROM hodowle WHERE hodowla=''.$_POST['hodowla'].''';
  4.  
  5. ?>


  1. <?php
  2.  
  3. $zapytanie = "SELECT * FROM hodowle WHERE hodowla="".$_POST['hodowla'].""";
  4.  
  5. ?>


i te dwa sposoby co wyrzej napisalem

w sumie jak kto woli ale chyba gdzies czytalem ze apostrofy są szybciej interpretowane przez php (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
qbuz
post
Post #12





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 4.02.2004

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


Cytat
ale chyba gdzies czytalem ze apostrofy są szybciej interpretowane przez php

no to dobrze czytales i wlasnie dlatego napisalem, ze "tak najlepiej" ;]

w przypadku apostrofow ' ' php zwraca po prostu danego stringa, a w przypadku cudzyslowow " " parser php poszukuje jeszcze zmiennych itp. (parsuje ten kod), stad nieco dluzsze wykonywanie

Ten post edytował qbuz 29.12.2005, 03:54:05
Go to the top of the page
+Quote Post
SongoQ
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
$zapytanie = "SELECT * FROM hodowle WHERE hodowla=\"".$_POST['hodowla']."\"";


Ten kod jest niepoprawny, poniewaz w SQLu " sie daje w nazwach tabel, pol itd a nie do stringu. Do stringu uzywa sie '
Go to the top of the page
+Quote Post
mikess
post
Post #14





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.11.2005

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


Cytat(SongoQ @ 2005-12-29 10:59:58)
Cytat
$zapytanie = "SELECT * FROM hodowle WHERE hodowla=\"".$_POST['hodowla']."\"";


Ten kod jest niepoprawny, poniewaz w SQLu " sie daje w nazwach tabel, pol itd a nie do stringu. Do stringu uzywa sie '


jezeli to co napisales jest niezgodne ze standardem SQL to sie z Tobą zgodze ale jezeli nie to niestety musze Cie zmartwic ale ten kod równiez dziala (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
SongoQ
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Lepiej pisac cos co na kazdej bazie bedzie dzialac niz pozniej meczyc sie ze cos jest nie tak.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 20:43