[PHP] Zoekscript dat niet helemaal werkt.

Pagina: 1
Acties:
  • 105 views sinds 30-01-2008
  • Reageer

  • iznogood
  • Registratie: September 2001
  • Niet online
Beste Tweakers, ik ben vandaag eigenlijk al zo'n beetje heel de dag bezig om een zoekscript van een paar regels te debuggen, maar kom er helaas niet helemaal uit.

Ik heb alle variabelen nagekeken, deze zijn allemaal goed. Ook de bereiken in de query kloppen. Toch wordt mijn query niet goed uitgevoerd, tenminste ik krijg geen waardes terug. Als iemand de oplossing weet dan hoor ik dat graag.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?
  include 'functions.inc';
  ConnectDB();
  If($op_plaats=="Geen Voorkeur") $op_plaats="";
  If($soort_bouw=="Geen Voorkeur") $soort_bouw="";

  //****************************************
  // Maak Query 
  //****************************************
    $query="SELECT * FROM objects WHERE ";
    $query.="(perceel BETWEEN '$perceel_min' AND '$perceel_max') AND ";
    $query.="(oppervlak BETWEEN '$oppervlak_min' AND '$oppervlak_max') AND ";
    $query.="(kamers BETWEEN '$kamers_min' AND '$kamers_max') AND ";
    $query.="(prijs BETWEEN '$prijs_min' AND '$prijs_max') AND (extra1 LIKE '%".$extra_info."%')";

    If($op_plaats)  $query.=" AND (plaats='$op_plaats')";

    If($soort_bouw=="Nieuwbouw") $query.=" AND (soort_bouw='1')";
    If($soort_bouw=="Bestaande bouw") $query.=" AND (soort_bouw='2')";
    If($soort_bouw=="Vooroorlogs") $query.=" AND (soort_bouw='3')";
  //****************************************

  echo $query;

  //******************************************
  // Voer Query uit en sorteer de resultaten
  //******************************************
    $result=mysql_query($query);
    $row=mysql_num_rows($result);

    while ($res=mysql_fetch_object($result))
    {
      echo $res->plaats.", ".$res->adres;
    }
  //******************************************
?>

Als ik gewoon zoek zonder speciale toestanden dan is de query op de plaats waar "echo $query;" staat :

SELECT * FROM objects WHERE (perceel BETWEEN '0' AND '7500') AND (oppervlak BETWEEN '0' AND '7500') AND (kamers BETWEEN '0' AND '100') AND (prijs BETWEEN '0' AND '750000') AND (extra1 LIKE '%%')

Volgens mij is hier niets fout aan ... wel ?

Greetz,
Iznogood. }:O

Just as Good


  • Logic
  • Registratie: Juni 2000
  • Laatst online: 08:16

Logic

SmartOS:Love at First Boot

code:
1
(extra1 LIKE '%".$extra_info."%')";

Ik zelf dacht dat het :
code:
1
(extra1 LIKE '%$extra_info%')";

moest zijn?

If it bleeds, it can be killed!


  • iznogood
  • Registratie: September 2001
  • Niet online
Dat doet precies hetzelfde.. maar je mag nog een keer proberen als je wilt :)

Just as Good


  • Norjee
  • Registratie: April 2000
  • Niet online
Kweet het zo niet, maar misschien:

(perceel BETWEEN '0' AND '7500') --> (perceel BETWEEN 0 AND 7500)

Zodat mysql 0 en 7500 niet als string ziet??

Of misschien AND (extra1 LIKE '%%') helemaal weglaten, omdat extra1 leeg is en %% geen null matcht ??

Maar ik gok maar, kan even goed niet werken...

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 15-09 09:37

Altaphista

1. check manual, 2. ask

Of misschien AND (extra1 LIKE '%%') helemaal weglaten, omdat extra1 leeg is en %% geen null matcht ??
Klopt, als je alles van extra1 zoekt waar deze '' is, vind je waarschijnlijk niets...

Je gaat het pas zien als je het doorhebt.


  • iznogood
  • Registratie: September 2001
  • Niet online
***Zucht***
Ik had gehoopt dat dat het zou zijn ;(

Just as Good


Verwijderd

Probeer eens
PHP:
1
2
3
<?
$result=mysql_query($query);
?>

om te zetten naar:
PHP:
1
2
3
<?
$result = mysql_query($sql) or die("Mysql error");
?>

Dan kan je zien wat voor error Mysql geeft...

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
of:

$result = mysql_query($sql) or die(mysql_error());

(wat overigens ook niet echt netjes is).

Maar handigste is om je Query ff helemaal naar MySQL te copy pasten (de CLI van MySQL dus of naar phpMyAdmin) en dan te kijken wat er gebeurd als je bepaalde dingen weglaat. Op die manier zie je in no time waar het problmeen zit.

  • iznogood
  • Registratie: September 2001
  • Niet online
Helaas werkt dat ook niet, hij geeft namelijk geen error. |:(

Just as Good


  • iznogood
  • Registratie: September 2001
  • Niet online
Door deze regels voert hij de query niet goed uit... ik zie hier echter geen fouten in.

Ik heb de variabelen en het bereik hiervan nogmaals nagekeken, maar dit lijkt allemaal in orde.
PHP:
1
2
3
4
<?
    $query.="(perceel BETWEEN $perceel_min AND $perceel_max) AND ";
    $query.="(oppervlak BETWEEN $oppervlak_min AND $oppervlak_max) AND ";
?>

De query geeft nu ook wel een uitvoer, maar er horen meer resultaten te zijn. Zonder deze regels geeft hij het volledige resultaat weer. :? Wat zou het kunnen zijn ??

Just as Good


  • iznogood
  • Registratie: September 2001
  • Niet online
Het werkt helaas nog steed niet :(

Als er niemand is die de oplossing voor me heeft dan heb ik er genoeg van ;( en dan laat ik het maar rusten...

Just as Good


  • Norjee
  • Registratie: April 2000
  • Niet online
Post hier dan eens de inhoud en opzet van je db, en zeg wat je vind en zou moeten vinden....

  • iznogood
  • Registratie: September 2001
  • Niet online
[TABEL]
Database makelaar - table objects
ID int(11), soort_object tinyint(1), plaats varchar(18), adres varchar(30), soort_bouw tinyint(1), status tinyint(1), oppervlak varchar(8), perceel varchar(8), prijs varchar(8), kamers smallint(3), extra1 mediumblob, pic1 varchar(255), pic2 varchar(255), pic3 varchar(255)
[/TABEL]

Hoe de query gemaakt wordt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
  If($op_plaats=="Geen Voorkeur") $op_plaats="";
  If($soort_bouw=="Geen Voorkeur") $soort_bouw="";

  $query="SELECT * FROM objects WHERE ";
    
  $query.="(perceel BETWEEN $perceel_min AND $perceel_max) AND ";
  $query.="(oppervlak BETWEEN $oppervlak_min AND $oppervlak_max) AND ";
  $query.="(kamers BETWEEN $kamers_min AND $kamers_max) AND ";
  $query.="(prijs BETWEEN $prijs_min AND $prijs_max)";
   If($extra_info) $query.=" AND (Ucase(extra1) LIKE Ucase('%$extra_info%'))";
   If($op_plaats)  $query.=" AND (plaats='$op_plaats')";
   If($soort_bouw=="Nieuwbouw") $query.=" AND (soort_bouw='1')";
   If($soort_bouw=="Bestaande bouw") $query.=" AND (soort_bouw='2')";
   If($soort_bouw=="Vooroorlogs") $query.=" AND (soort_bouw='3')";
   $query.=" ORDER BY plaats";
?>

[ZOEKRESULTAAT]
Eindhoven
Ericastraat 47 1250 p.m.
Willemstraat 81 700 p.m.
Dorintstraat 2 1500 p.m.
Hoogstraat 2 750 p.m.
Maastricht
Maastrichterweg 12 1250 p.m.
[/ZOEKRESULTAAT]

[ZOEKRESULTAAT WAT HET MOEST ZIJN]
Eindhoven
Ericastraat 47 1250 p.m.
Willemstraat 81 700 p.m.
Dorintstraat 2 1500 p.m.
Hoogstraat 2 750 p.m.
Maarheeze
Korenbloemstraat 29 1250
Stationstraat 10 1250
Maastricht
Maastrichterweg 12 1250 p.m.
[/ZOEKRESULTAAT WAT HET MOEST ZIJN]

Het zoekresultaat dat het moest zijn is bereikt met de query SELECT * FROM objects. Ik denk dat de fout in de volgende regels zit.
PHP:
1
2
3
4
5
6
<?
  $query.="(perceel BETWEEN $perceel_min AND $perceel_max) AND ";
  $query.="(oppervlak BETWEEN $oppervlak_min AND $oppervlak_max) AND ";
  $query.="(kamers BETWEEN $kamers_min AND $kamers_max) AND ";
  $query.="(prijs BETWEEN $prijs_min AND $prijs_max)";
?>

Ik hoop dat ik zo genoeg informatie heb gegeven om het op te lossen.. want ik word er eerlijk gezegd een beetje :r van.

Just as Good


Verwijderd

Wat is het verschil tussen de db-entries die als plaats Eindhoven of Maastricht hebben, en de entries met Maarheeze?
Pagina: 1