8768 sujets

Développement web côté serveur, CMS

Bonjour,
Je poste ce message car je bloque sur un point en ajax pour une appli web.
En effet, j'ai commencé des choses qui me donnent des résultats satisfaisant lorsque mon code php se retrouve dans un fichier à part, cependant j'aimerai inclure celui-ci dans une fonction php. Comment puis-je récupérer alors cette fonction précise dans mon code js car la méthode précédente ne fonctionne donc plus ?

Dans mon test actuel je mets alors mon code php dans une fonction et essaye de l'appeler en ajax dans la propriété data. Il semblerait que ce ne soit pas de cette façon qu'il faut s'y prendre je vous demande alors votre aide

Merci d'avance

Controller

public function presenceTest(){

		$myfile = fopen("log.txt", "a") or die("Unable to open file!");
		fwrite($myfile,"\n". date("Y_m_d H:i:s") . " > ini");

		if (isset($_POST['action'])){
			
			echo "action "; 
			switch ($_POST['action']) { //pour permettre d'avoir plusieurs fonction qui font appel à ce back
				case "togglepresence" :
					if($_POST['value'] === '1') {
						// tu créé ta requête pour passer la présence en true
						$pres=1;
						echo "11111111111111111111111111111111111";
					}else{
						// tu créé ta requête pour passer la présence en false
						$pres=0;
						echo "000000000000000000000000000";
					}
					// tu exécutes ta requête
					$this->seat_model->update( array( 'seat_id' => $_POST['id'] ), array(
						'presence' => $pres,
					));
				break;
			}
			
		} 
		fwrite($myfile, "\n Last error : ". error_get_last()['type']. error_get_last()['message']. error_get_last()['file']. " : " . error_get_last()['line']);
		fclose($myfile);

	}


Js

function TogglePresence2($id){
		if (document.getElementById($id).checked === true){
			$value = "1";
		}else{
			$value = "0";
		}
		$("#debug").html($id + " = " + $value) ;
		
		$.ajax({
			type: "POST",
			url: "/Seat.php",
			data: {func: 'presenceTest',action:"togglepresence",id:$id,value:$value}
		})
		.done(function(data){
			
			$("#debug").html(data);
			
		});
	


View

<input id='<?php echo $seat->seat_id; ?>' onchange='TogglePresence2(this.id);' class="filled-in" type="checkbox" name="presence" <?php if($seat->presence==true) echo 'checked="checked"'; ?> /> <label title="presence" for="<?php echo $seat->seat_id; ?>"></label> 

Modifié par Jisiiss (30 Nov 2020 - 19:58)
Hello,

Je te déconseille cette méthode, le plus "correct" c'est vraiment d'utiliser un fichier PHP par type d'appel ajax, tu ne vas plus t'y retrouver si tu commences à multiplier les fonctions.
Et tu risque d'augmenter le poids des fonctions inutilement en faisant des tests d'arguments.
Sinon oui c'est toujours possible, tu n'étais pas loin: https://stackoverflow.com/questions/6371857/how-to-call-a-specific-function-in-a-php-script-via-ajax
Pour moi c'est du bidouillage, à éviter
Hello,
Ce tutoriel sur Ajax/Jquery et PHP inclut en bas de page un exemple de contrôleur XHR très basique. Il devrait répondre à l'ensemble de tes interrogations.

@stryk : Je me permet de rebondir à ton affirmation utiliser un fichier PHP par type d'appel ajax = c'est une assertion complétement fausse, qui pousse aux mauvaises pratiques. En réalité ça dépend de ton architecture. Si derrière tu utilise des techniques avancées comme la Reflection, ton contrôleur XHR va faire 30 lignes tu remettra plus les mains dedans tu bosseras juste dans tes modules.
Modifié par gray_magic (30 Nov 2020 - 19:39)