Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie duplikatów
Forum PHP.pl > Forum > PHP
rafik73
Witam
Mam problem z czujką wykrywającą duplikaty. Dane są zawężane do rekordów o określonej dacie,np:
data 2015-07-20
istnieją rekordy:
1 A B C
2 D E F
3 G H I
gdzie liczby to id_tssk.

$id_tssk to id edytowanego rekordu.
Gdy chcę edytować 1 rekord i zamienić powiedzmy C na F to odpowiedni warunek if powinien to wychwycić (F istnieje w 2 rekordzie)
a tu żaden z warunków nie reaguje i przechodzi do działania 6. Co robię nie tak?

  1. $same_query = mysql_query("SELECT * FROM `tssk` WHERE `data_punktu`='$data_punktu' AND `id_tssk`<>'$id_tssk'") or die('Błąd zapytania');
  2. while($same=mysql_fetch_array($same_query)){
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. if( warunek 1) {
  10. działanie 1
  11. }
  12.  
  13. elseif(warunek 2) {
  14. działanie 2
  15. }
  16.  
  17.  
  18. elseif( warunek 3) {
  19. działanie 3
  20. }
  21.  
  22. elseif( warunek 4 ) {
  23. działanie 4
  24. }
  25. } // tu się zamyka pętla while
  26.  
  27.  
  28. if (warunek 5) {
  29. działanie 5
  30. }
  31. else
  32. {
  33. działanie 6
  34. }


Mam wrażenie, jakby nie działała pętla while
Zapytanie jest OK,bo testowałem 'echem'
Poprawcie mnie,jeśli się mylę, przebieg tego kodu to:
Zapytanie mysql-jest rekord-warunek1-false-warunek2-false-warunek3-false-warunek4-false i tu pętla
i kolejne zapytanie. Jeśli któryś z warunków od 1 do 4 true to odpowiednie działanie. Jeśli pętla
się zakończy (koniec rekordow), to wtedy przejście do warunku 5.
CuteOne
To co napisałeś jest poprawne ale nie możemy ci pomóc znając "(...) warunek X, działanie X". Daj prawdziwy kod, najlepiej z przykładowymi danymi wejściowymi (data, id_tssk)
rafik73
  1. $data_punktu=$_GET['data_punktu'];
  2. $nr_punktu=$_GET['nr_punktu'];
  3. $student=$_GET['student'];
  4. $nr_lekcji=$_GET['nr_lekcji'];
  5. $pomoc=$_GET['pomoc'];
  6. $ocena=$_GET['ocena'];
  7. $uwagi=$_GET['uwagi'];
  8. $id_tssk=$_GET['id_tssk'];
  9.  
  10.  
  11.  
  12. $tobigpoint="Komunikat 1";
  13. $samepunkt="Komunikat 2";
  14. $samestudent="Komunikat 3";
  15. $samepomoc="Komunikat 4";
  16.  
  17. $same_query = mysql_query("SELECT * FROM `tssk` WHERE `data_punktu`='$data_punktu' AND `id_tssk`<>'$id_tssk'") or die('Błąd zapytania');
  18. while($same=mysql_fetch_array($same_query)){
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. if( $nr_punktu > 3) { //numer punktu max 3
  26. header( 'Location:../tssk/tssk_bydate_edit_same.php?id_date='.$data_punktu.'&same='.$tobigpoint.'' ) ;
  27. }
  28.  
  29. elseif( $same['nr_punktu'] == $nr_punktu) { // numer punktu nie może się powtórzyć
  30. header( 'Location:../tssk/tssk_bydate_edit_same.php?id_date='.$data_punktu.'&same='.$samepunkt.'' ) ;
  31. }
  32.  
  33.  
  34. elseif( $same['student'] == $student) { //student nie może się powtórzyć
  35. header( 'Location:../tssk/tssk_bydate_edit_same.php?id_date='.$data_punktu.'&same='.$samestudent.'' ) ;
  36. }
  37.  
  38. elseif( $same['pomoc'] == $pomoc AND $same['pomoc'] <> 1 ) { //pomocnik nie może się powtórzyć
  39. header( 'Location:../tssk/tssk_bydate_edit_same.php?id_date='.$data_punktu.'&same='.$samepomoc.'' ) ;
  40. }
  41. }
  42.  
  43.  
  44. if (empty($data_punktu) OR empty($nr_punktu) OR empty($nr_lekcji)) { //czujka pustych pól
  45. header( 'Location:../tssk/tssk_bydate_edit_empty.php?id_date='.$data_punktu.'' ) ;
  46. }
  47. else
  48. {
  49. mysql_query("SET NAMES 'utf8'");
  50.  
  51. mysql_query("UPDATE `tssk` SET `data_punktu`='$data_punktu',`nr_punktu`='$nr_punktu',`lekcja`='$nr_lekcji',`pomoc`='$pomoc',`ocena`='$ocena',`tssk_uwagi`='$uwagi',`student`='$student' WHERE `id_tssk`='$id_tssk'")
  52. or die('Błąd ania');
  53. header( 'Location:../tssk/tssk_bydate_edit_confirm.php?id_date='.$data_punktu.'' ) ;
  54. }


Formularz wyświetla 3 rekordy
CuteOne
Zmień mysql_fetch_array() na mysql_fetch_assoc()
nospor
@CuteOne to nie ma znaczenia... zajrzyj do manuala

@rafik niestety strasznie namotales w tym kodzie
1) Samo wywolanie header nie powoduje zakonczenia dzialania kodu. Tak ze ten Twoj kod moze na dobrą sprawę wygenerować 100 header za jednym zamachem. Jesli chcesz by header konczyl sprawe to musisz wykonac EXIT.
2) Sprawdz w ogole jakie sa DOKLADNIE wartosci ktore sprawdzasz w warunkach a bedziesz wiedzial czemu ci do jednego warunku wchodzi a do innego nie. To są naprawde proste sprawy
3) Tu masz całą masę przydatnych wskazowek ktore masz zrobic
Temat: Jak poprawnie zada pytanie

4) `id_tssk`<>'$id_tssk'
Jak rozumiem id to liczba wiec tak ma byc
`id_tssk`<>$id_tssk
Odrozniaj teksty od liczby
rafik73
nospor jak zwykle niezawodny biggrin.gif
Dzięki serdeczne. Powiem ci, że zajmuję się programowaniem (w moim przypadku to brzmi dumnie sleep.gif )
z zamiłowania i z doskoku, na miarę potrzeb przy chronicznym
braku czasu. Ale mam parcie i to lubię i nic na to nie poradzę.
Stąd te luki w podstawach. Z góry przepraszam za amatorszczyznę, cały czas się uczę
i obiecuję poprawę. php.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.