Jump to content

Recommended Posts

Hi Folks

 

I'm building a MySQL query string based on selections from a form...

 

Here are the field names and values passed (via POST):

 

search:::advanced

logNum:::

pubName:::AA

photoName:::FirstName_LastName

issueDate:::

keywords:::

linkage:::and

usage:::null

 

in the end I should get a string something like this "SELECT * FROM photorecord WHERE key = value AND otherkey = othervalue ORDER BY logNum DESC"

 

instead I am getting this...I've bolded the problem...

 

SELECT * FROM photorecord WHERE AND pubName LIKE '%AA%' AND photoName LIKE '%FirstName_LastName%' ORDER BY logNum DESC

 

I've been staring at this too long and can't see where I am making the mistake. Can someone look at it with a pair of fresh eyes and see if they can pick it out. It seems that it is not registering the proper $keyCount - the first field/value pair should be written without "AND" at it's start. What is throwing it off is the field "search" which is not a field in the db, but a hidden form field passed to let me know what type of search the user is performing. I thought I trapped that out with this code:

 

if ($key != "search") { 
	$keyCount = $keyCount + 1;
}

 

but it doesn't seem to be working. Any help would be appreciated.

 

==================

Code Follows

==================

 

<?php 

$linkage = $_POST['linkage']; 
$query = "SELECT * FROM photorecord WHERE ";
$keyCount = 0;

foreach($_POST as $key => $value) {
if ($key != "search") { 
	$keyCount = $keyCount + 1;
}

//build logNum
if ($key == "logNum") {
	if ($value != "") { 
		if ($keyCount == 1) {  
			$query .= "logNum = " . $value; 
		} else { 
			$query .= " AND logNum = " . $value; 
		}
	}
} else if ($key == "pubName") {
	if ($value != "" && $value != "novalue") {
		if ($keyCount == 1) { 
			$query .= "pubName LIKE '%" . $value . "%'";
		} else { 
			$query .= " AND pubName LIKE '%" . $value . "%'";
		}
	}
} else if ($key == "photoName") {
	if ($value != "" && $value != "novalue") {
		if ($keyCount == 1) { 
			$query .= "photoName LIKE '%" . $value . "%'";
		} else { 
			$query .= " AND photoName LIKE '%" . $value . "%'";
		}
	}
} else if ($key == "issueDate") { 
	if ($value != "") {
		if ($keyCount == 1) { 
			$query .= "issueDate LIKE '%" . $value . "%'";
		} else {
			$query .= " AND issueDate LIKE '%" . $value . "%'";
		}
	}
} else if ($key == "restrictions") {
	if ($value != "") {
		if ($keyCount == 1) { 
			$query .= "restrictions LIKE '%" . $value . "%'";
		} else { 
			$query .= " AND restrictions LIKE '%" . $value . "%'";
		}
	}
} else if ($key == "keywords") {
	if ($value != "") {
		//see if we're looking for an exact match 
		if ($linkage == "exact") { 
			if ($keyCount == 1) { 
				$query .= "keywords LIKE '" . $value . "'";
			} else { 
				$query .= " AND keywords LIKE '" . $value . "'";
			}
		} else { 
			//get count of keywords
			$keyList = split($value, chr(32)); 
			if ($keyCount == 1) {
				if (count($keyList) == 1) { 
					$query .= "keywords LIKE '%" . $value . "%'";
				} else { 
					$query .= " AND keywords LIKE '%" . $value . "%'";
				}
			} else {
				//loop through the keywords
				for ($i=0; $i<=count($keyList); $i++) {
					//first search item
					if ($keyCount == 1) { 
						//which keyword (in list)
						if ($i < count($keyList)) { 
							$query .= "keywords LIKE '%" . $value . "%' " . $linkage;
						} else { 
							$query .= "keywords LIKE '%" . $value . "%' ";
						}
					} else { 
						if ($i == 1) { 
							$query .= " AND keywords LIKE '%" . $value . "%' " . $linkage;
						} else if ($i < count($keyList)) {
							$query .= "keywords LIKE '%" . $value . "%' " . $linkage;
						} else { 
							$query .= "keywords LIKE '%" . $value . "%' ";
						}
					}
				}
			}//end loop through keywords

		}//end key count check

	}//end key check

}

}//end post loop

$query .= " ORDER BY logNum DESC";
echo $query;
?>

Link to comment
https://forums.phpfreaks.com/topic/82381-solved-problem-with-_post-array-loop/
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.