1 réponse
Salut,
Rien de plus simple ! Enfin ça dépend, je pars du principe que tu as déjà pratiqué en Ajax...
On commence par le javascript. Disons qu'il récupère dans un formulaire la valeur du login à ajouter, que j'appellerai newLogin ;
Mettons que tu as déjà instancié ton objet asynchrone et qu'il s'appelle requeteur,
et que ton script côté serveur s'appelle ajoute_login.php.
J'envoie les données en POST.
Code javascript :
Le login est ensuite récupéré par le code php :
Je suis resté vague sur les instructions de nettoyage et de database, car je pense que tu sais déjà quoi faire.
... Bon après on peut étoffer en ajoutant une fonction de rappel sur l'objet requeteur, et demander au script serveur d'envoyer un message de confirmation/d'échec.
On va dire que tu as un p caché (display: none) qui porte l'id loginInfo.
Côté javascript, ça donnerait par exemple :
Au serveur d'envoyer le texte de réponse qui dit si ça a marché ou s'il s'est mangé un râteau avec la DB. Pour cela il faut préciser que la réponse est de type text/plain, sinon Javascript ne pourra pas la lire (par défaut elle est de type text/html) :
Ce qui se passe : si l'envoie de la requête sql échoue, la fonction renvoie false et c'est l'instruction die() qui est appellée à la place. Le message d'erreur est affiché et le script est stoppé.
Si ça marche, le die() est ignoré et l'instruction echo est appellée.
Voilà, n'hésite pas à poser des questions si c'est pas clair ;)
Rien de plus simple ! Enfin ça dépend, je pars du principe que tu as déjà pratiqué en Ajax...
On commence par le javascript. Disons qu'il récupère dans un formulaire la valeur du login à ajouter, que j'appellerai newLogin ;
Mettons que tu as déjà instancié ton objet asynchrone et qu'il s'appelle requeteur,
et que ton script côté serveur s'appelle ajoute_login.php.
J'envoie les données en POST.
Code javascript :
requeteur.open('POST', 'ajoute_login.php');
requeteur.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
requeteur.send('newLogin=' + newLogin);
Le login est ensuite récupéré par le code php :
<?php ### ajoute_login.php ### $newLogin = $_POST['newLogin']; /* instructions de nettoyage/contrôle de données (genre strip_tags) */ /* instructions de connection à la database */ $requeteSQL = "INSERT INTO user (login) VALUES ($newLogin)"; /* envoi de la requête */ ?>
Je suis resté vague sur les instructions de nettoyage et de database, car je pense que tu sais déjà quoi faire.
... Bon après on peut étoffer en ajoutant une fonction de rappel sur l'objet requeteur, et demander au script serveur d'envoyer un message de confirmation/d'échec.
On va dire que tu as un p caché (display: none) qui porte l'id loginInfo.
Côté javascript, ça donnerait par exemple :
function reponseNewLogin() {
var loginInfo = document.getElementById('loginInfo');
if (4 == requeteur.readyState) {
loginInfo.style.display = 'block';
if (200 == requeteur.status) {
loginInfo.innerHTML = requeteur.responseText;
} else {
loginInfo.innerHTML = 'échec de connection au serveur';
}
}
}
requeteur.onreadystatechange = reponseNewLogin;
Au serveur d'envoyer le texte de réponse qui dit si ça a marché ou s'il s'est mangé un râteau avec la DB. Pour cela il faut préciser que la réponse est de type text/plain, sinon Javascript ne pourra pas la lire (par défaut elle est de type text/html) :
<?php
### ajoute_login.php ###
header("Content-Type: text/plain; charset=utf-8");
// ...
/* instruction d'envoi de la requête */ or die('Erreur de connection à la database');
echo "Enregistrement terminé !";
?>
Ce qui se passe : si l'envoie de la requête sql échoue, la fonction renvoie false et c'est l'instruction die() qui est appellée à la place. Le message d'erreur est affiché et le script est stoppé.
Si ça marche, le die() est ignoré et l'instruction echo est appellée.
Voilà, n'hésite pas à poser des questions si c'est pas clair ;)
J'ai aussi un problème avec Ajax, je t'explique :
je veux insérer une ligne dynamiquement en cliquant sur un bouton (en javascript) ; Cette ligne comprend du html (jusque là aucun problème) et un menu déroulant avec une requête PHP pour les choix du menu.
Voici mon code de la ligne que je veux insérer dynamiquement :
• Remise de
<form action="" method="post">
<select name="remise" style="color:#000099; font-family:Tahoma, Arial; font-size: 11px; font-weight: bold;">
<option value="choisir" >< Choisir ></option>
<option value="5" >5</option>
<option value="10" >10</option>
<option value="15" >15</option>
<option value="20" >20</option>
<option value="25" >25</option>
<option value="30" >30</option>
<option value="35" >35</option>
<option value="40" >40</option>
<option value="45" >45</option>
<option value="50" >50</option>
<option value="55" >55</option>
<option value="60" >60</option>
<option value="65" >65</option>
<option value="70" >70</option>
<option value="75" >75</option>
<option value="80" >80</option>
<option value="85" >85</option>
<option value="90" >90</option>
<option value="95" >95</option>
<option value="100" >100</option>
</select>
% sur la famille :
<?php
echo '<select name="famille" style="color:#000099; width:300px; font-family:Tahoma, Arial; font-size: 11px; font-weight: bold;">'."\n";
echo '<option value="'.'">'.'< Choisir >'.'</option>'."\n";
// Récupération des informations triées par ordre alphabétique
include '../connect.inc.php';
$reponse = mysql_query("SELECT designation FROM familles ORDER BY designation");
while ($resultat = mysql_fetch_array($reponse)) {
echo '<option value="'.$resultat[0].'">'.$resultat[0];
echo '</option>'."\n";
}
echo '</select>'."\n";
?>
</form>
J'ai un code javascript qui marche mais qui ne prend pas le PHP :
<span id="remise"></span>
<br />
<input type="button" value="Ajouter une remise" onclick="ajouter();"/>
<script language="JavaScript" type="text/javascript">
var n = 0;
function supprimer() {
document.getElementById("remise").removeChild(document.getElementById(n));
n--;
}
function ajouter() {
n++;
var nouveaudiv = document.createElement("div");
var contenu = document.getElementById("remise").appendChild(nouveaudiv);
contenu.innerHTML = "• Remise de <select name='remise' style='color:#000099; font-family:Tahoma, Arial; font-size: 11px; font-weight: bold;'><option value='choisir' >< Choisir ></option><option value='5' >5</option><option value='10' >10</option><option value='15' >15</option><option value='20' >20</option><option value='25' >25</option><option value='30' >30</option><option value='35' >35</option><option value='40' >40</option><option value='45' >45</option><option value='50' >50</option><option value='55' >55</option><option value='60' >60</option><option value='65' >65</option><option value='70' >70</option><option value='75' >75</option><option value='80' >80</option><option value='85' >85</option><option value='90' >90</option><option value='95' >95</option><option value='100' >100</option></select> % sur la famille : <input type='button' value='supprimer' onclick='supprimer();' /><br />";
contenu.type="text";
contenu.id=n;
contenu.name=n;
contenu.value=n
}
</script>
Si vous pouvez m'aider ce serait génial !
Julien