Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie czy rekord istnieje.
Forum PHP.pl > Forum > Przedszkole
MalyKazio
Pytanie może proste ale wyszukiwarka mi nie pomogła. Mój problem polega na tym, że mam formularz dodajacy rekordy do bazy danych. Wszystko działa, ładnie sie dodaje tylko po pewnym czasie rekordy mogą zacząć się powtarzać a ręczne sprawdzanie czy wpis istnieje jest męczące.
Jak zrobić żeby przed dopisaniem do bazy danych sprawdzało czy już taki wpis jest? Powiedzmy, że chcę dodać imie i nazwisko.
Wiem jak skonsturować zapytanie do sprawdzenia:
z formularza powiedzmy jest pole "nazwisko"
  1. SELECT nazwisko
  2. FROM tabela WHERE nazwisko=$_POST[nazwisko]


Tylko jak teraz zrobić żeby w przypadku gdy istnieje już taki wpis skrypt pisał powiedzmy "Wpis już istnieje"?
SongoQ
  1. SELECT COUNT(*) AS ilosc
  2. FROM tabela WHERE nazwisko=$_POST[nazwisko]


Jesli ilosc == 1 to juz istnieje i nie dodajesz.
Mozesz tez tak zrobic ze nazwisko jest unikalnym indeksem i wtedy zawsze dodajesz do bazy i sprawdzasz bledy.
ein
if (istnieje)
{
dodaj do bazy }
else
{
wyswietl fomularz i dodaj informacje: "wpis istnieje"
}

dla ulatwienia formularz stworz w jakims innym pliku i go importuj

@SongoQ
no jasne,jasne
SongoQ
@ein
Powinno byc
if (!istnieje)
{
MalyKazio
Hmm... czy może zatem być coś takiego:

  1. <?php
  2. $zapytanie = "SELECT count(*) FROM table WHERE nazwisko=$_POST[nazwisko]"
  3. $wykonaj = mysql_query($zapytanie);
  4. $row = mysql_fetch_array($wykonaj);
  5. print $row[0]; */ zeby wiedziec czy cos jest (rozwiazanie testowe */
  6. if ($row[0] == 0) {wtedy dodajemy}
  7.  
  8. ?>


Dobrze mysle?
SongoQ
Dokladnie w ten sposob co napisales. No i czy trudno bylo?
MalyKazio
Może i nie trudo ale sam nie wpadłbym, że to ma być akurat $row[0] Reszta to już pryszcz. Czasem jedna mała podpowiedź wystarcza do rozwiązania ogromnego problemu użytkownika smile.gif Dzięki.
SongoQ
Ale radze uzywac tablicy asocjacyjnej
http://pl2.php.net/manual/pl/function.mysql-fetch-array.php
MalyKazio
Ale chyba, o ile dobrze wyczytalem, przy uzyciu mysql_fetch_array domyślnie ustawione jest MYSQL_BOTH wiec można uzywać obu metod $row[0] i $row[pole]
SongoQ
Piszac to mialem na mysli uzywanie:
  1. <?php
  2. $zapytanie = "SELECT count(*) AS ilosc FROM table WHERE nazwisko=$_POST[nazwisko]";
  3. .
  4. .
  5. .
  6. if ($row['ilosc'] == 0) 
  7.  
  8. ?>


Mniejsza ilosc bledow
dtb
sprostowanie do kodu malykazia:

  1. <?php
  2. $wykonaj = mysql_query('SELECT count(*) FROM table WHERE nazwisko='.$_POST[nazwisko]);
  3. if (mysql_fetch_array($wykonaj)) {wtedy dodajemy} // kazdy "chyba" wie ze gdy nie ma juz wiecej rekordow zwraca false!
  4. ?>
SongoQ
Cytat
sprostowanie do kodu malykazia:

Nie wiem co bylo celem Twojej wypowiedzi ale zawsze bedzie zwrocony 1 rekord bo masz COUNT, jesli nawet nie ma rekordow w bazie zostanie i tak zwrocony 1 rekord. Oczywiscie pod warunkiem ze zapytanie jest poprawne. Wiec to co napisales jest bledne.
dtb
nie zauwazylem tego count:

  1. <?php
  2. $wykonaj = mysql_query('SELECT * FROM table WHERE nazwisko='.$_POST[nazwisko]);
  3. if (mysql_fetch_array($wykonaj)) {wtedy dodajemy} // kazdy "chyba" wie ze gdy nie ma juz wiecej rekordow zwraca false!
  4. ?>
SongoQ
Cytat
nie zauwazylem tego count:


Oj widze ze na temat wydajnosci baz to cieniutko z Toba. Radze poczytac jakas ksiazeczke bo piszac w ten sposob przygoda programisty moze sie zle skonczyc. Pomysl logicznie jesli zapytanie takie zwroci Ci 1 GB rekordow a ty taki warunek sprawdzasz. jest w tym sens?? Radze nieraz pomyslec.
MalyKazio
Kurcze, to ja już sam nie wiem sad.gif Jak to w końcu powinno wyglądać? Sam sobie nie daję rady sad.gif
SongoQ
Cytat
Kurcze, to ja już sam nie wiem sad.gif Jak to w końcu powinno wyglądać? Sam sobie nie daję rady


Sam sobie napisales odpowiedz wystarczy ze wykorzystasz to w swoim projekcie smile.gif
MalyKazio
Ok, dzięki za pomoc i cierpliwość smile.gif

No i to nie działa. Mam taki kod:

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


Zawsze dodaje do bazy danych sad.gif
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.