18. april 2004 - 16:37Der er
27 kommentarer og 1 løsning
Søgning på flere variabler
Hejsa,
Jeg har sølgende query: mysql_result(mysql_query("SELECT * FROM stations WHERE name='%$name%' AND type='$type' AND country='$country' AND state='$state' AND city='%$city%' AND status='1' ORDER BY name ASC "),0);
Får denne fejl: Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 6 in /home/radioloa/public_html/stations_advanced_ok.php on line 83
- Er første gang jeg prøver at lave en søgning til mit site, så det er nok ikke helt optimalt :P
Skulle være jeg lige skulle poste queryen, efter den første rettelse: $antal = mysql_query("SELECT * FROM stations WHERE name='%$name%' AND type='$type' AND country='$country' AND state='$state' AND city='%$city%' AND status='1' ORDER BY name ASC "),0);
Får stadig en parse error: Parse error: parse error in /home/radioloa/public_html/stations_advanced_ok.php on line 83
Opdateret kode: $antal = mysql_query("SELECT * FROM stations WHERE name LIKE '%$name%' AND type='$type' AND country='$country' AND state='$state' AND city LIKE '%$city%' AND status='1' ORDER BY name ASC "),0);
Bare så du er klar over det; parse-errors og den slags er php relateret. Mysql giver kun (synlige) fejl hvis du spørger efter dem (mysql_error()), der for er det op til dig selv at tjekke om det gik godt, og hvis det ikke gør, kalde mysql_error()
Ahh, okay. Var i tvivl om den skulle i php eller mysql. Jeg smider lige en mysql_error() op.
,0) i enden skal (så vidt jeg forstår) bruges til at tælle antallet at retultater. Den anvendes i mit sideskift system (som du lige har hjulpet mig med)
det skal være et resource-link (databaselink).. Så fjern lige det ,0) :-)
mit gæt på hvordan din kode skal se ud her; $res = mysql_query("SELECT * FROM stations WHERE name='%$name%' AND type='$type' AND country='$country' AND state='$state' AND city='%$city%' AND status='1' ORDER BY name ASC ") or die(mysql_error());
Mulig fejl mht søgning. Hvis man nu ikke skal udfylde alle felter (fx ikke country).. så vil der komme til at stå AND country='' hvilket nok ikke er sandt ret ofte, så du skal nok bygge din sql sætning op med de clauses der skal gælde (og skippe dem der ikke er udfyldt)
- Jeg skal bruge det to steder i min kode. Det eneste kan de bruges direkte, det andet sted skal der tilføjes noget.
ex.: $query = mysql_query("SELECT * FROM stations WHERE name='%$name%' AND type='$type' AND country='$country' AND state='$state' AND city='%$city%' AND status='1' ORDER BY name ASC LIMIT $vis_fra, $pr_side") or die(mysql_error());
Skal laves om til noget ala: mysql_query($sql LIMIT $vis_fra, $pr_side) or die(mysql_error()); - Ved bare ikke hvad der er "lovligt"
Den anden ser sådan ud (skal bruges sidst): $antal = mysql_query("SELECT * FROM stations WHERE name='%$name%' AND type='$type' AND country='$country' AND state='$state' AND city='%$city%' AND status='1' ORDER BY name ASC ") or die(mysql_error()); - Kan skiftes ud uden problemer (forhåbentlig)
>>Skal "1=1" ikke fjernes? Hvis ikke, hvad er så formålet?
Det kan du godt fjerne da det altid er true... Men så bliver det lidt mere besværligt.
Forstil dig; if(!empty($name)) { $sql .= "AND name='%$name%' "; } if(! empty($type)) { $sql .= "AND type='$type' "; } Hvis navn ikke er empty, skal der stå where. Ok nem nok. Hvis navn ikke er empty og type heller ikke er, så skal der stå WHERE(ved name) og AND (ved type). Hvis navn er empty og type ikke er så skal der står WHERE ved type nu..
Så du skal lave en masse tjeks - så jeg syntes det er nemmere at have den "dumme" linje og så vide at jeg altid kan skrive "AND etellerandet"
>>Hvad metyder: ".=" ? Betyder det at man tilføjer noget til variablen? det er præcist det samme som: $sql = $sql . "...";
>> mysql_query($sql LIMIT $vis_fra, $pr_side) or die(mysql_error()); skal være mysql_query("$sql LIMIT $vis_fra, $pr_side") or die(mysql_error()); så burde det virke
Den kommer ikke med nogle fejl. Hvis jeg skriver et navn på en station så sker der intet, hvis jeg derimod undlader at skrive noget, så poster den samtlige stationer i db'en
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.