Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z prostym kodem do sprawdzania rekordu
Forum PHP.pl > Forum > PHP
MalyKazio
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 sad.gif
Probowalem też z COUNT(*) as ilosc ale to samo.
co robię zle?
mikess
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 biggrin.gif
mike
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ę.
MalyKazio
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. ?>
questionmark.gif
mikess
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 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
MalyKazio
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?
mikess
własnie tak wszystko procz int musi byc w cudzysłowiach smile.gif
qbuz
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?
miedzna
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
SongoQ
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.
mikess
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 tongue.gif
qbuz
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
SongoQ
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 '
mikess
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 winksmiley.jpg
SongoQ
Lepiej pisac cos co na kazdej bazie bedzie dzialac niz pozniej meczyc sie ze cos jest nie tak.
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.