En html, j'ai plusieurs boutons qui sont automatiquement créés pour chaque objet de la base de données avec un statut particulier. Chaque bouton a son propre identifiant.
echo '<Button id="button'.$counter.'" onClick="clickedbutton('.$counter.', '.$row['OrderID'].')" >'."<center>".$row['OrderID']."<br>"."</center>".'</Button>';
Le bouton appelle la fonction javascript clickedbutton et lui donne le numéro du bouton et le numéro de commande de ce bouton.
function clickedbutton(buttonid,orderid){
buttonid = "button" + buttonid;
}
Cette fonction charge le numéro du bouton et en fait button0, button1 etc. Le orderid est également passé avec succès. Maintenant, dans la fonction, je veux appeler un script php externe, mais aussi orderid doit être transmis au script.
<?php
//connect to database
include_once('mysql_connect.php');
// Select database
mysql_select_db("test") or die(mysql_error());
// SQL query
$strSQL = "update orders set OrderStatus = 'In Progress' where OrderID = '" + orderid + "'";
mysql_close();
?>
Je connais la protection mysqli et tout, je l'ajusterai plus tard. Maintenant, je veux me concentrer sur la question ci-dessus, comment appeler et passer la variable orderid au phpscript.
EDIT 2018
Ouais, je suis toujours en vie. Vous pouvez utiliser l'API fetch
au lieu de jQuery
. Il est largement pris en charge, sauf (devinez qui? ...) IE 11 et ci-dessous, mais il existe un polyfill pour cela. Profitez d'un codage moderne.
Prise en charge de l'API fetch
ANCIENNE RÉPONSE
Vous devrez utiliser AJAX.
Javascript seul ne peut pas atteindre un script php. Vous devrez faire une demande, passer la variable à PHP, l'évaluer et retourner un résultat. Si vous utilisez jQuery, envoyer une requête ajax est assez simple:
$.ajax({
data: 'orderid=' + your_order_id,
url: 'url_where_php_is_located.php',
method: 'POST', // or GET
success: function(msg) {
alert(msg);
}
});
et votre script php devrait obtenir l'ID de commande comme:
echo $_POST['orderid'];
La sortie retournera sous forme de chaîne à la fonction de réussite.
[~ # ~] modifier [~ # ~]
Vous pouvez également utiliser les fonctions raccourcies:
$.get('target_url', { key: 'value1', key2: 'value2' }).done(function(data) {
alert(data);
});
// or eventually $.post instead of $.get
En supposant que vous ne voulez pas utiliser AJAX, vous pouvez faire quelque chose comme ça dans votre fonction clickedbutton
:
window.location.replace('path/to/page.php?orderid=' + orderid);
puis dans votre page.php
"...where OrderID = '" . $_GET('orderid') . "'";
(notez les points pour joindre les chaînes)
En utilisant Ajax.
function clickedbutton(buttonid,orderid){
$.post("page.php", { buttonid: buttonid })
.done(function(data) {
alert("Data Loaded: " + data);
});
}
En php, vous l'obtenez avec $ _POST.
//[..] previous php code
$strSQL = "update orders set OrderStatus = 'In Progress' where OrderID = '" + $_POST['buttonid'] + "'";
//[..] rest of php code
Attention à l'injection SQL. Ne prenez pas ce conseil comme écrit.
Le moyen le plus simple est de construire une chaîne de requête et de la joindre à la fin de l'URL du script php.
function clickedbutton(buttonid,orderid){
var url = 'script.php?';
var query = 'buttonid=' + buttonid + '&orderid=' + orderid;
window.location.href = url + query
}
Dans le script php, vous pouvez accéder aux paramètres comme ceci:
<?php
echo $_GET['buttonid'];
echo $_GET['orderid'];
tu peux essayer comme ça
var url = myurl +'?id=' + orderid;
window.location.href = url;
et dans la page php
$strSQL = "update orders set OrderStatus = 'In Progress' where OrderID = '".mysql_real_escape_string($_GET['id'])."'";
Modifier
Si vous souhaitez charger le fichier php sans actualiser la page, vous pouvez essayer comme suggéré par vos amis.