Je rencontre un comportement étrange avec PHP. Fondamentalement, je veux exiger une classe dans un script PHP. Je sais que c'est simple et que je l'ai fait avant mais quand je le fais, ça change le comportement de ma réponse ajax (jquery) (1.8.3). Je cours une installation de wamp et ma version de PHP est 5.4.6.comportement étrange tout en incluant une classe en php
Voici un échantillon pour mon index.html
tête (en omettant les js jquery comprennent)
<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>
corps
<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>
Et comme pour le fichier handler.php:
<?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';
}
}
?>
La classe Container:
<?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;
}
}
?>
La chose étrange est que mon résultat toujours tomber sous l'instruction switch par défaut et la réponse ajax correspondent à la fois présente déclaration. J'ai alors remarqué que si je collais juste la classe Container en haut du fichier handler.php, tout fonctionnait correctement, mais c'était en quelque sorte une défaite de ce que j'essayais d'accomplir.
J'ai essayé différemment d'inclure la classe Conteneur, mais il semble que le problème soit spécifique à ce scénario.
J'apprends toujours PHP et je pense qu'il me manque quelque chose de vraiment basique. Je recherche aussi sur stackoverflow concernant le problème que je rencontre ainsi que PHP.net, sans succès.
Cordialement,
@ user1864539 a ajouté quelques informations supplémentaires. – dqhendricks
Merci, le json_encode a fait l'affaire. Quant à la fin php char je ne savais pas! Il n'y avait pas d'espace à la fin du fichier PHP mais je comprends le cauchemar qu'il aurait pu être! Merci encore! – happy