[Résolu]UDT : Ajax + requête SQL -
Celtic MAn - 21/06/2012
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.3
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
je souhaite mettre en place un système d'affichage "dynamique" pour mes données stocker dans ma BDD. Je souhaite donc faire l'affichage dans la même page.
Je suis parti de cet exemple :
http://www.w3schools.com/php/php_ajax_database.asp
Code :
[== PHP ==]
echo '<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","./uploads/getuser.php?q="+str,true);
xmlhttp.send();
}
</script>';
echo 'Sélectionnez le client : ';
echo '<form name="frm">';
echo '<select size=1 name="client" onchange="showUser(this.value)>'."\n";
echo '<option value="-1">Choisir un client<option>'."\n";
$liste_client = $bdd->query('SELECT DISTINCT nom_entreprise FROM espacewcln ORDER BY nom_entreprise');
while ($resultat = $liste_client->fetch()) {
echo '<option value="'.$resultat['id_client'].'">'.$resultat['nom_entreprise'];
echo '</option>'."\n";
}
echo '</select>'."\n";
echo '</form>';
Ma liste de nom d'entreprise s'affiche bien, mon fichier getuser.php :
Code :
[== PHP ==]
/* Connexion BDD */
$q=$_GET["q"];
$test= $bdd->query("SELECT nom_entreprise ,id_question_reponse, question,reponse,statut,site,date_creation FROM espacewcln WHERE id_client = '.$q.' ORDER BY STR_TO_DATE(date_creation, '%Y-%m-%d') DESC LIMIT 0, 10");
Mais hélas ça ne fonctionne pas, il n'a pas l'air de récupérer ma variable. Pensez vous déjà que c'est possible et si oui avez vous une idée
Merci
[Résolu]UDT : Ajax + requête SQL -
bess - 21/06/2012
1er point : Pourquoi utiliser cmsmadesimple si tu place ton code PHP dans des fichiers pas sécurisés, que dalle ?
Citation :xmlhttp.open("GET","./uploads/getuser.php?q="+str,true);
Transforme moi vite ca en une UDT dans une page avec une URL précise :
Citation :xmlhttp.open("GET","{/literal}{root_url}{literal}"/index.php?page=truc&q="+str,true);
2eme point : J'ai quand même l'impression que tu aimes faire compliqué quand c'est faisable simplement toi...
JQuery.get :
http://api.jquery.com/jQuery.get/
Connexion Bdd :
http://www.cmsmadesimple.fr/blog/16/15/Requeter-facilement-la-bdd-de-cmsmadesimple#main
3eme point : astuce gratuite du jour :
Citation :{/literal}{root_url}{literal}"/index.php?page=truc&q="+str
amènera vers une page avec le contenu de l'UDT mais également avec tout le template, ce que tu ne recherches pas. Pour cela tu ajoutes un paramètre spécial cmsmadesimple
Citation :&showtemplate=false
ce qui donne
Citation :{/literal}{root_url}{literal}"/index.php?page=truc&showtemplate=false&q="+str
[Résolu]UDT : Ajax + requête SQL -
Celtic MAn - 21/06/2012
Merci pour tes astuces,
donc maintenant j'ai deux UDT différentes, une vueArchive et une requeteArchive.
Du coup maintenant j'ai cette ligne :
xmlhttp.open("GET","{/literal}{root_url}{literal}"/index.php?page=archive&showtemplate=false&q="+str);
Avec ma page archive qui contient ma balise requeteArchive, c'est bien ça ?
[Résolu]UDT : Ajax + requête SQL -
bess - 21/06/2012
oui.
A ceci près que Jquery te réduirait ton code JS avec un ratio 1:10 facile
mais oui
[Résolu]UDT : Ajax + requête SQL -
Celtic MAn - 22/06/2012
Donc techniquement je peux aussi faire :
Code :
[== PHP ==]
echo '<form name="frm" action="{literal}{root_url}{/literal}"/index.php?page=archive2&showtemplate=false&q="+str)>';
Pour traiter mon formulaire ?
[Résolu]UDT : Ajax + requête SQL -
bess - 22/06/2012
si tu fais un echo de code contenant du smarty il te faudra forcer le parcing smarty, sinon le code HTML généré sera simplement
Code :
<form name="frm" action="{literal}{root_url}{/literal}"/index.php?page=archive2&showtemplate=false&q=maChaine)>
Au passage je te corrige :
Citation :echo '<form name="frm" action="{literal}{root_url}{/literal}/index.php?page=archive2&showtemplate=false&q='.$str.'">';
Fais gaffe aux appostrophe/guillemet et utilisation de tes variables.
Bref je te parlais de forcer le parsing Smarty. La méthode est la suivante, à coller en bas de ton UDT qui produit le code HTML/Smarty
Code :
$HTML = '<form name="frm" action="{literal}{root_url}{/literal}/index.php?page=archive2&showtemplate=false&q='.$str.'">';
//Compilation Smarty
$smarty->_compile_source('temporary template', $HTML, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
echo $_contents;
En utilisant intelligemment la syntaxe
heredoc tu t'épargnes les soucis d'ouverture/fermeture de guillemets
Code :
$HTML = <<<EOT
<form name="frm" action="{literal}{root_url}{/literal}/index.php?page=archive2&showtemplate=false&q=$str">
EOT;
//Compilation Smarty
$smarty->_compile_source('temporary template', $HTML, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
echo $_contents;
[Résolu]UDT : Ajax + requête SQL -
Celtic MAn - 22/06/2012
Donc maintenant j'ai :
Code :
[== PHP ==]
$HTML = <<<EOT
<form name="frm" action="{literal}{root_url}{/literal}/index.php?page=archive2&showtemplate=false&q=$str">
EOT;
echo '<select size=1 name="client">';
echo '<option value="-1">Choisir un client<option>';
$liste_client = $bdd->query('SELECT DISTINCT nom_entreprise FROM espacewcln ORDER BY nom_entreprise');
while ($resultat = $liste_client->fetch()) {
echo '<option value="'.$resultat['id_client'].'">'.$resultat['nom_entreprise'];
echo '</option>'."\n";
}
echo '</select>';
echo '<input type=submit value="Envoyer"/>';
echo '</form>';
//Compilation Smarty
$smarty->_compile_source('temporary template', $HTML, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
Mais quand je clique sur envoyer, la nouvelle page ne se charge pas :/ ...
[Résolu]UDT : Ajax + requête SQL -
bess - 22/06/2012
refais la proprement :
I - pourquoi j'ai l'impression qu'il me manque un bout de ton code :
$liste_client = $bdd->query('SELECT DISTINCT nom_entreprise FROM espacewcln ORDER BY nom_entreprise');
d’où vient $bdd ? tu as lu mon article sur Comment bien requêter une base de donnée sur cmsms ? reprend plutôt mon code.
II - pourquoi jongler entre syntaxe heredoc et une autre syntaxe ? toujours le plaisir de complexifier ton code j'ai l'impression
Code :
$HTML = <<<EOT
<form name="frm" action="{root_url}/index.php?page=archive2&showtemplate=false&q=$str">
<select size=1 name="client">
<option value="-1">Choisir un client<option>
EOT;
Ce n'est pas le seul endroit ou tu peux/dois faire ce genre d'optimisation.
III - comment peux tu imaginer qu'en jonglant entre une variable $HTML et des écho tu arrive à compiler ton code HTML/smarty en entier ????
Tu vas trop vite sans chercher à comprendre le code que je te file, documente toi en php parce que je vais pas faire ton UDT à ta place. Je peux te montrer la voie à suivre mais je suis pas taxis.
Allez hop au boulot
[Résolu]UDT : Ajax + requête SQL -
Celtic MAn - 22/06/2012
I. Pour ma variable BDD, j'ai mes initialisions de connexion plus haut, juste que j'ai sélectionné la partie de code qui me pose problème
II. Effectivement j'ai été un peu trop vite, j'ai pas assez analysé ton code.
Code :
[== PHP ==]
$HTML = <<<EOT
<form method="post" name="frm" action="{root_url}/index.php?page=archive2&showtemplate=true">
<select size=1 name="client[]">
<option value="-1">Choisir un client<option>
EOT;
//Compilation Smarty
$smarty->_compile_source('temporary template', $HTML, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
echo $_contents;
$liste_client = $bdd->query('SELECT DISTINCT nom_entreprise FROM espacewcln ORDER BY nom_entreprise');
while ($resultat = $liste_client->fetch()) {
echo '<option value="'.$resultat['id_client'].'">'.$resultat['nom_entreprise'];
echo '</option>'."\n";
}
$HTML = <<<EOT
</select>
<input type=submit value="Envoyer"/>
</form>
EOT;
//Compilation Smarty
$smarty->_compile_source('temporary template', $HTML, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
echo $_contents;
J'ai changé ma méthode en passant pas POST, je suppose que ça ne prose pas de soucis et ça évite de passé la variable dans l'url.
J'ai aussi enlevé les balises {literal} vu que je "passe" par du HTML à cette endroit.
[Résolu]UDT : Ajax + requête SQL -
bess - 22/06/2012
Du coup je peux clôturer ?