[RESOLU] alternative à un ELSE seul?

Eléphant du PHP | 345 Messages

28 avr. 2021, 16:53

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');
}
?>

Avatar du membre
Eléphant du PHP | 70 Messages

28 avr. 2021, 17:01

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');
}
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Eléphant du PHP | 345 Messages

28 avr. 2021, 18:22

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');
}
?>



Avatar du membre
Eléphant du PHP | 70 Messages

29 avr. 2021, 08:36

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');
}
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Eléphant du PHP | 345 Messages

29 avr. 2021, 09:16

Ah oui ! C'est OK. Sinon, il y avait aussi la possibilité de remplacer par un switch.