J'ai 3 boutons à soumettre. disons le bouton A, B, C. Chaque pression sur un bouton apportera des données de la base de données en fonction de la pression sur le bouton. Mais le modèle de données est le même.
Ma question est-il possible de modifier dynamiquement la requête. en particulier le champ WHERE dans la requête.
//my forms are as follows
<div class="button_style1">
<form action="displayData.php" method="get" target="_blank">
<input type="submit" id ="mybutton1" value="A" />
</form>
</div>
<div class="button_style2">
<form action="displayData.php" method="get" target="_blank">
<input type="submit" id ="mybutton2" value="B" />
</form>
</div>
<div class="button_style3">
<form action="displayData.php" method="get" target="_blank">
<input type="submit" id ="mybutton3" value="C" />
</form>
</div>
//I am trying to avoid creating different pages for each button press. Just one page (displayData.php) but with different data based on button press.
Ce que je veux, c'est WHERE que la partie doit changer en fonction de la pression du bouton.
$sql = "SELECT Name FROM DevicesList WHERE Device='A' ";
3 Réponses :
Vous pouvez utiliser des champs masqués pour transmettre certaines données.
Par exemple:
$MyDevice = $_GET['MyHiddenData'];
Et puis, dans displayData.php p>
<div class="button_style1">
<form action="displayData.php" method="get" target="_blank">
<input type="hidden" name="MyHiddenData" value="A">
<input type="submit" id ="mybutton1" value="A" />
</form>
</div>
<div class="button_style2">
<form action="displayData.php" method="get" target="_blank">
<input type="hidden" name="MyHiddenData" value="B">
<input type="submit" id ="mybutton2" value="B" />
</form>
</div>
<div class="button_style3">
<form action="displayData.php" method="get" target="_blank">
<input type="hidden" name="MyHiddenData" value="C">
<input type="submit" id ="mybutton3" value="C" />
</form>
</div>
comment changer le champ WHERE dans la requête? quelque chose comme WHERE Device = ". $ MyDevice"
Quelque chose comme ça, oui. Vous souhaitez utiliser des instructions préparées avec mysqli ou < a href = "https://www.php.net/manual/en/pdo.prepared-statements.php" rel = "nofollow noreferrer"> PDO ou tout ce que vous utilisez pour interroger votre base de données pour éviter < a href = "https://en.wikipedia.org/wiki/SQL_injection" rel = "nofollow noreferrer"> Injections SQL
Ne soyez pas paresseux avec les déclarations préparées
Oui, vous pouvez certainement le faire.
Donnez le même nom à chaque élément:
Et dans le formulaire publié, obtenez quel bouton est soumis:
if (isset($_POST['submit')) {
if ($_POST['submit']) {
$var = mysqli_real_escape_string($_POST['submit']);
$sql = "SELECT Name FROM DevicesList WHERE Device='" . $var . "'";
}
}
À la fois, un seul envoi bouton sera soumis.
Par conséquent, vous obtiendrez à chaque fois le nom du bouton d'envoi et c'est ce que vous comparez en SQL.
Ceci est vulnérable aux injections SQL.
mysqli_real_escape_string n'est pas sûr contre les injections SQL
Vous pouvez le faire comme ci-dessous.
if (isset($_GET['submit']) && in_array($_GET['submit'], array('A', 'B', 'C'))) {
$variable = mysqli_real_escape_string($con, $_GET['submit']); //$con - database connection object
$sql = "SELECT Name FROM DevicesList WHERE Device='" + $variable + "' ";
}
sur displayData.php
<div class="button_style1">
<form action="displayData.php" method="get" target="_blank">
<input type="submit" name="submit" id ="mybutton1" value="A" />
</form>
</div>
<div class="button_style2">
<form action="displayData.php" method="get" target="_blank">
<input type="submit" name="submit" id ="mybutton2" value="B" />
</form>
</div>
<div class="button_style3">
<form action="displayData.php" method="get" target="_blank">
<input type="submit" name="submit" id ="mybutton3" value="C" />
</form>
</div>
pourquoi ne pas simplement utiliser la valeur du bouton (si vous avez donné le même nom à tous les boutons) - n'est-il pas affiché avec le formulaire s'il est pressé en php?