J'ai créé une page appelée functioncalling.php qui contient deux boutons, Submit et Insert. En tant que débutant en PHP, je souhaite tester quelle fonction est exécutée lorsqu'un clic est effectué sur un bouton. Je veux que la sortie vienne sur la même page. J'ai donc créé deux fonctions, une pour chaque bouton. Le code source de functioncalling.php est le suivant:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
<form action="functioncalling.php">
<input type="text" name="txt" />
<input type="submit" name="insert" value="insert" onclick="insert()" />
<input type="submit" name="select" value="select" onclick="select()" />
</form>
<?php
function select(){
echo "The select function is called.";
}
function insert(){
echo "The insert function is called.";
}
?>
Le problème ici est que je ne reçois aucune sortie après avoir cliqué sur l'un des boutons.
Où est-ce que je me trompe?
Les clics de bouton sont côté client alors que PHP est exécuté côté serveur , mais vous pouvez y parvenir en utilisant - Ajax :
$('.button').click(function() {
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John" }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
});
Dans votre fichier PHP:
<?php
function abc($name){
// Your code here
}
?>
Oui, vous avez besoin d'Ajax ici. Veuillez vous reporter au code ci-dessous pour plus de détails.
changez votre balisage comme ceci
<input type="submit" class="button" name="insert" value="insert" />
<input type="submit" class="button" name="select" value="select" />
jQuery:
$(document).ready(function(){
$('.button').click(function(){
var clickBtnValue = $(this).val();
var ajaxurl = 'ajax.php',
data = {'action': clickBtnValue};
$.post(ajaxurl, data, function (response) {
// Response div goes here.
alert("action performed successfully");
});
});
});
Dans ajax.php
<?php
if (isset($_POST['action'])) {
switch ($_POST['action']) {
case 'insert':
insert();
break;
case 'select':
select();
break;
}
}
function select() {
echo "The select function is called.";
exit;
}
function insert() {
echo "The insert function is called.";
exit;
}
?>
Vous devez faire en sorte que le bouton appelle la même page et, dans une section PHP, vérifiez si le bouton a été enfoncé:
HTML:
<form action="theSamePage.php" method="post">
<input type="submit" name="someAction" value="GO" />
</form>
PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['someAction']))
{
func();
}
function func()
{
// do stuff
}
?>
Vous ne pouvez pas appeler PHP comme par exemple en cliquant sur un bouton HTML. Parce que HTML est du côté client alors que PHP exécute le côté serveur.
Soit vous devez utiliser un peu d'Ajax ou le faire comme dans l'extrait de code ci-dessous.
<?php
if($_GET){
if(isset($_GET['insert'])){
insert();
}elseif(isset($_GET['select'])){
select();
}
}
function select()
{
echo "The select function is called.";
}
function insert()
{
echo "The insert function is called.";
}
?>.
Vous devez publier vos données de formulaire, puis rechercher le bouton approprié sur lequel vous cliquez.
Pour afficher le message $ dans votre entrée:
<?php
if(isset($_POST['insert'])){
$message= "The insert function is called.";
}
if(isset($_POST['select'])){
$message="The select function is called.";
}
?>
<form method="post">
<input type="text" name="txt" value="<?php if(isset($message)){ echo $message;}?>" >
<input type="submit" name="insert" value="insert">
<input type="submit" name="select" value="select" >
</form>
Pour utiliser functioncalling.php en tant que fichier externe, vous devez l'inclure d'une manière ou d'une autre dans votre document HTML.
Essaye ça:
if($_POST['select'] and $_SERVER['REQUEST_METHOD'] == "POST"){
select();
}
if($_POST['insert'] and $_SERVER['REQUEST_METHOD'] == "POST"){
insert();
}
Vous pouvez écrire comme ceci en JavaScript ou jQuery Ajax et appeler le fichier
$('#btn').click(function(){
$.ajax({
url:'test.php?call=true',
type:'GET',
success:function(data){
body.append(data);
}
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<form method='get' >
<input type="button" id="btn" value="click">
</form>
<?php
if(isset($_GET['call'])){
function anyfunction(){
echo "added";
// Your funtion code
}
}
?>
L'attribut onclick
du code HTML appelle des fonctions JavaScript, et non des fonctions PHP.
Utilisez un appel récursif où l'action de formulaire s'appelle elle-même. Ajoutez ensuite le code PHP dans le même formulaire pour le récupérer. Dans foo.php
votre formulaire appellera foo.php
sur post
<html>
<body>
<form action="foo.php" method="post">
Une fois que le formulaire a été soumis, il s'appelle lui-même (foo.php
) et vous pouvez l'attraper via la variable prédéfinie PHP $_SERVER
, comme indiqué dans le code ci-dessous.
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "caught post";
}
?>
</form>
</body>
</html>
J'étais coincé là-dedans et je l'ai résolu avec un champ caché:
<form method="post" action="test.php">
<input type="hidden" name="ID" value"">
</form>
Dans value
, vous pouvez ajouter ce que vous voulez ajouter.
Dans test.php, vous pouvez récupérer la valeur via $_Post[ID]
.
Voici un exemple que vous pourriez utiliser:
<html>
<body>
<form action="btnclick.php" method="get">
<input type="submit" name="on" value="on">
<input type="submit" name="off" value="off">
</form>
</body>
</html>
<?php
if(isset($_GET['on'])) {
onFunc();
}
if(isset($_GET['off'])) {
offFunc();
}
function onFunc(){
echo "Button on Clicked";
}
function offFunc(){
echo "Button off clicked";
}
?>