1

I have posted a few questions previously on how to do the same thing, and people have pointed me in the right direction. So my apologies if this is getting repetitive. However I am posting this time to see if someone could spare a couple of seconds to help me with javascript.

I have a form that already submits data into a different table, and want to implement a "pre-canned response feature". This would simply be a drop list selection that when the onChange event fires of an option list it runs the javascript that populates a following text area with appropriate data.

I believe as it is already in a form, I can't simply put it in another form and use submit, also, I want to be able to do this without refreshing the page.`

<form action="<?=base_url();?>ticket/addmessage/<?=$ticket_details['id'];?>/" enctype="multipart/form-data" method="post" name="message">

        <label for="frm_precan">Canned Response</label>
        <span class="input">                        
            <select id="frm_precan" name="precan" onchange="updateText()">
                <option value="">--Please Select--</option>
                <?php foreach($precan_list as $precan) :?>
                    <option value="<?=$precan['id']; ?>"><?=$precan['name'];?></option>
                <?php endforeach; ?>            
            </select>
        </span>

        <ul>
            <li><label for="message">Message<span class="req">*</span></label><span class="input"></span><br/></li> 
        </ul>   
        <textarea style="width: 100%; margin: 0; padding: 0; border-width: 1; font-family: courier;" name="message" rows="10" id="text_area"></textarea>
        <button type="submit"><span>Add Message</span></button>

</form>

This is my HTML form. It uses PHP via SQL to populate the option list, as the pre-canned messages are stored in SQL table.

So what I need to do is somehow link this Javascript (that is called on the onChange):

        function updateText()
       {
       var message = document.getElementById('frm_precan').value;
       $('#text_area').val(message)
       };

(very basic, I know, but this is where I struggle) So this code wants to pass the ('frm_precan').value; (which is the ID in the table, and the field by which I want to query the correct message)... to a php file that looks like this:

    public function get_message($message_id)
    {
        $sql_list  =
        "
        SELECT *
        FROM  ".$this->tables_automessages."
        WHERE id = '".mysql_real_escape_string($message_id)."'";

        $query = $this->db->query($sql_list);
        if($query->num_rows() > 0)
            {
            foreach ($query->result_array() as $row)
                {
                $return[] =
                array(
                        'message'                   =>  $row['message']

                    );
                }
            return $return;
            }
        else return false;
        }
}

O, and I am using code ignitor, so this could also be a reason why I am getting confused. So the variable wants to come out of the javascript into a controller then go to the SQL query.

If someone can understand what I mean, I will be amazed... and very grateful.

3
  • What's the problem you're having? (it might be that your return statement in your PHP is inside the for loop, that looks a little odd). Commented Jul 6, 2012 at 11:05
  • The problem I have is using the javascript. I have posted a very basic bit of javascript, as I am not very confident with javascript. I just need help with making it work something like what I've seen on various tutorials......e.g. w3schools.com/php/php_ajax_database.asp Commented Jul 6, 2012 at 11:10
  • @alnorth29: the return statement isn't inside the loop, it's where it needs to be. @mrsorbose: I see nothing ajax-like in your code anywhere, though. You might want to look at jQuery's (as you seem to use it already) $.ajax method. Also, if it's a separate script (ie not a class), get_message will be a standard function, not a member function/method, so drop the public keyword Commented Jul 6, 2012 at 11:14

2 Answers 2

2

Your updateText function can be changed to this to get the value from your controller and put the resulting text in the text area.

function updateText()
{
    var messageId = $('#frm_precan').val();
    $.get('/yourcontroller/get_message/' + messageId, function(data) {
        $('#text_area').val(data)
    });
}

Looking at your get_message function you should either change it to return just the message text instead of an array or else you'll need to json_encode the results and change the jQuery .get call to .getJSON instead.

Sign up to request clarification or add additional context in comments.

Comments

1

To use post in your ajax call:

function updateText()
{
    $.ajax({
        url: '/controller/get_message',
        data: {message_id:$('#frm_precan').val()},//no need to json encode, jQ does this for you
        type: 'POST',
        dataType: 'json',//or omit, jQ does an intelligent guess
        success: function(response)
        {
            console.log(responese);
            //function will be called when the ajax call is completed
        }
    });
}

In your controller, the get_message member function could look like this:

public function get_message()
{
    $id = $this->input->post('message_id');//=== data key used to send request
    //do your query 
}

Here is a similar question BTW
And here, you can find all sorts of things you can specify with the jQuery.ajax method ($.ajax is the same thing, $ and jQuery are synonyms)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.