Intéraction avec une base de donnée

Eléphant du PHP | 377 Messages

03 mars 2007, 14:20

C'est tout à fait possible, et c'est bien là le principe de l'ajax:
javascript charge un fichier et le traite. Ce fichier est un XML, mais rien ne t'empeche d'appeler un script PHP qui va taper dans ta base et te renvoie un XML

Exemple simple:

Je charge villes.php?cp=75

villes.php :
/* il faut penser a prevoir les cas d'erreur, pas fait ici */
echo "<racine>";
$requete=mysql_query("SELECT * FROM villes WHERE cp LIKE '".$_GET['cp']."%' ORDER BY ville");
while($r=mysql_fetch_assoc($requete)) {
    echo "<item value=\"".$r['cp']."\" nom=\"".$r['ville'].\"">";
}
echo "</racine>";
puis dans ton fichier appelant, le javascript se charge de faire toutes les modifications necessaires à partir des éléments renvoyés par le script
Petit scarabée deviendra grand

Eléphant du PHP | 377 Messages

03 mars 2007, 14:24

C'est pas pour défendre mon idée, mais en lisant ton truc, et les infos que tu nous as données, je me dis quand même « oh attention, j'ai 2000 personnes qui travaillent en même temps, et je vais mobiliser ma base juste pour savoir si un code est unique »…

Imagine que 50% des utilisateurs entrent en même temps un code postal (il faut toujours envisager le pire, non ?), et tu te retrouves avec 1000 requêtes envoyées à la base juste pour avoir une information qui se réduit à quelques octets… Je sais pas ce qu'en pensent les pros, mais il y a quelque chose qui me parait disproportionné là-dedans.
On peut le voir comme ca, on peut aussi poser le probleme dans l'autre sens:
n'est-il pas disproportionné de charger à chaque fois coté client l'intégralité de la base de données ?
En plus des incovénients liés à javascript que j'ai développés plus haut, tu augmentes considérablement le temps de chargement et la bande passante utilisée (si ce genre de considérations entre en compte)
de plus, les bases sont concues pour faire face au genre de cas (rarissime) que tu présentes
Petit scarabée deviendra grand

Eléphanteau du PHP | 49 Messages

03 mars 2007, 14:31

re re re re re,
C'est tout à fait possible, et c'est bien là le principe de l'ajax:
javascript charge un fichier et le traite. Ce fichier est un XML, mais rien ne t'empeche d'appeler un script PHP qui va taper dans ta base et te renvoie un XML
LOL. Oui, tu me proposes donc la solution que je te proposais en contre exemple. :wink:

Je posais la question : *sans passer par l'utilisation classique d'un script PHP qui ferait le boulot*, peut-on atteindre directement une base ? LOL

Mais bon, je crois que je connais la réponse : pas encore.

Bien à toi,

Phil :wink:

Eléphanteau du PHP | 49 Messages

03 mars 2007, 14:38

Heu, pourquoi je me retrouve avec « Maître du phpinfo() » sous mon pseudo, moi ? J'ai atteint la barre fatidique ? Je réponds à trop de messages, c'est ça ? C'est quoi le prochain step ?

Mais j'en veux pas, moi ! LOL

Du PHP, depuis l'eau de javel, j'en fais même plus que quand je suis vraiment obligé (c'est à dire presque jamais), alors phpinfo(), je me souviens même plus que ça donne toutes les infos sur ma configuration et tout le tralala.

Non non, j'en veux pas ! j'en veux ! j'en veux pas !

Je veux « Maître du `fonction.caller.name` » ! voilà !

LOL

Hein ?… Quoi ?… Qu'est-ce que vous dîtes ?… On est sur le forum de PHPFrance, pas de JAVASCRIPTFrance ?… Ah merde… J'avais pas vu… Je m'ai perdu, chef… Je veux sortir, chef ! laissez-moi sortir ! laissez-moi sortir !!!!!


Houps…

Petit nouveau ! | 8 Messages

06 mars 2007, 11:07

Merci de vos réponses, je vais tester l'Ajax, car je pense que charger la base coté client à chaque raffraichissement de la page rabaisserait fortement la performance de l'application.
Modifié en dernier par DesmaT le 06 mars 2007, 12:02, modifié 2 fois.

Eléphanteau du PHP | 49 Messages

06 mars 2007, 11:35

Salut DesmaT,
[…] je vais tester l'Ajax, car je pense que charger la base coté client à chaque raffraichissement de la page rabaisserait fortement la performance de l'application.
Les pros confirmeront ou me contrediront peut-être (j'espère sincèrement qu'ils le feront, parce que c'est une information dont j'aimerais avoir confirmation), mais il n'y a aucun rechargement de la base côté client dans ce cadre là.

Le fichier javascript chargé dans le head par…

Code : Tout sélectionner

<script language="javascript"……… src="path de mon fichier javascript" />
… fonctionne comme une image : une fois qu'il est chargé, il est chargé, il ne se recharge pas chaque fois, même si l'on change de page.

Je pense ça — peut-être à tort — parce que lorsque je travaille sur mes modules javascript, si je ne *force* pas le rechargement de la page, les changements ne sont pas pris en compte, même en passant d'une page à l'autre, même en faisant un submit ou autre lien.

Bien à toi et bonne chance,

Phil

Petit nouveau ! | 8 Messages

06 mars 2007, 12:03

La solution est très simple grâce à l'Ajax, et il n'y pas de problème de stockage des données de la base.

Il m'a suffit de créer un fichier php de verification de la base, verif_cp.php :
<?php
include 'config.php';
$conex = mysql_connect($mysql_host, $mysql_user, $mysql_password);
mysql_select_db ($database_name,$conex) ;
$query = "SELECT count( cp ) AS nbr, cp FROM commune WHERE cp = '".$_GET["cp"]."' GROUP BY cp";
$result = mysql_db_query($database_name,$query,$conex);
if(mysql_num_rows($result)>=1)
echo "1";
else
echo "2";
?>
Avec le code javascript :
function verifCp(tel_cp)
{
if(test = file('verif_cp.php?cp='+escape(tel_cp)))
{
if(test == 1)
{
// Le cp est unique
}
else
{
// Le cp n'est pas unique
}
}
function file(fichier)
{
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) return(xhr_object.responseText);
else return(false);
}
Et mon formulaire :
<form name="form1" method="post" onSubmit="javascript:verifCp(this.value)" action="popup.php">
<label>
<div align="left"><span class="Formulaire">CP : </span>
<input name="CP" type="text" id="CP" size="6" maxlength="5" class="boiteFormulaire" value="">
<input type="submit" name="Submit" value="Envoyer" class="bouton" align="top">
</div>
</label>
</form>
Merci pour votre aide à tous.
Modifié en dernier par DesmaT le 06 mars 2007, 12:46, modifié 1 fois.

Eléphanteau du PHP | 49 Messages

06 mars 2007, 12:17

Hello DesmaT,


Heureux que tu aies trouvé ton bonheur (même si, personnellement, je trouve que… mais bon, c'est rien).
La solution est très simple grâce à l'Ajax
Ajax a changé ma vie ! :lol: Ajax, je t'aime. :roll:

Bien à toi,

Phil