Porównywanie zmiennych przez if

Porównywanie zmiennych przez if
LP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Cześć

Mam problem.
Pobieram z formularza liczbę i zapisuję jako zmienną.
Następnie wyszukuję w bazie danych rekord odpowiadający pobranej z formularza zmiennej.
Chciałbym następnie porównać pobraną z formularza zmienną z pobranym rekordem i w zależności czy się zgadzają podjąć odpowiednie instrukcje.
Z bazy pobieram: $wynik = mysqli_query($baza,"SELECT * FROM kody WHERE kod = '$kod' ");
Znajduje rekord.
Tworzę zmienne $a i $b zawierające pobraną wartość z formularza i $b zawierającą odszukany w bazie rekord.

Potem próbuję porównać:

Kopiuj
if ($a==$b){
    echo 'ok';
}
if ($a!=$b){
    echo 'not ok';
}

Gdy odnajdzie pasujący rekord w bazie, wypisuje mi "ok" i gdy celowo wpiszę w formularzu niepasujący numer, również wypisuje mi "ok".

Co jest nie tak zrobione ?

Łukasz

PS:

kod:

Kopiuj
$kod = $_GET["kod"];

$baza=mysqli_connect("localhost","user","pass","kody");

if (mysqli_connect_errno())

{echo "Wystąpił błąd połączenia z bazą";}

$wynik = mysqli_query($baza,"SELECT * FROM kody WHERE kod = '$kod' ");

while($row = mysqli_fetch_array($wynik))

{echo $row['id'] . " " . $row['kod']; echo "<br>"; 

    $a = trim($kod);
    $b = trim($row['kod']);
}
mysqli_close($baza);



if ($a == $b) {
    echo 'ok';
}
else {
    echo 'not ok';
}

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10307
0
lukasz_prog napisał(a):
Kopiuj
if ($a==$b){
    echo 'ok';
}
if ($a!=$b){
    echo 'not ok';
}

Pierwsza rzecz, użyj else

Kopiuj
if ($a == $b) {
    echo 'ok';
}
else {
    echo 'not ok';
}

Co do samego pytania:

lukasz_prog napisał(a):

Gdy odnajdzie pasujący rekord w bazie, wypisuje mi "ok" i gdy celowo wpiszę w formularzu niepasujący numer, również wypisuje mi "ok".

Nie da rady stwierdzić, jak nie pokażesz całego kodu.

LP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Zastosowałem z else.
W dalszym ciągu pokazuje jedynie "ok".
Jeśli to ma znaczenie, to przed wywołaniem if, wrzucam zmienne do funkcji trim:
$a = trim($kod);
$b = trim($row['kod']);

Co jeszcze może być źle ?

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3624
0

A czemu nie użyjesz do tego SQL i nie dasz warunków dodatkowych poza samym id/kodem?
Wtedy wystarczy sprawdzić czy ilość zwróconych wierszy przez zapytanie SQL jest większa od zera.
Poza tym staraj się używać potrójnego porównania np. === bo możesz mieć nie przewidziane zachowania przy automatycznym porównaniu różnych typów.

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3624
0

Przed ifem zrób var_dump obu zamiennych to pewnie zobaczysz co jest nie tak.
W pętli na pewno nadpisujesz sobie wartości i porownwujesz tylko ostatnie przypisanie z tego while($row)

LP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Po pobraniu numeru z bazy, zastosowałem:

Kopiuj
$ilosc_wierszy = mysqli_num_rows($wynik);

i teraz:

Kopiuj
    echo 'ok';
}
else {
    echo 'not ok';
}

działa !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.