just some thoughts to your script: i don't know (yet) the pear db functions and the database you use. so i assume you already got some logic to transform your dates into valid sql-dates (eg. mysql: yyyymmdd or yyyy-mm-dd). that is important for valid results from your sql-statements as the dates must be compared somehow. (in other words your DD/MM/YY as an example 04/05/03 can be interpreted in many ways.)
i assume, that in your order_date-field should only stand one statement, so i suggest using preg_match. so for your code i would start this way: if (preg_match($yourBetweenDatesPattern, $order_date, $matches)) { // between two dates // define your filter here, maybe with your qouted_date-function from pear } elseif (preg_match($YourAfterDatePattern, $order_date, $matches)) { // after a date filter } elseif (preg_match($YourExactDatePattern, $order_date, $matches)) { // exact date filter } else { echo "no valid date given."; } For your Patterns: If you use something like this preg_match ("/between ($YourDatePattern) and ($YourDatePattern)/", $subject, matches); you can easily catch your date1 and date2 using: $matches[1] and $matches[2] hope this helps. ciao SVEN "Lorenzo Ciani" <[EMAIL PROTECTED]> schrieb im Newsbeitrag news:[EMAIL PROTECTED] > Hi all! > > I would like to ask your advice on a script that I wrote. As you can surely > see from my script below, I really need help as I am totally new to PHP. > Regular expressions are my worst nightmare because I don't have a > background in software programming: I'm just kidding around here! Please > post your suggestions. Thanks. > > Problem > ------- > HTML form to filter records from an SQL database on a DATE field. > Search expressions are of the form: > DATE (should be transformed into = DATE) > >= DATE (or other operator) > BETWEEN DATE_1 AND DATE_2 > > The variable named $order_date contains the search expression submitted by > the HTML form. > > Here's my script > ---------------- > // Regex pattern for date, e.g. DD/MM/YY or MM-DD-YYYY > $date_pat = '[0-9]+(\/|-)[0-9]+(\/|-)[0-9]+'; > // Regex pattern for SQL operators > $op_pat = '<>|<=|>=|!=|<|>|='; > > // First, see if there is at least one date in $_POST['order_date'] > $count = preg_match_all('/'.$date_pat.'/', $order_date, $matches); > if ($count) { > for ($i = 0; $i <= $count - 1; $i++) { > // Quote dates using PEAR::DB > $quoted_date[$i] = $db->quote($matches[0][$i]); > } > } > // Then see if search string is of type BETWEEN DATE_1 AND DATE_2 > $count = preg_match_all('/between\s'.$date_pat.'\sand\s'.$date_pat.'/i', > $order_date, $matches); > if ($count) { > // Yes it's a BETWEEN...AND. We assume that we have two valid dates > $date_filter = ' BETWEEN '.$quoted_date[0].' AND '.$quoted_date[1]; > } else { > // No. Then check if we have a search string like '>= DATE' > $count = preg_match_all('/'.$op_pat.'/', $order_date, $matches); > if ($count) { > // Yes, then use operator and quoted date > $date_filter = ' '.$matches[0][0].' '.$quoted_date[0]; > } else { > // No, then we just use something like ' = DATE' > $date_filter = ' = '.$quoted_date[0]; > } > } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php