webForumDet fria alternativet

Query i if-sats

4 svar · 571 visningar · startad av dreas

dreasMedlem sedan jan. 2004140 inlägg
#1

Hej!
Har stött på ett märkligt problem. Har en lista med personer. Dessa personer kan i sin tur delas in i olika kategorier ('cat' i databasen). Där listan presenteras har jag en länk där jag kan välja vilken kategori jag vill lista.
Delar upp en Query i två olika fall - beroende på vad som skickas med i URL:en ($_REQUEST).
Problemet är, så fort jag tilldelar en person en kategori - försvinner den från listan totalt, även fast jag väljer rätt 'cat'.
Än så länge har jag inte lyckats få tillbaks dessa till listan igen (har försökt med att skippa if-satsen och bara köra $hamta = "SELECT * FROM cv WHERE typ='yrkesarbetare' && trash!='YES' ORDER BY $getBY "; ), trots att de är kvar i databasen.
Notering - kolumnen 'cat' är tomm som default.

Har följande kod:

$getBY = $_REQUEST['BY'];
			if (!$getBY)
				$getBY= "ID";
			
				
			$getCAT = $_REQUEST['CAT'];
			
			if ($getCAT==ALLA || !$getCAT) {
				$hamta = "SELECT * FROM cv WHERE typ='yrkesarbetare' && trash!='YES' ORDER BY $getBY ";
			}
			else {
				$hamta = "SELECT * FROM cv WHERE typ='yrkesarbetare' && cat='$getCAT' && trash!='YES' ORDER BY $getBY ";
			}

			
			echo ($hamta);
			$resultat = mysql_query($hamta) or die("Det gick inte att hämta information från databasen!");

Någon som förstår vad som går galet?
Är cat ett skyddat namn i PHP?? Men då borde man i sedvanlig ordning få ett felmeddelande om detta.

Tack på förhand
Andreas

henkeMedlem sedan dec. 1999286 inlägg
#2

Du har glömt hartassarna runt ALLA, nu tolkas det som konstanten ALLA i if ($getCAT==ALLA || !$getCAT) {.

Slå på full felrapportering i php när du utvecklar så hade php varnat om felet.

dreasMedlem sedan jan. 2004140 inlägg
#3

Okej, testade det med hartassarna och la även till full felrapportering ( . mysql_error()); ), utan resultat.
Kan poängtera att PHP med full felrapportering verkar inte heller klaga på att det stod $getCAT==ALLA, men det är som sagt trots allt åtgärdat.

Det konstiga är att om jag tilldelar en person till, säg cat=Elektriker, och väljer just att lista elektriker (med echo ($hamta); får jag );
$hamta = SELECT * FROM cv WHERE typ='yrkesarbetare' && cat='Elektriker' && trash!='YES' ORDER BY ID
så får jag ändå inte fram denna person.

Har dubbelkollat att de andra kriterna stämmer, typ='yrkesarbetare' och att trash inte är satt till YES. Trots detta fungerar det alltså inte och jag får inte heller upp något felmeddelande.

Blir helt vansinnig x(

aasahMedlem sedan mars 20034 471 inlägg
#4

Två saker jag föreslår att du kollar:

  1. Hur skickas formuläret, med GET eller POST? Byt ut alla $_REQUEST mot $_GET/$_POST (dvs den metod du skickar med). Orsak $_REQUEST hämtar värdena från antingen POST, GET eller COOKIE i någon viss bestämd ordning som jag inte har i huvudet. Så om du skickar med en annan metod än den som kollas först och det av någon anledning finns ett värde satt på det som kollas före, så får $_REQUEST ett annat värde än du tror.

  2. Om varken GET, POST eller COOKIE har motsvarande värde satt så får $_REQUEST["..."] värdet 0, 0.0, "" eller annat intetsägande "nollvärde" beroende på typ. Så byt ut enligt:

//från
$getBY = $_REQUEST['BY']; 
//till
if (isSet($_REQUEST['BY']))  //Eller hellre $_GET/$_POST enl 1.
   $getBY = $_REQUEST['BY']; //Dito.
else $getBY = "ID";

Gör samma isSet koll på $getCAT. Annars kan du ha oturen att villkorskollen fungerar som en tilldelning, tror jag. (Har för mig att det kan hända i anomaliska fall.)

@ndersMedlem sedan juni 200032 969 inlägg
#5

Jag skulle gissa på att MySQL vill ha AND istället för &&.

http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html

133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)