Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
if + pętla while = kiepski wynik
#1
Witam

Mam problem i nie wiem jak sobie z nim poradzić, dlatego proszę o pomoc.

BAZA MySQL
Kod:
id    day     month    year         who
1      29       8      2013        , admin
2      30       8      2013        , zuza, roman

$who = zalogowany user (np. roman)

Robię kalendarz z wyjazdami.
Jeśli w jednym dniu jest więcej niż jeden wyjazd to user może się zapisać
tylko na jeden z nich.
Wszystko mi się udało zrobić tylko stanąłem na ostatnim ifie.

Kod wyświetla użytkowników zapisanych na wyjazd w tym samym dniu.
Jeśli sprawdzi że user jest już zapisany na tej dacie to wyświetli komunikat
"jesteś zapisany już na tym dniu" jeśli okaże się że user nie jest zapisany
na wyjazd na tej konkretnej dacie to go zapisze.

Kod PHP:
$result mysql_query("SELECT * FROM calendar WHERE event_d = $d AND event_m = $m AND event_y = $y") or die();
while(
$row=mysql_fetch_assoc($result)){
echo 
"<br />";
echo 
$row['event_who'];//pokaż userów z eventów w tym dniu
                
$user_final $row['event_who']; //zobacz czy user już istnieje
$user '/'.$who.'/';
    if (
preg_match($user$user_final)){
    echo 
"<br />";
    echo 
"jesteś zapisany już na tym dniu.<br>";
    }
    else{
    echo 
"<br />";
    echo 
"nie jesteś zapisany możesz jechać.<br>";
    }


tyle że teraz wynik jest taki:
Kod:
, admin
jesteś zapisany już na tym dniu.

, zuza, roman
nie jesteś zapisany możesz jechać

pomocy Sad
Odpowiedz
#2
może coś tak:

Kod:
$user = $who.',';
if(strstr($user_final, $user)) {
echo "<br />";
echo "jesteś zapisany już na tym dniu.<br>";
}
else{
echo "<br />";
echo "nie jesteś zapisany możesz jechać.<br>";
}

lub

Kod:
$user = $who;
$user_final = explode(',' $row['event_who']);
$found = array_search($user, $user_final);
if($found !== false)
     echo "jesteś";
else
     echo "nie";
Odpowiedz
#3
Niestety nie zadziałało.

Potrzebuje uzyskać taki wynik :

Kod:
, admin
jesteś zapisany już na tym dniu.

lub
Kod:
, admin
nie jesteś zapisany możesz jechać
Odpowiedz
#4
Hej,
Jeżeli $who ma wartość "admin" to wszystko działa dobrze.
W pierwszym wierszu bazy danych, masz ", admin" więc preg_match zwraca TRUE, więc otrzymujesz:
Cytat:, admin
jesteś zapisany już na tym dniu.
Natomiast w drugim wierszu nie ma "admin" więc zwraca FALSE i dlatego wynik jest taki:
Cytat:, zuza, roman
nie jesteś zapisany możesz jechać
Sprawdź czy aby na pewno $who ma wartość roman?
Kod PHP:
print_r($who); 
Pozdrwaiam
Odpowiedz
#5
jeśli:
$who = np. roman
to zmień na:
explode(', ' $row['event_who']);
Odpowiedz
#6
Panowie, sprawdzanie czy user jest w eventach działa.
Sprawdzanie działa w pętli bo nie wiem jak inaczej wyświetlić i sprawdzić eventy o tych samych datach. Dzięki pętli rozsypuje mi się końcowe założenie.

Kod PHP:
while($row=mysql_fetch_assoc($result)){
echo 
"<br />";
echo 
$row['event_who'];//pokaż userów z eventów w tym dniu
                
$user_final $row['event_who']; //zobacz czy user już istnieje
$user '/'.$who.'/';
    if (
preg_match($user$user_final)){
    echo 
"<br />";
    echo 
"jesteś zapisany już na tym dniu.<br>";
    }
    else{
    echo 
"<br />";
    echo 
"nie jesteś zapisany możesz jechać.<br>";
    }


Mianowicie :
1) $who jest niezapisany na tym dniu więc do zapisuję na wyjazd.
2) $who jest zapisany na tym dniu więc mu nie pozwolę jechać.

I tyle dla mnie skutkiem ubocznym jest to że się pojawia to:
Cytat:, zuza, roman
nie jesteś zapisany możesz jechać
Odpowiedz
#7
Jeżeli dobrze zrozumiałem, to problem tkwi w tym, że pobierasz dane z np. "day 29" i wszystko jest ok, ale dostajesz też dane z "day 30", co daje ten efekt uboczny, tak?
Odpowiedz
#8
(29-08-2013, 18:45)msx83 napisał(a): Jeżeli dobrze zrozumiałem, to problem tkwi w tym, że pobierasz dane z np. "day 29" i wszystko jest ok, ale dostajesz też dane z "day 30", co daje ten efekt uboczny, tak?

Tak bo jeśli w day 29 jest $who to mi go nie zapisze, ale dochodzą dane z 30 i tam nie ma $who i wtedy go zapisuje.
Odpowiedz
#9
(29-08-2013, 18:49)harvester2001 napisał(a):
(29-08-2013, 18:45)msx83 napisał(a): Jeżeli dobrze zrozumiałem, to problem tkwi w tym, że pobierasz dane z np. "day 29" i wszystko jest ok, ale dostajesz też dane z "day 30", co daje ten efekt uboczny, tak?

Tak bo jeśli w day 29 jest $who to mi go nie zapisze, ale dochodzą dane z 30 i tam nie ma $who i wtedy go zapisuje.

Tak więc problem leży chyba w zapytaniu SQL.
Sprawdź przed pętla za pomocą prin_r() co zwraca Ci zapytanie, bo teoretycznie powinno zwrócić tylko jeden wiersz, chyba że, masz dwa wyjazdy jednego dnia.
Ewentualnie zastosuj na końcu zapytania
Kod PHP:
LIMIT 0 
Odpowiedz
#10
W tym sęk że w tym przypadku mam dwa wyjazdy tego samego dnia
i musi sprawdzić userów z dwóch wyjazdów zanim dopisze usera $who lub mu zabroni.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  jak wyświtlić wynik w drugiej kolumnie? soldiernr1 8 4,495 16-06-2012, 15:42
Ostatni post: Kartofelek

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl