Permalänk
Medlem

[php] - Matcha nummer.

Hej,

Sitter och kodar på ett par script som ska användas till att söka information från en databas. Än så länge har det gått bra och ett par av dem är redan klara.

Nu ska jag dock börja på ett sökformulär som ska se ut ungefär så här:

Alternativ1 0-100000 100001-200000 200001-300000 300001-400001 Alternativ2 0-100000 100001-200000 200001-300000 300001-400001 Alternativ3 0-10% 11-20% 21-30% 31-40% 41-50% 51-60% 61-70% 71-80% 81-90% 91-100%

Det är alltså intervaller som ska matchas med datan i formuläret och det står helt still i skallen på mig, jag kommer inte på hur jag ska få till detta.

Först tänkte jag göra något i stil med

if($searchvalue >= 100000){ $interval= "1"; }

så många gånger som det skulle behövas och sen matcha det "enklare" värdet till de intervaller som man kan söka efter, men det känns som att det borde finnas ett bättre alternativ. Plus att det skulle bli jobbigt att behöva ha en massa if-satser för att matcha ett övre och ett undre värde hela tiden.

Så, är det någon som har något tips på hur jag ska lösa detta smidigast?
Kanske till och med finns någon inbyggd function jag inte vet om eller har missat?
Tack på förhand!

Visa signatur

Min signatur, inte din, MIN.
Bort med tassarna O.o

Permalänk
Testpilot

Gissar på att du använder MySQL, då kan du väl söka med intervaller direkt i SQL-frågan:

$interval = '100001-200000'; $interval = explode('-', $interval); mysql_query("SELECT * FROM tabell WHERE tal>={$interval[0]} AND tal <={$interval[1]}");

Eller är det något jag missat i ditt problem? ligger inte värdet i databasen som ett tal utan ett index på ett intervall kanske?

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Nej det ligger som ett värde, så du antog helt rätt.

Ska testa ditt förslag.
Tack

EDIT:

Det vill inte fungera för mig.
Såhär ser koden ut:

<?php include 'includes/config.php'; include 'includes/opendb.php'; if($_POST['searchbistand']){ $interval = $_POST['lon']; $interval = explode('-', $intervall); $query = mysql_query("SELECT * FROM bistandsorganisationer WHERE chefslon >={$intervall[0]} AND chefslon <={$intervall[1]} ORDER BY id"); $match = mysql_num_rows($query); if($match == 0){ echo("<p>Jag hittade ingenting.</p>"); echo("<p>Du hade valt $_POST[lon] ( $interval )</p>"); }else{ echo("<p>$match träff(ar) hittades</p>"); } while($r=mysql_fetch_assoc($query)){ echo("<p>$r[organisation] - $r[kontaktperson] - $r[chefslon]</p>"); } } ?> <form action="searchbi.php" method="post"> <select name="lon"> <option selected value="%">Välj chefslön i listan</option> <option value="0-150000">0-150000</option> <option value="150001-300000">150001-300000</option> <option value="300001-450000">300001-450000</option> <option value="450001-600000">450001-600000</option> </select> <input type="submit" value="Sök!" name="searchbistand" /> </form>

Här ligger scriptet, klickar man på "GO" så listas alla rader i databasen (endast 4 ännu) och där finns fältet "chefslön" med. I databasen heter denna "chefslon".

Vart har jag gjort fel?

Tack igen.

Visa signatur

Min signatur, inte din, MIN.
Bort med tassarna O.o

Permalänk
Testpilot

Problemet är att du kopierade min kod rakt av innan jag rättade till mina stavfel, fixa så att variablerna antingen heter intervall eller interval

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem

Ah se på fan. Jag testade faktiskt det som en av de första åtgärderna, men då antar jag att det var något annat fel någonstans som jag rättade till senare omedvetet.

Tack så hemskt mycket för hjälpen.

Visa signatur

Min signatur, inte din, MIN.
Bort med tassarna O.o