Ik heb een klein probleempje met een search query die ik probeer op te bouwen. Dit is de eerste keer dat ik dit doe.
Ik ga uit van 4 velden, 1x input, 3x option. Geen van allen moet ingevuld worden.
Op elke combinatie zijn results mogelijk.
Onderstaande query werkt naar behoren. Ik krijg de juiste resultaten
$get_products= mysql_query(
"SELECT * FROM products
WHERE `sexe` LIKE '%$search_sexe%'
AND `brand` LIKE '%$search_brand%'
AND `product-type` LIKE '%$search_categorie%'
");
Maar zodra ik de volgende toevoeg gaat het niet goed meer.
$get_products = mysql_query(
"SELECT * FROM products
WHERE `sexe` LIKE '%$search_sexe%'
AND `brand` LIKE '%$search_brand%'
AND `product-type` LIKE '%$search_categorie%'
OR `brand` LIKE '%$search_query%'
OR `product-name` LIKE '%$search_query%'
OR `product-type` LIKE '%$search_query%'
OR `internal-name` LIKE '%$search_query%'
OR `product-description` LIKE '%$search_query%'
");
Het is mogelijk om $search_query leeg te laten.
Elke hulp is welkom
- PHP | Opbouwen search query
-
21-07-2009, 15:10 #1
- Berichten
- 98
- Lid sinds
- 15 Jaar
PHP | Opbouwen search query
-
-
21-07-2009, 15:16 #2
- Berichten
- 3.430
- Lid sinds
- 16 Jaar
Kan je iets meer informatie geven over wat je wilt bereiken en wat er precies fout gaat? We hebben geen idee wat je wilt met query 2, en ook niet wat er nu fout gaat in de tweede query.
-
21-07-2009, 15:27 #3
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Maar zodra ik de volgende toevoeg gaat het niet goed meer.
Wat gaat niet goed meer?
Ik denk dat je dit bedoeld:
SELECT * FROM products
WHERE (
(`sexe` LIKE '%$search_sexe%'
AND `brand` LIKE '%$search_brand%'
AND `product-type` LIKE '%$search_categorie%')
OR (`brand` LIKE '%$search_query%')
OR (`product-name` LIKE '%$search_query%')
OR (`product-type` LIKE '%$search_query%')
OR (`internal-name` LIKE '%$search_query%')
OR (`product-description` LIKE '%$search_query%')
)
-
21-07-2009, 15:28 #4
- Berichten
- 98
- Lid sinds
- 15 Jaar
Ik heb:
input text - $seach_query
option - $search_category
option - $search_brand
option - $search_sexe
Dit zijn 4 velden waarop gezocht kan worden.
$search_category zoekt in de tabel product-type
$search_brand zoekt in de tabel brand
$search_sexe zoekt in de tabel sexe
Maar,
$search_query zoekt in de tabellen brand, product-name, product-type, internal-name en product-descriptoin
Nu moet ik hier een search query voor maken. Let wel, geen van de velden is verplicht, het is enkel te verfijning van de zoekactie.
-
21-07-2009, 15:47 #5
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Wat jij zoekt noemen we het opbouwen van een search query door met PHP de SQL te bepalen. Zoiets ziet er alsvolgt uit (heb snel een voorbeeld geschreven dus kijk niet naar de werking aub):
PHP Code:<?php
// Begin SQL
$sql = "SELECT
veldnaam,
veldnaam2,
veldnaam3
FROM tabelnaan
";
// Wanneer $_POST['input1'] inhoud bevat
if(isset($_POST['input1']) && !empty($_POST['input1'])){
// Controleren of WHERE al in de sql voorkomt
$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){
$perfix = 'OR';
}
// Een deel aan de SQL toevoegen
$sql .= " ".$perfix." ( veldnaam LIKE '%".addslashes($_POST['input1'])."%') ";
}
// Wanneer $_POST['input2'] inhoud bevat
if(isset($_POST['input2']) && !empty($_POST['input2'])){
// Controleren of WHERE al in de sql voorkomt
$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){
$perfix = 'OR';
}
// Een deel aan de SQL toevoegen
$sql .= " ".$perfix." ( veldnaam LIKE '%".addslashes($_POST['input2'])."%') ";
}
// Wanneer $_POST['input3'] inhoud bevat
if(isset($_POST['input3']) && !empty($_POST['input3'])){
// Controleren of WHERE al in de sql voorkomt
$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){
$perfix = 'OR';
}
// Een deel aan de SQL toevoegen
$sql .= " ".$perfix." ( veldnaam LIKE '%".addslashes($_POST['input3'])."%') ";
}
// Het einde van de SQL maken
$sql .= "
ORDER BY tabelnaam DESC";
// Querie afhandelen
$query = mysql_query($sql) or die(mysql_error());
while($resultaat = mysql_fetch_assoc($query)){
echo $resultaat['veldnaam'], '<br />', $resultaat['veldnaam2'], '<br />', $resultaat['veldnaam3'];
}
?>
-
21-07-2009, 15:50 #6
- Berichten
- 98
- Lid sinds
- 15 Jaar
Dat is het hem juist. Dat heb ik dus blijkbaar niet. Een searchquery bouwen met inputs lukt, met options ook, maar een combinatie van is blijkbaar nog niet zo gemakkelijk.
-
21-07-2009, 15:53 #7
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Stel je hebt een checkbox (zoals ze dat noemen) als je die aanvinkt moeten de resultaten ouder zijn als 2 dagen:
PHP Code:<?php
// Controleren of $_POST['checkbox'] aangevinkt is
if(isset($_POST['checkbox']) $_POST['checkbox'] == 'on'){
// Controleren of WHERE al in de sql voorkomt
$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){
$perfix = 'AND';
}
// Een deel aan de SQL toevoegen
$sql .= " ".$perfix." ( datum < NOW() - INTERVAL 2 DAY) ";
}
?>
Aanvullend bericht:
- Of deze checkbox: Als deze checkbox aangevinkt is moet hij ook zoeken naar velden waar 1 ingevuld staat:
PHP Code:<?php
// Controleren of $_POST['checkbox'] aangevinkt is
if(isset($_POST['checkbox']) && $_POST['checkbox'] == 'on'){
// Controleren of WHERE al in de sql voorkomt
$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){
$perfix = 'AND';
}
// Een deel aan de SQL toevoegen
$sql .= " ".$perfix." ( ditveld = 1 ) ";
}
?>Laatst aangepast door Arek van Schaijk : 21-07-2009 om 16:00 Reden: Automatisch samengevoegd.
-
21-07-2009, 17:58 #8
- Berichten
- 98
- Lid sinds
- 15 Jaar
Deze manier van query opbouw gaat tot nu toe niet veel beter. Het zoeken op de options:
Search Sexes, Search Brand, Search Product-type werken niet.
Dit geeft bij iedere optie de volgende output: SELECT * FROM products ORDER BY brand DESC
De overige opties doen het wel goed.
SELECT * FROM products WHERE ( `brand` LIKE '%sitedeals%') OR ( `product-name` LIKE '%sitedeals%') OR ( `product-type` LIKE '%sitedeals%') OR ( `fm-name` LIKE '%sitedeals%') OR ( `sex` LIKE '%sitedeals%') OR ( `product-description` LIKE '%sitedeals%') OR ( `sex` LIKE '%%') OR ( `brand` LIKE '%%') OR ( `product-type` LIKE '%%') ORDER BY brand DESC
Kan iemand me uitleggen waar ik de fout in ga?
PHP Code:[LEFT]$sql =
"SELECT * FROM products
";
// Search Sexes
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `sex` LIKE '%".addslashes($search_sex)."%') ";}
// Search Brand
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `brand` LIKE '%".addslashes($search_brand)."%') ";}
// Search Product-type
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `product-type` LIKE '%".addslashes($search_categorie)."%') ";}
// Search Input through brand
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `brand` LIKE '%".addslashes($search_query)."%') ";}
// Search Input through product-name
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `product-name` LIKE '%".addslashes($search_query)."%') ";}
// Search Input throug product-type
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `product-type` LIKE '%".addslashes($search_query)."%') ";}
// Search Input through fm-name
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `fm-name` LIKE '%".addslashes($search_query)."%') ";}
// Search Input through sex
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `sex` LIKE '%".addslashes($search_query)."%') ";}
// Search Input through product-description
if(isset($search_query) && !empty($search_query)){$perfix = 'WHERE';
if(strpos(strtoupper($sql), 'WHERE') !== false){ $perfix = 'OR'; }
$sql .= " ".$perfix." ( `product-description` LIKE '%".addslashes($search_query)."%') ";}
$sql .= "
ORDER BY brand DESC";
echo $sql;
$query = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($query))
{
echo "
<div id='product-thumb'>
<strong>".$row['product-type']." voor ".$row['sex']."</strong>
<p>
<a href='../product/index.php?id=".$row['id']."' title='".$row['brand']." ".$row['product-name']."'>
<img src='../images/productimages/".$row['product-image']."' width='100' height='100'/></a><br />
<a href='../product/index.php?id=".$row['id']."' title='".$row['brand']." ".$row['product-name']."'><strong>".$row['brand']."<br />".$row['product-name']."</strong><br /><br />".$row['size']."ml voor €".$row['selling-price']."</a>
</p>
</div>
";
}[/LEFT]
?>
-
21-07-2009, 18:03 #9
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Kan iemand me uitleggen waar ik de fout in ga?
Wat voor aanmerkingen ik wel heb is de kwaliteit van je code. Erg onleesbaar c.q. onduidelijk. Het aantal regels in PHP maakt niets uit daar hoef je dus ook echt niet op te besparen, zorg dat je code overzichtelijk en leesbaar is (zie mijn voorbeeld) en ga eens wat lezen over MySQL statements daar zit waarschijnlijk de fout in.
-
21-07-2009, 18:20 #10
- Berichten
- 98
- Lid sinds
- 15 Jaar
De output begint er op te lijken, ik weet niet precies wat je wilt. Dat is ook haast een onmogelijke taak voor ons als gebruikers omdat wij gewoon weg niet in staat zijn om snel jouw systeem te begrijpen.
Wat voor aanmerkingen ik wel heb is de kwaliteit van je code. Erg onleesbaar c.q. onduidelijk. Het aantal regels in PHP maakt niets uit daar hoef je dus ook echt niet op te besparen, zorg dat je code overzichtelijk en leesbaar is (zie mijn voorbeeld) en ga eens wat lezen over MySQL statements daar zit waarschijnlijk de fout in.
Maar wat nog veel beter is: ik snap ook wat er gebeurd en waarom.
Bedankt A. van Schayk voor de voorzet!
-
21-07-2009, 18:21 #11
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Eind goed al goed :-)
Tags voor dit bericht
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic