close ad
 
Important WebAssist Announcement
open ad
View Menu

Technical Support Forums

Free, outstanding support from WebAssist and your colleagues

rating

MySQLi Query Builder only returning one match when other matches are available + how to add an "any" option

Thread began 10/08/2015 3:28 am by Nathon Jones Web Design | Last modified 10/08/2015 4:07 pm by Ray Borduin | 1694 views | 3 replies |

Nathon Jones Web Design

MySQLi Query Builder only returning one match when other matches are available + how to add an "any" option

I have an events search facility with two search options - Type of Event and Keyword.

Type of Event is database driven and I'm checking for events that have a specific ID when searched. Keyword is obvious enough.

This is my search form:

<form class="form-horizontal" name="searcheventsFORM" id="searcheventsFORM" method="post" action="traditional-music-events-search.php">
<div class="form-group">
<label for="searchTYPE" class="col-sm-4 control-label">Type of Event:</label>
<div class="col-sm-8">
<select id="searchTYPE" name="searchTYPE" class="form-control" tabindex="1">
<option value="">Any</option>
<?php
while(!$rsEVENTTYPE->atEnd()) {
?>
<option value="<?php echo($rsEVENTTYPE->getColumnVal("tmsaeventtypeID")); ?>"><?php echo($rsEVENTTYPE->getColumnVal("tmsaeventtype")); ?></option>
<?php
$rsEVENTTYPE->moveNext();
}
$rsEVENTTYPE->moveFirst(); //return RS to first record
?>
</select>
</div>
</div>

<div class="form-group">
<label for="searchKEYWORD" class="col-sm-4 control-label">Search:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="searchKEYWORD" name="searchKEYWORD" placeholder="Keyword/s, town/city, region..." maxlength="100" tabindex="2">
</div>
</div>

<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<button type="submit" class="btn btn-default" name="searcheventsBTN" tabindex="3"><span class="glyphicon glyphicon-search"></span> Search</button>
</div>
</div><!-- end form-group -->
</form>



This is my MySQLi Query Builder recordset:

<?php
$rsEVENTS = new WA_MySQLi_RS("rsEVENTS",$csdbmysqli,0);
$rsEVENTS->setQuery("SELECT TMSAevent.tmsaeventID, TMSAevent.tmsaeventtypeID, TMSAevent.tmsaevent, TMSAevent.tmsastartdate, TMSAevent.tmsaenddate, TMSAevent.tmsavenueID, TMSAevent.tmsaeventsummary, TMSAevent.tmsaeventdesc, TMSAevent.tmsaeventDELETE, TMSAevent.tmsaeventPHONE, TMSAevent.tmsaeventEMAIL, TMSAevent.tmsaeventWEB, TMSAvenues.tmsavenuename, TMSAvenues.tmsaorgname, TMSAvenues.tmsavenuecontactname, TMSAvenues.tmsavenueaddress, TMSAvenues.tmsavenuetown, TMSAvenues.tmsavenuepostcode, TMSAcountry.tmsacountry, TMSAregions.tmsaregion FROM TMSAevent INNER JOIN TMSAvenues ON TMSAevent.tmsavenueID = TMSAvenues.tmsavenueID INNER JOIN TMSAcountry ON TMSAvenues.tmsacountryID = TMSAcountry.tmsacountryID INNER JOIN TMSAregions ON TMSAvenues.tmsaregionID = TMSAregions.tmsaregionID WHERE TMSAevent.tmsaeventtypeID = ? AND TMSAevent.tmsastartdate >= ? AND (TMSAevent.tmsaevent LIKE ? OR TMSAevent.tmsaeventsummary LIKE ? OR TMSAevent.tmsaeventdesc LIKE ? OR TMSAvenues.tmsavenuename LIKE ? OR TMSAvenues.tmsaorgname LIKE ? OR TMSAvenues.tmsavenuecontactname LIKE ? OR TMSAvenues.tmsavenueaddress LIKE ? OR TMSAvenues.tmsavenuetown LIKE ? OR TMSAregions.tmsaregion LIKE ? OR TMSAcountry.tmsacountry LIKE ?)");
$rsEVENTS->bindParam("i", "".(isset($_POST['searchTYPE'])?$_POST['searchTYPE']:"") ."", "-1"); //WAQB_Param1
$rsEVENTS->bindParam("t", "".(isset($_SESSION['todaySESH'])?$_SESSION['todaySESH']:"") ."", "-1"); //WAQB_Param2
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param3
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param4
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param5
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param6
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param7
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param8
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param9
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param10
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param11
$rsEVENTS->bindParam("c", "".(isset($_POST['searchKEYWORD'])?$_POST['searchKEYWORD']:"") ."", "-1"); //WAQB_Param12
$rsEVENTS->execute();
?>



You can try this out here...
http://www.nathonjoneswebdesign.co.uk/tmsa/traditional-music-events-Scotland.php

Here are the problems with it...

1. When I select "Any" as the Type of Event, and leave the Keyword field blank no results are returned. This should return all of the events.

2. When I select a Type of Event, for example "Festival", and leave the keyword field blank only one result is returned yet there is more than one Festival event in the database.

3. If I select "Festival" as the Type of Event and type the Keyword "Newton" I am shown a festival event that doesn't appear in the search in step 2 above?

Something is clearly wrong with the MySQLi Query Builder or, more likely, my understanding of how this should work. Either way I'd appreciate some help resolving it as it's pretty useless in its current format.

Appreciate it. Thank you.
NJ

Sign in to reply to this post

Ray BorduinWebAssist

The results you want are too complex for a simple parameterized query like you are using. You will probably have to hand code IF statements to use different SQL depending on the fields. I could help with this in a premier support ticket.

Sign in to reply to this post
Did this help? Tips are appreciated...

Nathon Jones Web Design

I only have two search criteria. The Type of Event drop down menu simply looks to see what events are of the requested type or, if the user doesn't select a type, to show all.

The Keyword field simply asks users to type in a keyword which it then compares against the event title, description, address, town, region, country, etc or, if the user doesn't enter a keyword, to display all.

Is that really too complex?

Also, if I select "Festival" from the Type drop down but don't enter a keyword, why is it only returning 1 result despite there being 8 events in the database with Type "Festival" (or, in reality, ID 4)?

Sign in to reply to this post

Ray BorduinWebAssist

You could try changing all of the "-1" references to just "", that may be closer to what you need.

Sign in to reply to this post
Did this help? Tips are appreciated...

Build websites with a little help from your friends

Your friends over here at WebAssist! These Dreamweaver extensions will assist you in building unlimited, custom websites.

Build websites from already-built web applications

These out-of-the-box solutions provide you proven, tested applications that can be up and running now.  Build a store, a gallery, or a web-based email solution.

Want your website pre-built and hosted?

Close Windowclose

Rate your experience or provide feedback on this page

Account or customer service questions?
Please user our contact form.

Need technical support?
Please visit support to ask a question

Content

rating

Layout

rating

Ease of use

rating

security code refresh image

We do not respond to comments submitted from this page directly, but we do read and analyze any feedback and will use it to help make your experience better in the future.

Close Windowclose

We were unable to retrieve the attached file

Close Windowclose

Attach and remove files

add attachmentAdd attachment
Close Windowclose

Enter the URL you would like to link to in your post

Close Windowclose

This is how you use right click RTF editing

Enable right click RTF editing option allows you to add html markup into your tutorial such as images, bulleted lists, files and more...

-- click to close --

Uploading file...