JeuWeb - Crée ton jeu par navigateur
Ajax, PHP, MySQL : Comment intéragir avec la base de données - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Ajax, PHP, MySQL : Comment intéragir avec la base de données (/showthread.php?tid=818)



Ajax, PHP, MySQL : Comment intéragir avec la base de données - Sephi-Chan - 15-02-2007

Bonjour,

Je me suis intéressé à Ajax en début d'après midi, et après quelques essais assez concluant sur du contenu fixe (fichier .txt), j'aimerai m'en servir pour effectuer des requête SQL (SELECT, UPDATE, DELETE) asynchrones.

Imaginons par exemple un formulaire :
Code :
<form method="post" onsubmit="javascript: connexion();">
<label>Nom de compte : <input type="text" name="nomDeCompte" tabindex="1" /></label><br />
<label>Mot de passe : <input type="password" name="motDePasse" tabindex="2" /></label><br />
<label><input type="submit" value="Connexion" tabindex="3" />
</form>

Il faudrait que, sans recharger la page, ça m'execute la page trairementConnexion.php :
Code PHP :
<?php
if(empty($_POST['nomDeCompte']) || empty($_POST['motDePasse'])){
$_SESSION['message'] = 'La connexion a échoué. Vous n\'avez pas renseigné l\'intégralité du formulaire.';
die(
header('Location: index.php?p='.ACCUEIL));
}

else{
$requete1 = sprintf("SELECT id, nomDeCompte, motDePasse, confirmationInscription FROM utilisateurs WHERE nomDeCompte = %s AND motDePasse = %s AND confirmationInscription = %s",
securiser($_POST['nomDeCompte']),
securiser($_POST['motDePasse']),
CONFIRMATION_INSCRIPTION
);
mysql_query($requete1) or die(mysql_error());

if(
mysql_affected_rows()){
$retourRequete1 = mysql_fetch_assoc(mysql_query($requete1)) or die(mysql_error());

$_SESSION['idCompte'] = $retourRequete1['id'];
$_SESSION['message'] = 'La connexion s\'est effectuée avec succès.';
die(
header('Location: index.php?p='.ACCUEIL));
}
}
?>

En fait mon principal problème est de mener les variables entrées dans le formulaire jusqu'à la requête.

J'espère que vous pourrez m'aider, parce que là je ne comprend pas et je ne trouve que des ressources sur Ajax/XML, aucune sur Ajax/MySQL. Ou alors ça utilise des librairies et tout, rien qui ne simplifie l'apprentissage en fait.


Sephi-Chan


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - Archange - 15-02-2007

http://www.jeuweb.org/board/showthread.php?tid=680

Ce tuto ne pourais pas t'aider ?


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - Seren - 15-02-2007

Si t'as réussi à faire fonctionner ta fonction "connexion" avec du contenu texte, c'est la même chose avec un script php.

Tu crées un XhtmlHTTPrequest qui va chercher traitementConnexion.php avec en POST ou GET data tes identifiants.

Dans traitementConnexion.php, il faut avoir des "echo" et des "print".

Code PHP :
<?php 
echo 'Connexion réussie';

Lorsqu'il a fini d'exécuter le script, la serveur envoie une réponse à la XHR qui va contenir ce texte. (comme quand tu génères une page web avec du PHP). Ensuite tu affiches ce contenu de la même façon que tu affichais ton texte grâce à la fonction javascript.

Le fait qu'il y ait du SQL impliqué ne change rien pour AJAX.
Il y a une connexion
Javascript <--> PHP et PHP <--> SQL mais le Javascript ne "voit pas" le SQL. Derrière le PHP il pourrait y avoir n'importe quoi.


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - Sephi-Chan - 15-02-2007

Mais le problème est quand je valide le formulaire, ça exécute la page d'action du formulaire (et quand il n'y en à pas, ça fait comme si c'était elle même en action). Ca fonctionne si j'utilise un bouton avec un onclick, mais ce n'est pas une solution durable.

Lorsque que j'utilise la connexion asynchrone (en mettant le troisième argument à true) ça ne me renvoi rien, alors que si c'est false, ça marche... Incompréhensible Sad ...


Sephi-Chan


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - Seren - 15-02-2007

Oui le problème c'est que tu soumet le formulaire aussi alors que tu veux juste créer une XHR.

remplace le <input type="submit">

par un <input type="button" onclick="connexion()" >

C'est un bouton qui soumettra rien du tout je pense...

Par contre il y a un problème quelque part parce que tu dois passer les valeur de paramètres à connexion() sinon tu seras jamais identifié.

Code :
Code :
<form method="post" >
<label>Nom de compte : <input type="text" id="nomDeCompte" tabindex="1" /></label><br />
<label>Mot de passe : <input type="password" id="motDePasse" tabindex="2" /></label><br />
<label><input type="button" onclick="connexion(document.GetElementbyId(nomDecompte).value, document.GetElementbyId(motDePasse).value)" tabindex="3" />
</form>

Ma syntaxe est approximative et je suis un débutant en Ajax, faut pas faire du copier/coller.


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - Sephi-Chan - 15-02-2007

Me revoila !

Oui, je vais passer les arguments de cette manière :
Code :
<form>
<label>Auteur : <input type="text" name="auteur" /></label><br />
<input type="button" onclick="javascript: rechercher(this.form.auteur.value);" value="Ok"/>
</form>

Par contre je tiens vraiment à savoir comment passer par un évènement onsubmit sur la balise <form>. Si quelqu'un à une piste, qu'il n'hésite pas à m'en faire part Smile.


Sephi-Chan


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - denisc - 15-02-2007

Code PHP :
<?php 
<head>
<
script>
function
Valider()
{
//Faire tout ton petit bazar qui va bien pour la connexion ...
// récupération des données du formulaire, connexion Ajax avec les paramètres,...

return false; // Cette ligne invalidera le send du bouton submit.
}
</
script>
</
head>

<
form action="" onSubmit="return Valider();">
<
input type=submit name=Envoyer>
</
form>

En fait, ça revient à la même chose que de mettre un type=bouton ! avec un return en plus Tongue


RE: Ajax, PHP, MySQL : Comment intéragir avec la base de données - Seren - 15-02-2007

Ok maintenant je comprends pourquoi dans tous les tutoriaux AJAX il y a tout le temps des return False. Merci.