View Single Post

  #5 (permalink)  
Old 05-21-2008
sheldonlg
 
Posts: n/a
Default Re: Can you do this with PHP?

art@unsu.com wrote:
> On May 21, 11:30 am, sheldonlg <sheldonlg> wrote:
>> a...@unsu.com wrote:
>>> Hi,
>>> We have some scripts here where we use some AJAX to populate some of
>>> the page.
>>> Basically the AJAX routine calls a PHP script. That PHP script uses a
>>> bunch of ECHO statements to create the page. Then, we use the
>>> innerHTML to populate the section on the page.
>>> The problem is, we have a small javascript routine in the middile of
>>> the page which MUST be located there. It cannot be in the head.
>>> If this is straight HTML, it works fine. But, if we use the PHP to
>>> echo everything and then set the innerHTML, it does not work.
>>> Is there any way to perform this? Basically use PHP to output a small
>>> inline <SCRIPT> routine, and have it execute?
>>> Thank you!

>> Yes. Put a <div id="blah"> surrounding that block. Mow make the target
>> of the Javascript innerHTML be for that div, "blah". You can position
>> the "blah" wherever you want.
>>
>> Now, when you say in the middle of the page, do you mean that it is some
>> fixed position relative to what is above? Or, do you mean that it is in
>> the middle of the screen regardless of how you scroll the stuff behind.
>> The latter is handles (except IE6) with position: fixed. There are
>> workarounds for IE6 having to do with overflow. If you mean the latter,
>> that is handled with position: relative and position: fixed.
>>
>> By the way, I would use print rather than echo and use an ob_start to
>> gather it all before closing in and writing it.

>
>


You lost me at "hello". (to paraphrase and twist Jerry McGuire). I'll
try, though.


> Thanks for the reply. My explanation may be a bit convoluted, so,
> I'll try my best to explain it.
>
> We are trying to use AJAX and XML to populate the page. Our PHP
> script selects data from the database, returns the data to the calling
> Javascript routine and sets innerHTML by concatenating a long string
> like this:
>
> str = '<table>';
> str = str + '<TR>';
> str = str + '<TD>';
> str = str + '<INPUT TYPE=text NAME=CustName ID=CustName SIZE=25
> MAXLENGTH=25 VALUE="' + getElementTextNS("", "Name", r[i], 0)


OK so far. (assuming you also close tags properly)

>
> So, we create each <DIV> like that and then set innerHTML. Probably
> not the best way, but it works fine. There is also a javascript


Why not?

> calendar on the page. We populate the text box associated with the
> calendar with data from the AJAX routine using the following line
> though it is a bit more involved:
>
> document.Detail_Screen.EnterDate.value=getElementT extNS("",
> "entered_date", r[i], 0);
>
> The javascript is in a <DIV> which is in the normal HTML document and
> works fine. No problems.


Fine.

>
>
> The real issue is that our page has 3 combo boxes on it. We need to
> populate the combo boxes with values and the selected value should
> match what the value is in the database record that is being
> displayed. We do not want to hard code all the combo box values.


Watcha mean by "combo box". I have seen controls for dropdown lists
with multiple lines and I have seen text entries, but I have not seen a
combo box control that combines the two. (It would be nice, though, as
it enables the user to enter a value not on the list).

>
> So, how do we select all the values from the database that belong in
> the combo box and return them using AJAX? One of the boxes has 40
> options in it. We do not want to hard code 40 items.


By a mysql query? There has to be something constraining in the where
clause. You haven't said what. Once you do the proper query, you can
build the select list string and use that for the innerHTML.

>
> Because we did not know how to do that, we made our second attempt,
> which was to let the PHP script create the page via echo statements.


Oh, I see. You didn't want to put all those values in raw HTML. OK.

> The problem there is that the inline javascript routine is not
> executing. And, since we need to put the date value in the text box,


Why is it not executing. I have an AJAX application that builds an area
via AJAX with innerHTML and it calls javascripts when clicked. The only
prerequisite is that the javascript be in place at load time. I
accomplish this by loading the library when I call that page.

> how can we access that value? The text box is on the HTML side, and
> the PHP is on the server side.


What is the problem here? In the javascript that invokes the AJAX you have
var dateVal = getElementByID('id of the date text box').value;

You can create an object with
var obj = new Object();
and have obj.dateVal = dateVal;

You then pass that with the call to your AJAX and decipher it at the php
side.
>
>
> So in summary, we would like to use AJAX & XML. But, we do not know
> how to populate the combo boxes with values and be able to choose the
> selected value without returning 40 fields from the database. That is
> not a good plan.


I don't understand this.

>
> If we use the PHP method, then how do we access the date value so we
> can put it into the calendar text box? The page would be drawn on the
> PHP side. Since the calendar is on the HTML side, we cannot access it


The page is NEVER **drawn** on the php (server) side. It is ALWAYS
**drawn** on the HTML (client) side. You can compose a string on the
php side, but it is not drawn there.

> from the server....


You access it on the client, add the parameter into an object's field
and pass that to the server where it is deciphered. Clients side does
client things and server side does server things. They communicate, in
this case, with the AJAX calls and objects that are passed.

>
> Does it all make sense? Do you see our problem? If not let me know
> and I can try to explain more.


I think I understand you now. You, apparantly, don't know how to pass
parameters from the client to server via AJAX. Learn that and your
problems should be 99% solved.

>
> Thank you!


You're welcome. (Been in your shoes many times myself.) Hope this
helped you.


Reply With Quote