Page 1 sur 1

alternative à un ELSE seul?

Posté : 28 avr. 2021, 16:53
par nestor94
Bonjour,
Le bout de script suivant fonctionne que si les conditions sont respectées. Mais si elles ne sont pas OK, , la dernière redirection ne se fait pas..
(Parse error: syntax error, unexpected 'else' (T_ELSE), expecting end of file in C...)
Y -aurait-il un moyen de contourner cela ou de penser le script autrement?
<?php
session_start();
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sql = "SELECT contenu_contenant FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch(); 
$contenu_contenant = $resultat['contenu_contenant'];
if ($contenu_contenant !== '/objets/rien.gif')
{
header('Location:erreur_contenu.html');
}
$sql = "SELECT HAB FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
$HAB = $resultat['HAB'];
$pdostat = $bdd->prepare("UPDATE membres SET  bla bla bla  WHERE id =:id");
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$pdostat =  $bdd->prepare("UPDATE map INNER JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y SET bla bla bla WHERE membres.id= $id");
$pdostat->execute();
header ('Location:page_membre.php');
else {
header('Location:blablacar.php');
}
?>

Re: alternative à un ELSE seul?

Posté : 28 avr. 2021, 17:01
par Shadowwera
Salut !

Il y a un soucis avec ton else car il doit suivre directement un if ou else if, comme ceci :
if($contenu_contenant !== '/objets/rien.gif') {
  //Do-something
} else {
  //Do-something
}
Modifie donc ton code en quelque chose dans ce genre la :
if ($contenu_contenant !== '/objets/rien.gif') {
header('Location:erreur_contenu.html');
} elseif() { //Quel condition pour que ceci s'éxecute ?
$sql = "SELECT HAB FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
$HAB = $resultat['HAB'];
$pdostat = $bdd->prepare("UPDATE membres SET  bla bla bla  WHERE id =:id");
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$pdostat =  $bdd->prepare("UPDATE map INNER JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y SET bla bla bla WHERE membres.id= $id");
$pdostat->execute();
header ('Location:page_membre.php');
} else {
header('Location:blablacar.php');
}

Re: alternative à un ELSE seul?

Posté : 28 avr. 2021, 18:22
par nestor94
Il n'apprécie pas la parenthèse ouvrante et fermante du elseif?
Parse error: syntax error, unexpected ')' in C:\wamp64\w..
Si je la vire, il rale sur l'accolade au meme endroit :?
$sql = "SELECT contenu_contenant FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch(); 
$contenu_contenant = $resultat['contenu_contenant'];
if ($contenu_contenant !== '/objets/rien.gif')
	{
header('Location:erreur_contenu.html');
} 
elseif() { 
$sql = "SELECT HAB FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
$HAB = $resultat['HAB'];
$pdostat = $bdd->prepare("UPDATE membres SET  contenu_contenant = '/objets/herbe.gif', qte_contenant= qte_contenant+5+$HAB,
info= 'VOUS AVEZ RÉCOLTÉ HERBE', usure_objet1= usure_objet1+1, PA= PA-1, HAB= HAB+1, EXP= EXP+1 WHERE id =:id");
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$pdostat =  $bdd->prepare("UPDATE map INNER JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y
SET map.qte_ressource = map.qte_ressource-5 WHERE membres.id= $id");
$pdostat->execute();
header ('Location:page_membre.php');
} else {
header('Location:recolter_herbe2.php');
}
?>



Re: alternative à un ELSE seul?

Posté : 29 avr. 2021, 08:36
par Shadowwera
Salut !

C'est normal tu doit mettre une condition dans le else if() comme je le l'es indiqué en commentaire "//Quel condition pour que ceci s'éxecute ?"

Car dans ton code initial, tu avais quelque chose qui s'exécute dans ton if, puis quelque chose qui s'exécute sans condition, puis ton else

Donc pense a mettre une condition de cette manière :
if ($contenu_contenant !== '/objets/rien.gif') { // Si ta condition est respecté alors ça te redirige vers erreur_contenu.html
header('Location:erreur_contenu.html');
} elseif($autreCondition) {  // Sinon si cette condition est respecté alors le code ce-dessous s'éxécute et te redirige vers page_membre.php
$sql = "SELECT HAB FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
$HAB = $resultat['HAB'];
$pdostat = $bdd->prepare("UPDATE membres SET  bla bla bla  WHERE id =:id");
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$pdostat =  $bdd->prepare("UPDATE map INNER JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y SET bla bla bla WHERE membres.id= $id");
$pdostat->execute();
header ('Location:page_membre.php');
} else { // Sinon c'est ceci qui s'éxécute
header('Location:blablacar.php');
}

Re: alternative à un ELSE seul?

Posté : 29 avr. 2021, 09:16
par nestor94
Ah oui ! C'est OK. Sinon, il y avait aussi la possibilité de remplacer par un switch.