webForumDet fria alternativet
Logga in / Bli medlem

Query i if-sats

PHP

4 svar · 571 visningar · startad av dreas

Medlem sedan jan. 2004140 inlägg
Trådstart#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

Medlem 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.

Medlem 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(

Medlem 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.)

Medlem sedan juni 200032 967 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

386 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
122 ms — deklarationer (db)
130 ms — hämta statistik (db)
132 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)