Problème switch

Résolu
Bonjour, afin de créer un forum, je fais ce tutoriel : <lien url="http://www.siteduzero.com/tutoriel-3-9953-poster.html">. Cependant pour la switch j'ai une erreur de marqué :
Parse error: parse error in C:\documents\forum\poster.php on line 114

Voici mon code du switch :
<?
switch($action)
{
case "repondre": //Premier cas on souhaite répondre
?>
<h1>Poster une réponse</h1>
 
<form method="post" action="postok.php?action=repondre&amp;t=<?php echo $topic ?>" name="formulaire">
 
<fieldset><legend>Mise en forme</legend>
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
<br /><br />
<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :D ');return(false)" />
<img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(' :lol: ');return(false)" />
<img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(' :triste: ');return(false)" />
<img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(' :frime: ');return(false)" />
<img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies(' XD ');return(false)" />
<img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(' :s ');return(false)" />
<img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(' :o ');return(false)" />
<img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(' :interrogation: ');return(false)" />
<img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(' :exclamation: ');return(false)" />
</fieldset>
 
<fieldset><legend>Message</legend><textarea cols="80" rows="8" id="message" name="message"></textarea></fieldset>
 
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name = "Effacer" value = "Effacer"/>
</p></form>
<?php
break;
 
case "nouveautopic":
?>
 
<h1>Nouveau topic</h1>
<form method="post" action="postok.php?action=nouveautopic&amp;f=<?php echo $forum ?>" name="formulaire">
 
<fieldset><legend>Titre</legend>
<input type="text" size="80" id="titre" name="titre" /></fieldset>
 
<fieldset><legend>Mise en forme</legend>
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
<br /><br />
<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
<img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(':lol:');return(false)" />
<img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
<img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
<img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
<img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
<img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
<img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
<img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" /></fieldset>
 
<fieldset><legend>Message</legend>
<textarea cols="80" rows="8" id="message" name="message"></textarea>
<label><input type="radio" name="mess" value="Annonce" />Annonce</label>
<label><input type="radio" name="mess" value="Message" checked="checked" />Topic</label>
</fieldset>
<p>
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name = "Effacer" value = "Effacer" /></p>
</form>
<?php
break;
 
//D'autres cas viendront s'ajouter ici par la suite

default; //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
echo'<p>Cette action est impossible</p>';
} //Fin du switch
mysql_close();
?>


Avec en ligne 114 :

<?php
} //ligne 114
 
//Enfin sinon c'est au sujet de la modération(on verra plus tard en détail)
//On ne connait que le post, il faut chercher le reste
elseif (isset ($_GET['p']))


Merci d'avoir lu mon message. Et je vous serais reconnaissant de m'aider :).

--
 .  .    !!!! Bonne journée !!!!
\__/   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Configuration: Windows XP
Edition familiale
Version 2002

27 réponses

Résumé de la discussion

Une erreur de syntaxe PHP, de type parse error, est signalée dans un fichier PHP lors d'une tentative d'implémenter une fonction de réponse à l'aide d'un switch. Plusieurs correctifs évoqués suggèrent de partager le code complet sur Pastebin ou d'inspecter les balises PHP et les accolades pour identifier les erreurs de fermeture. En cas de réponse, certains indiquent qu'un retour à la ligne au milieu d'une balise PHP peut déclencher ce type d'erreur, et recommandent de retaper les lignes problématiques sans copier-coller. D'autres échanges indiquent que la résolution peut passer par la suppression des retours à la ligne dans les structures PHP et par la vérification des expressions et des accolades, sans conclure sur l'état général.

Bobot (l’IA à votre service)
  1. Contributeur
    salut,

    chez moi ça compile sans soucis mais il faut deux points au bout du default au lieu d'un point virgule :
    default: //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
    
    1. Merci de m'avoir répondu, j'ai modifié le ; en : mais cela en change rien, il y a exactement la même erreur...
      1. Contributeur
        bizarre…

        peux-tu nous donner le message d'erreur complet stp ?
        1. Je l'ai donné complet, j'ai une page toute blanche avec "Parse error: parse error in C:mondossier\forum\poster.php on line 114"
          1. Contributeur
            y a pas un petit "unexpected… blablabla" après ?

            il doit nous en cacher, colle ça en haut de ton script :
            <?php
             error_reporting(E_ALL);
             ini_set("display_errors", 1);
            ?>

            --
            [ Mathieu ]
            Il y a sûrement des pandas pour ne dépendre de rien
        2. J'ai cherché et je n'ai pas trouver de unexpeted etc, et j'ai essayer de coller le code mais cela a rien changer..
          1. Merci beaucoup pour toute ton aide. Voici le code entier :

            <?php
            //Cette fonction doit être appelée avant tout code html
            session_start();
            $balises = true;
            //On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
            $titre = "Poster";
            ?>
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
            <head>
            <?php
            if (!empty($titre)) //Si le titre est indiqué, on l'affiche entre les balises <title>
            {
                echo '<title> '.$titre.' </title>';
            }
            else //Sinon, on écrit forum par défaut
            {
                echo '<title> Forum </title>';
            }
            ?>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <link rel="stylesheet" media="screen" type="text/css" title="Design" href="./css/design.css" />
            
            
            
            
            
            <script>
            function bbcode(bbdebut, bbfin)
            {
            var input = window.document.formulaire.message;
            input.focus();
            if(typeof document.selection != 'undefined')
            {
            var range = document.selection.createRange();
            var insText = range.text;
            range.text = bbdebut + insText + bbfin;
            range = document.selection.createRange();
            if (insText.length == 0)
            {
            range.move('character', -bbfin.length);
            }
            else
            {
            range.moveStart('character', bbdebut.length + insText.length + bbfin.length);
            }
            range.select();
            }
            else if(typeof input.selectionStart != 'undefined')
            {
            var start = input.selectionStart;
            var end = input.selectionEnd;
            var insText = input.value.substring(start, end);
            input.value = input.value.substr(0, start) + bbdebut + insText + bbfin + input.value.substr(end);
            var pos;
            if (insText.length == 0)
            {
            pos = start + bbdebut.length;
            }
            else
            {
            pos = start + bbdebut.length + insText.length + bbfin.length;
            }
            input.selectionStart = pos;
            input.selectionEnd = pos;
            }
             
            else
            {
            var pos;
            var re = new RegExp('^[0-9]{0,3}$');
            while(!re.test(pos))
            {
            pos = prompt("insertion (0.." + input.value.length + "):", "0");
            }
            if(pos > input.value.length)
            {
            pos = input.value.length;
            }
            var insText = prompt("Veuillez taper le texte");
            input.value = input.value.substr(0, pos) + bbdebut + insText + bbfin + input.value.substr(pos);
            }
            }
            function smilies(img)
            {
            window.document.formulaire.message.value += '' + img + '';
            }
            </script>
            
            
            </head>
            <?php
            if (isset ($_COOKIE['pseudo']) && !isset ($_SESSION['pseudo']))
            {
            $_SESSION['pseudo'] = $_COOKIE['pseudo']; 
            
            /* On créé la variable de session à partir du cookie pour ne pas avoir à vérifier 2 fois sur les pages qu'un membre est 
            
            connecté. */
            
            }
            if (isset ($_COOKIE['pseudo']) && isset ($_SESSION['pseudo']))
            {
            //On est connecté
            }
            if (!isset ($_COOKIE['pseudo']) && !isset ($_SESSION['pseudo']))
            {
            //On n'est pas connecté
            }
            ?>
            
            <body>
            <div id="banniere"></div>
            <div id="corps_forum">
            
            
            
            <a href="./voirtopic.php?t=<?php echo $topic ; ?>"><?php echo stripslashes(htmlspecialchars($data1['topic_titre'])); ?
            
            ></a></p>
            <?php
            }
             
            //Enfin sinon c'est au sujet de la modération(on verra plus tard en détail)
            //On ne connait que le post, il faut chercher le reste
            elseif (isset ($_GET['p']))
            {
            $post = (int) $_GET['p'];
            $requete1 = mysql_query('
            SELECT post_createur, forum_post.topic_id, topic_titre, forum_topic.forum_id,
            forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
            FROM forum_post
            LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
            LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
            WHERE forum_post.post_id ="'.$post.'"')or die(mysql_error());
            $data1 = mysql_fetch_array($requete1);
            $topic = $data1['topic_id'];
            $forum = $data1['forum_id'];
            ?>
             
            <p><a href ="./index.php">Index du forum</a> /
            <a href="./voirforum.php?f=<?php echo $forum ; ?>"><?php echo stripslashes(htmlspecialchars($data1['forum_name'])); ?></a> /
            <a href="./voirtopic.php?t=<?php echo $topic ; ?>"><?php echo stripslashes(htmlspecialchars($data1['topic_titre'])); ?
            
            ></a></p>
            <?php
            }
             
             
            //Ici on s'intéresse au visiteur
            if (isset($_SESSION['pseudo'])) // Si le membre est connecté
            {
                   
                    //Voici les options
                    echo'<p>Vous êtes connecté en tant que
                    <a href="./voirprofil.php?m='.intval($_SESSION['id']).'&action=consulter">
                    '.stripslashes(htmlspecialchars($_SESSION['pseudo'])).'</a><br />
                    <a href="./voirprofil.php?action=modifier">Modifier mon profil</a><br />
                    <a href="./messagesprives.php">Consulter mes messages privés</a><br />
                    <a href ="./deconnexion.php">Se déconnecter</a><br /></p>';
             
            }
             
            // Sinon l'accès à cette page est interdit ! ^^
            else
            {
            echo 'Désolé, vous devez être enregistré pour poster</div></body></html>';
            exit();
            }
            ?>
            
            <?
            switch($action)
            {
            case "repondre": //Premier cas on souhaite répondre
            ?>
            <h1>Poster une réponse</h1>
             
            <form method="post" action="postok.php?action=repondre&amp;t=<?php echo $topic ; ?>" name="formulaire">
             
            <fieldset><legend>Mise en forme</legend>
            <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '/g');return(false)" />
            <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '/i');return(false)" />
            <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '/s');return(false)" 
            
            />
            <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '/url');return(false)" />
            <br /><br />
            <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :D ');return(false)" />
            <img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(' :lol: ');return(false)" />
            <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(' :triste: ');return(false)" 
            
            />
            <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(' :frime: ');return(false)" />
            <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies(' XD ');return(false)" />
            <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(' :s ');return(false)" />
            <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(' :o ');return(false)" />
            <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(' :interrogation: ');return(false)" />
            <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(' :exclamation: ');return(false)" 
            
            />
            </fieldset>
             
            <fieldset><legend>Message</legend><textarea cols="80" rows="8" id="message" name="message"></textarea></fieldset>
             
            <input type="submit" name="submit" value="Envoyer" />
            <input type="reset" name = "Effacer" value = "Effacer"/>
            </p></form>
            <?php
            break;
             
            case "nouveautopic":
            ?>
             
            <h1>Nouveau topic</h1>
            <form method="post" action="postok.php?action=nouveautopic&amp;f=<?php echo $forum ; ?>" name="formulaire">
             
            <fieldset><legend>Titre</legend>
            <input type="text" size="80" id="titre" name="titre" /></fieldset>
             
            <fieldset><legend>Mise en forme</legend>
            <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '/g');return(false)" />
            <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '/i');return(false)" />
            <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '/s');return(false)" 
            
            />
            <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '/url');return(false)" />
            <br /><br />
            <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
            <img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(':lol:');return(false)" />
            <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
            <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
            <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
            <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
            <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
            <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
            <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" 
            
            /></fieldset>
             
            <fieldset><legend>Message</legend>
            <textarea cols="80" rows="8" id="message" name="message"></textarea>
            <label><input type="radio" name="mess" value="Annonce" />Annonce</label>
            <label><input type="radio" name="mess" value="Message" checked="checked" />Topic</label>
            </fieldset>
            <p>
            <input type="submit" name="submit" value="Envoyer" />
            <input type="reset" name = "Effacer" value = "Effacer" /></p>
            </form>
            <?php
            break;
             
            //D'autres cas viendront s'ajouter ici par la suite
            
            default: //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
            echo '<p>Cette action est impossible</p>';
            } //Fin du switch
            mysql_close();
            ?>
            </div>
            </body>
            </html>
            

            1. Contributeur
              de 118 à 120, il y a un retour à la ligne au milieu de la balise fermante de PHP :
              <a href="./voirtopic.php?t=<?php echo $topic ; ?>"><?php echo stripslashes(htmlspecialchars($data1['topic_titre'])); ?
              
              ></a></p>
              1. Oui c'est normal sans faire exprès le bloc note était en retour automatique à la ligne. Et toujours ce problème... pfff
                1. Contributeur
                  en dessous :
                  <a href="./voirtopic.php?t=<?php echo $topic ; ?>"><?php echo stripslashes(htmlspecialchars($data1['topic_titre'])); ?></a></p>
                  <?php
                  }
                  

                  tu fermes une accolade qui est déjà fermée au dessus.
                  1. Après l'avoir supprimer j'ai une erreur à la ligne 122 ... (Parse error: parse error in C:\mondossier\forum\poster.php on line 122)
                    elseif (isset ($_GET['p']))
                    
                    1. Contributeur
                      cf. au dessus.
                  2. Cf au-dessus ? Je ne vois pas... (désolé je ne vois pas ce que tu veux dire, je vois pas ta référence quoi)
                    1. Oui, mais quand je supprime cette { j'ai une erreur à la ligne 122 ... (Parse error: parse error in C:\mondossier\forum\poster.php on line 122)
                      elseif (isset ($_GET['p']))
                      1. Contributeur
                        ah déjà !
                        j'avais pas suivi !
                        -:o)

                        enlève la fermeture d'accolade de la ligne 108 et mets la avant le elseif.

                        tu auras la suivante en 136…
                        1. Contributeur
                          avec cette version :
                          http://pastebin.com/d202ad8bc

                          ça passe chez moi !
                          1. Avec ce que tu m'as donné j'ai Parse error: parse error in C:\mondossier\forum\poster.php on line 204
                            1. Contributeur
                              204 ???
                              mais y a rien !!!
                              ou est-ce qu'il nous voit une erreur ?

                              il nous gonfle à la fin, lui !
                              -:oD
                              • 1
                              • 2