web-dev-qa-db-fra.com

Fonction Javascript post et call script php

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.

10
DaViDa

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
20
Savas Vedova

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)

1
Jesús Carrera

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.

1
Ivo Pereira

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'];
0
HarryFink

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.

0
sAnS