strange behavior while including a class in php

Posted by user1864539 on Stack Overflow See other posts from Stack Overflow or by user1864539
Published on 2012-11-29T22:31:50Z Indexed on 2012/11/29 23:04 UTC
Read the original article Hit count: 166

Filed under:
|
|
|

I'm experiencing a strange behavior with PHP. Basically I want to require a class within a PHP script. I know it is straight forward and I did it before but when I do so, it change the behavior of my jquery (1.8.3) ajax response. I'm running a wamp setup and my PHP version is 5.4.6.

Here is a sample as for my index.html

head (omitting the jquery js include)

<script>
    $(document).ready(function(){
        $('#submit').click(function(){
            var action = $('#form').attr('action');
            var form_data = {
                fname: $('#fname').val(),
                lname: $('#lname').val(),
                phone: $('#phone').val(),
                email: $('#email').val(),
                is_ajax: 1
            };

            $.ajax({
                type: $('#form').attr('method'),
                url: action,
                data: form_data,
                success: function(response){
                    switch(response){
                        case 'ok':
                            var msg = 'data saved';
                        break;
                        case 'ko':
                            var msg = 'Oops something wrong happen';
                        break;
                        default:
                            var msg = 'misc:<br/>'+response;
                        break;
                    }
                    $('#message').html(msg);
                }
            });

            return false;
        });
    });
</script>

body

<div id="message"></div>
<form id="form" action="handler.php" method="post">
    <p>
        <input type="text" name="fname" id="fname" placeholder="fname">
        <input type="text" name="lname" id="lname" placeholder="lname">
    </p>
    <p>
        <input type="text" name="phone" id="phone" placeholder="phone">
        <input type="text" name="email" id="email" placeholder="email">
    </p>
    <input type="submit" name="submit" value="submit" id="submit">
</form>

And as for the handler.php file:

<?php
require('class/Container.php');

$filename = 'xml/memory.xml';

$is_ajax = $_REQUEST['is_ajax'];
if(isset($is_ajax) && $is_ajax){

    $fname = $_REQUEST['fname'];
    $lname = $_REQUEST['lname'];
    $phone = $_REQUEST['phone'];
    $email = $_REQUEST['email'];

    $obj = new Container;
    $obj->insertData('fname',$fname);
    $obj->insertData('lname',$lname);
    $obj->insertData('phone',$phone);
    $obj->insertData('email',$email);
    $tmp = $obj->give();
    $result = $tmp['_obj'];
    /*
        Push data inside array
    */
    $array = array();
    foreach($result as $key => $value){
        array_push($array,$key,$value);
    }

    $xml = simplexml_load_file($filename);
    // check if there is any data in
    if(count($xml->elements->data) == 0){
        // if not, create the structure
        $xml->elements->addChild('data','');
    }
    // proceed now that we do have the structure
    if(count($xml->elements->data) == 1){
        foreach($result as $key => $value){
            $xml->elements->data->addChild($key,$value);
        }
        $xml->saveXML($filename);
        echo 'ok';
    }else{
        echo 'ko';
    }
}

?>

The Container class:

<?php
class Container{
    private $_obj;

    public function __construct(){
        $this->_obj = array();
    }

    public function addData($data = array()){
        if(!empty($data)){
            $oldData = $this->_obj;
            $data = array_merge($oldData,$data);
            $this->_obj = $data;    
        }
    }

    public function removeData($key){
        if(!empty($key)){
            $oldData = $this->_obj;
            unset($oldData[$key]);
            $this->_obj = $oldData;
        }
    }

    public function outputData(){
        return $this->_obj;
    }

    public function give(){
        return get_object_vars($this);
    }


    public function insertData($key,$value){
        $this->_obj[$key] = $value;
    }
}

?>

The strange thing is that my result always fall under the default switch statement and the ajax response fit both present statement. I noticed then if I just paste the Container class on the top of the handler.php file, everything works properly but it kind of defeat what I try to achieve.

I tried different way to include the Container class but it seem to be than the issue is specific to this current scenario.

I'm still learning PHP and my guess is that I'm missing something really basic. I also search on stackoverflow regarding the issue I'm experiencing as well as PHP.net, without success.

Regards,

© Stack Overflow or respective owner

Related posts about php

Related posts about jQuery