IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Objets XMLHttpRequest <-> Sql


Sujet :

JavaScript

  1. #1
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut [AJAX] Objets XMLHttpRequest <-> Sql
    Bonjour � tous,

    Je m'adresse � ceux qui ont d�j� utilis�s les objets XMLHttpRequest du javascript plus particuli�rement.
    Voil� le blem :

    J'ai un formulaire de selection de maison � faire, les crit�res sont le type de logement (maisons, appart, etc), le lieu, le prix... et j'en passe.
    Le bouton de validation permet de faire ma requete de selection dans une base de donn�e MySQL via un obket XMLHttpRequest.
    L'objet XMLHttpRequest en question r�cup�re les �l�ments de selection du formulaire et les soumet � un script PHP charg� de faire la requete sur la base de donn�e. Ce script PHP effectue la requete, et lorsque la requete donne des r�sultats, ce script �crit dans la foul�e des donn�es javascript de mani�re � ce qu'au retour, l'objet XMLHttpRequest interpr�te et modifie dynamique une <DIV> de la page courante (div d'affichage des r�sultats)

    Tout cela fonctionne tres bien, seulement lorsqu'il y a beaucoup d'�lement de r�ponse (beaucoup de mainson qui correspondent � la requete de selection), rien ne se passe car il y a une erreur javascript :

    Erreur : Unterminated string literal
    Fichier source : ....
    "133000","montendre","Maison en RDC : Cuisine, sejour ... "



    Et il met la petite fleche d'erreur sur le "M" de maison. :s

    Donc voil�, autre information : la chaine "Maison en RDC..." proviens d'un champ de type "text" de la base de donn�e.

    Je me demandais pourquoi cette erreur arrivait et s'il s'agissait �ventuellemnet d'un probleme de taille du retour de la requete dans l'objet XMLHttpRequest.

    Si quelqun pouvait me sauver, je lui en serais tres reconnaissant

    Merci � vous

  2. #2
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Je me demandais aussi s'il n'y aurait pas un probl�me de taille avec l'objet XMLHttpRequest ? (le type TEXT de ma base de donn�es prend peut etre beaucoup de place ?!)

    Help me please

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par d�faut
    Bonjour, quelques pistes :

    Quelle est la m�thode d'envoi de tes donn�es GET ou POST ?
    Si c'est GET, je ne suis pas certain mais il est possible que tu sois confront� � des limitations.

    Encodes-tu les variables envoy�es ?
    Je sais que j'ai rencontr� ton probl�me au d�but.
    Je l'ai r�solu par l'utilisation de encodeURIComponent

  4. #4
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Merci de ta r�ponse, mais mon probleme n'est pas lorsque je fais appel � mon script PHP depuis mon XMLHttpRequest, mais lorsque l'objet XMLHttpRequest "�value" le retour du script php, donc mes instructions javascript.

    Sinon mes param�tres sont pass�s en POST et non encrypt�s � mon script php.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par d�faut
    Je penche alors pour un probl�me c�t� PHP et non javascript (J'ai eu �galement ce souci -> retour de variables trait�es par PHP vers JS)

    Oriente tes recherches vers la fonction utf8_decode de php :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    <?php
    utf8_decode(ta_chaine_de_retour_vers_javascript);
    ?>

  6. #6
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    M�me s'il s'agit de code javascript en retour ?

    Voil� pr�cis�ment mon script php :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    <?php
     
    	require "../db_fns.php" ;
    	require "../config/final_var.php";
     
    	$valide = true;
    	// Récupération des données passées en paramètres au script :
    	if ( isset($_POST["state"]) ) $state = $_POST["state"];
    	else $valide = false;
    	if ( isset($_POST["city"]) )$city = $_POST["city"];
    	else $valide = false;
    	if ( isset($_POST["minprice"]) ){
    		$tmp = explode('$',$_POST["minprice"]);
    		$minprice = $tmp[0];
    	}
    	else $valide = false;
    	if ( isset($_POST["maxprice"]) ){
    		$tmp = explode('$',$_POST["maxprice"]);
    		$maxprice = $tmp[0];
    	}
    	else $valide = false;
    	if ( isset($_POST["type"]) )$type = $_POST["type"];
    	else $valide = false;
    	if ( isset($_POST["order"]) )$orderBy = $_POST["order"];
    	// Valeur par défaut pour le tri des résultats :
    	else $orderBy = "price";
     
    	// Si tous les paramètres sont OK, connection à la base de donnée :
    	if ( $valide && ($conn = db_connect()) != null ){
     
    		// Requête de selection en fonction des informations selectionnées dans le formulaire :
    		$query = "SELECT h.id, h.title, h.address, h.city, h.state, h.zip, h.price, h.previewdesc, h.type, h.imageloc
    					FROM homes h, type t 
    					WHERE h.city = '".$city."' 
    					AND h.state = '".$state."' 
    					AND h.type = t.libelle_type 
    					AND t.id_type = '".$type."' ";
     
    		if ( $minprice != null )
    			$query .= "AND h.price >= '".$minprice."' ";
    		if ( $maxprice != null && $maxprice != -1 )
    			$query .= "AND h.price <= '".$maxprice."' ";
    		$query .= "ORDER BY h.".$orderBy;
     
     
    		$result = @mysql_query($query);
     
    		// Fermeture de la connexion à la base :
    		deconnect($conn,0);
     
    		$affichage = "";
     
    		if ( $result != null ) {
    			$nbAnnonces = @mysql_num_rows($result);
    			if ( $nbAnnonces == 0 ){
    				$affichage .= 'var dive = document.getElementById("'.$LABEL_DIV_RES.'");'; 
    				$s = "<CENTER>Nous n'avons aucun article en vente qui puisse correspondre à votre demande</CENTER>";
    				$s = removeaccents($s);
    				$affichage .= 'dive.innerHTML = "'.$s.'";';
     
    			}
    			else {
    				echo 'journal = new Journal();';
    				echo 'journal.CreatePage();';
    				echo 'var page = journal[journal.nbPage - 1];';
    				$num_Annonce = 1;
    				while ( $line = @mysql_fetch_array($result) ){
    					// --- Maximum d'annonce par page atteind, nouvelle page a créer
    					if ( $num_Annonce == ($MAX_ANNONCE_PER_PAGE + 1) ){
    						$num_Annonce = 1;
    						echo 'journal.CreatePage();';
    						echo 'page = journal[journal.nbPage - 1];';
    						echo 'alert("nouvelle page crée");';
    					}
    					$title = removeaccents($line["title"]);
    					$address = removeaccents($line["address"]);
    					$city = removeaccents($line["city"]);
    					$desc = removeaccents($line["previewdesc"]);
    					$state = removeaccents($line["state"]);
    					$type = removeaccents($line["type"]);
    					echo 'page.AddAnnonce("'.$line["id"].'","'.$title.'","2006-11-01","'.$line["price"].'","'.$line["imageloc"].'","'.$desc.'","'.$address." ".$line["zip"]." ".$city." [".$state."]".'","'.$type.'");';
     
    					$num_Annonce++;
    				}
    				echo 'journal.DisplayPage("'.$LABEL_DIV_RES.'");';
    			}
    		}
    	}
    ?>
    Le fonction javascript qui appelle le script :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    function traitement3 (  ){
     
    	// --- Retrieve state, city, min_price, max_price and type values
    	var states = document.forms[0].state;
    	var state = states[states.selectedIndex].value;
     
    	var cities = document.forms[0].city;
    	var city = cities[cities.selectedIndex].value;
     
    	var maxprices = document.forms[0].prixmax;
    	var maxprice = maxprices[maxprices.selectedIndex].value;
     
    	var minprices = document.forms[0].prixmin;
    	var minprice = minprices[minprices.selectedIndex].value;
     
    	var types = document.forms[0].type;
    	var type = types[types.selectedIndex].value;
     
    	if ( verif(state,city,minprice,type) )
    	{
    		// All values are OK, launch the request
    		var xhr_object = null; 
     
    	   if(window.XMLHttpRequest) // Firefox 
    	      xhr_object = new XMLHttpRequest(); 
    	   else if(window.ActiveXObject) // Internet Explorer 
    	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    	   else { // XMLHttpRequest non supporté par le navigateur 
    	      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	      return; 
    	   } 
     
    	   xhr_object.open("POST", "./traitements/traitement2.php", true);
     
    	   xhr_object.onreadystatechange = function() { 
    	      if(xhr_object.readyState == 4) {
    			 //alert(xhr_object.responseText); // DEBUG MODE
    	         eval(xhr_object.responseText);
    		  }
    	   } 
     
    	   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	   var data = "state="+state+"&city="+city+"&minprice="+minprice+"&maxprice="+maxprice+"&type="+type;
    	   xhr_object.send(data);
    	}
     
    }
    Le script PHP est donc charg� de construire un journal d'annonces pour les entr�es r�cup�r�es de la requ�tes, puis de les afficher (fonction journal.DisplayPage(...) )

    Ce qui cloche c'est le param�tre 'desc' qui est tres long puisqu'il s'agit d'une description.
    Ce qui est bizarre c'est que lorsqu'il y a deux � trois maisons de selectionn�es, ca passe nickel, mais des qu'il y en a plus ca merde :s

    Donc sinon, les code que tu me dit, je le passerai donc o� pr�cis�ment ?

  7. #7
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 532
    Par d�faut
    copie le code complet renvoy� par ton AJAX et mets le sur le forum... ce n'est que comme ca qu'on pourra voir la faute...

  8. #8
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Okai, je ferais ca ce soir de retour chez moi

  9. #9
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Alors, voil� UN r�sultat qui fonctionne du fait qu'il n'y ai qu'une seule maison correspondant aux crit�res de recherche. Il s'agit de ce qui est retourn� par le script PHP pour etre interpr�t� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    var journal = new Journal();journal.CreatePage();var page = journal[journal.nbPage - 1];journal.CreatePage();page = journal[journal.nbPage - 1];page.AddAnnonce("12","CHARENTAISE A RENOVER","2006-11-01","109100","70_courpignac_ramecourt_031.jpg","Entr?e-cuisine avec chemin?e, petit salon chemin?e, 3 chambres, Douche-WC, arri?re cuisine, confiturier. Garage avec grande d?pendance, terrain.","Bergeuil 7 Km MONTENDRE 17130 [france]","Maison");journal.DisplayPage("journal");
    Sinon en cas d'erreur je ne peux pas tout afficher.. mais en gros il bloque en plein milieu d'une chaine de caract�re de page.AddAnnonce("12","...","2006..","109...","....jpg","... ICI ...",...);


    Et le fais de renvoyer via la fonction utf8_decode ne change rien :/

    Je pense qu'il s'agit donc bien d'un probleme de d�passement dans l'objet XMLHttpRequest ?!

  10. #10
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 532
    Par d�faut
    Pense � remplacer les " par \" et les ' par \'

  11. #11
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Arf, non je ne pense pas, je me suis peut etre mal fait comprendre.

    Le r�sultat donn� deux cran plus haut n'est pas ce qui est ce qui est receptionn� au niveau de l'objet XMLHttpRequest, et donc directement interpr�t�

    Donc le probl�me reste toujours pr�sent.

    EDIT : Je pr�cise aussi qu'il n'y a ni " ni ' dans aucune de mes donn�es pr�sentent dans la base de donn�es.

  12. #12
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 532
    Par d�faut
    et des retours � la ligne ? si oui, faut les remplacer par \n

  13. #13
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Ha ha !
    La tu as certainement mis le doigt sur ce qui cloche !

    Il me semble qu'il y a des retours � la ligne dans certaines descriptions en effet, je vais voir ca, mais comment on les remplace par '\n', ou plutot comme sont-ils identifi�s dans la base de donn�es (encod�s) ?

  14. #14
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    J'ai tent� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    $desc = str_replace("\n"," ",$desc);
    dans la partie :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    while ( $line = @mysql_fetch_array($result) ){
    					// --- Maximum d'annonce par page atteind, nouvelle page a créer
    					if ( $num_Annonce == $MAX_ANNONCE_PER_PAGE ){
    						$num_Annonce = 1;
    						$affichage .= 'journal.CreatePage();';
    						$affichage .= 'page = journal[journal.nbPage - 1];';
    					}
    					$title = removeaccents($line["title"]);
    					$address = removeaccents($line["address"]);
    					$city = removeaccents($line["city"]);
    					$desc = removeaccents($line["previewdesc"]);
    					$desc = str_replace("\n"," ",$desc);
    					$state = removeaccents($line["state"]);
    					$type = removeaccents($line["type"]);
    					$affichage .= 'page.AddAnnonce(\"'.$line["id"].'\",\"'.$title.'\",\"2006-11-01\",\"'.$line["price"].'\",\"'.$line["imageloc"].'\",\"'.$desc.'\",\"'.$address." ".$line["zip"]." ".$city." [".$state."]".'\",\"'.$type.'\");';
    				}
    				$affichage .= 'journal.DisplayPage(\"'.$LABEL_DIV_RES.'\");';
    Pensant ainsi supprimer les retours � la ligne en les remplacant juste par un espace, mais j'ai toujours la m�me erreur, 'Unterminated string literal"

  15. #15
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Merci pour vos r�ponse, j'ai r�solu mon probl�me en remplacant par le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    $desc = str_replace( "\r", "\\", $desc );
    J'ai pour ceci lu cette page : http://www.zend.com/zend/tut/tutoria...1&anc=0&view=1

  16. #16
    kij
    kij est d�connect�
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par d�faut
    Ok, par contre, d�sormais il me fait un "illegal caracter" alors que je n'ai rien chang� et cela sur un r�sultat ne pr�sentant pas de retour � la ligne dans la description... donc ca devrait march� comme avant, mais non, je ne comprends pas, surtout qu'il n'est pas capable d'identifier le caract�re qui ne va pas :s

    EDIT : j'ai rien dit, l'erreur venait d'ailleurs... toudoudoudoudoudou..

    Merci � tous, sujet r�solu !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [AJAX] Question AJAX / objet XMLHttpRequest
    Par michael rossi dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 07/05/2008, 13h31
  2. [AJAX] documentation de l'objet XMLHttpRequest
    Par linkin_khalid dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 13/10/2006, 17h29
  3. [AJAX] concatenation ajax objet
    Par klimero dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 26/04/2006, 11h16
  4. l'objet XMLHTTPRequest
    Par rosros dans le forum G�n�ral JavaScript
    R�ponses: 10
    Dernier message: 02/03/2006, 12h58
  5. Objets XMLHTTPRequest
    Par alain31tl dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 26/12/2005, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo