On 23 September 2004 20:53, Stuart Felenstein wrote:

> So here is what I have:
> //Here is defines the field variable and uses
> //CodeCharge function to grab the variable
> $s_Industry = CCGetParam("s_Industry", "");
> $s_LocationState = CCGetParam("s_LocationState", "");
> $s_TaxTerm = CCGetParam("s_TaxTerm", "");
> //Here is the parsing of the array.  I'm not sure
> what the $proj variable is for.  I gather it's a
> holder for the array values
> if (count($s_Industry) > 0 AND is_array($s_Industry)) {
> foreach ($s_Industry as $key => $value) {
> if ($Proj1 != "") $Proj1 = $Proj1.",";
> $Proj1 = $Proj1."'".$value."'";
> }
> }

$Proj1 now contains a comma-separated list of the values passed to
$s_Industry, which was filled by the CCGetParam() above.  The above code
block is equivalent to (and would be better coded as):

  if (count($s_Industry) > 0 AND is_array($s_Industry)) {
     $Proj1 = "'".implode("','", $s_Industry)."'";

which may look somewhat familiar to you!

> //Parsing next array
> if (count($s_LocationState) > 0 AND
> is_array($s_LocationState))
> {
> foreach ($s_LocationState as $key => $value) {
> if ($Proj2 != "") $Proj2 = $Proj2.",";
> $Proj2 = $Proj2."'".$value."'";
> }
> }
> //Parsing file array
> if (count($s_TaxTerm) > 0 AND is_array($s_TaxTerm)) {
> foreach ($s_TaxTerm as $key => $value) {
> if ($Proj3 != "") $Proj3 = $Proj3.",";
> $Proj3 = $Proj3."'".$value."'";
> }
> }

These two blocks are similar for the other two parameters, $s_LocationState
and $s_TaxTerm

> Here is what will be the death of me :)
> First the where condition below is being appended to
> anoher file in my main sql statement (don't ask:))
> CC keeps their code in various sections and files.
> Anyway , if you remember yesterday, it was determined
> that I needed the where condition to be dynamically
> created based on the user input.
> Obviously the code below does nothing of that sort.

Obviously it does, using the lists of values built above.

> So as a start, I'm trying to figure out what I can do
> with this section here (since this is really what
> needs to be changed, I think) to make it all right.
> if ($Proj1)
> $VendorJobs->ds->SQL.= " AND (`VendorJobs`.Industry IN (".$Proj1."))";

Plug the value for $Proj1 built above into this, and again you have
something that may look very familiar to you.  It's the very same IN clause
I was urging you to use yesterday! ;)

> if ($Proj2)
> $VendorJobs->ds->SQL.= " AND
> (`VendorJobs`.LocationState IN (".$Proj2."))";
> if ($Proj3)
> $VendorJobs->ds->SQL.= " AND (VendorJobs.TaxTerm IN (".$Proj3."))";
> echo "SQL:". $VendorJobs->ds->SQL."<br>";

So you now have a dynamically built portion of SQL, in $VendorJobs->ds->SQL,
that has a clause like "AND x IN ('a','b','c')" for each input field that
has any values set.  According to your specs, this could be anywhere up to
six separate clauses.  This seems to be exactly what you wanted, so your
code looks good to go.

To help you understand exactly what's going on here, or in any script or
program you're struggling to interpret, I would recommend two time-honoured

(i) Dry running: get out your genuine old-fashioned pen and paper, pretend
you're the PHP interpreter processing this program, and write down the value
of each variable as you work through the code.  Yes, it can be quite
long-winded and tedious, but you really get a tremendous feel for exactly
what's going on.  The number of times I've done this and cursed myself as
I've watched a value going out of range, or not getting set at all, I
couldn't begin to count.

(ii) As a variation of the above, put *lots* of debugging echos in your
script: echo the value of every variable frequently and redundantly -- it
can help sometimes just to have the reassurance that a value really hasn't
changed, even though you know it absolutely shouldn't!!  Again, if you're
struggling with how a script operates this can help you see how values are
built up, and can often show you exactly where a wrong value gets calculated
(and how, and maybe even why).  It's especially important to echo your final
complete SQL statement just before it's executed, so that if it produces an
error message you've got the actual relevant SQL right in front of you.

Hope this helps.



Mike Ford,  Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Headingley Campus, LEEDS,  LS6 3QS,  United Kingdom
Tel: +44 113 283 2600 extn 4730      Fax:  +44 113 283 3211 

PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to