8217 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 (04 Sep 2020 - 14:52)
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