Parse error: syntax error, unexpected T_LOGIC

Résolu
txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   -  
txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je galère depuis une semaine et à force de corriger c'est de pire en pire. Je ne vois plus tellement je lis "trouble". Je vais finir par poster tout le code de la page en espérant que quelqu'un qui voit voit cela pour la première fois voit la boulette du premier coup d'oeil. Je m'arrache les cheveux, ne pense qu'a ça même en me couchant et ça devient invivable. Bref voici le message:
Parse error: syntax error, unexpected T_LOGICAL_OR in
(cest le pire de tous ceux que j'ai eu) grhhhh !
Et maintenant la page sensé ajouter un enregistrement dans la table agenda:
<?php
// On déclare les variables (post car la méthode d'envoi du formulaire est POST
$ID = $_POST['ID'];
$Lien = mysql_real_escape_string(htmlspecialchars($_POST['Lien']));
$Source = mysql_real_escape_string(htmlspecialchars($_POST['Source']));
$Date = mysql_real_escape_string(htmlspecialchars($_POST['Date']));
$Titre_Page = mysql_real_escape_string(htmlspecialchars($_POST['Titre_Page']));
$Stitre1 = mysql_real_escape_string(htmlspecialchars($_POST['Stitre1']));
$Stitre = mysql_real_escape_string(htmlspecialchars($_POST['Stitre']));
$textarea = mysql_real_escape_string(htmlspecialchars($_POST['Info']));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="index, follow">
<link rel="SHORTCUT ICON" href="http://graciannehastoy.free.fr/favicon.ico">
<meta name="author" content="Jean Michel Etchecolonea/Gracianne Hastoy" />
<meta name="description" content="Le site de l'écrivain basque Gracianne Hastoy." />
<meta name="keywords" content="littérature basque, livres, recueils, récits, poésie, sorcières, histoire, Guernica, solstice, maudites, textes de chanson, pensées, rédaction d'articles, Pyrène" />
<title>Site de l'écrivain Gracianne Hastoy</title>
<link rel="stylesheet" href="../scripts/hastoy.css" type="text/css" />
<!--<?php include('../menu.php'); ?>-->
</head>
<body>
<div id="titre" style="position:absolute; visibility:visible; z-index:100;">
  <table width="100%" border="0" cellspacing="0" cellpadding="1">
    <tr>
      <td width="2%">&nbsp;</td>
      <td width="5%"><img src="../images/Gracianne_Hastoy_Titre.gif" width="36" height="50" alt="Gracianne Hastoy" title="Gracianne Hastoy" /></td>
      <td><h1>Gracianne Hastoy </h1></td>
      <td width="10%">&nbsp;</td>
    </tr>
  </table>
</div>

<div id="global" style="position:absolute; visibility:visible; z-index:1;">
  <table width="100%"  border="0" cellspacing="0" cellpadding="6">
    <tr>
      <td colspan="4"><h3 align="center"> Agenda de l'auteur. </h3>

<?php  
 // Infos de connexion à la BDD et affichage des boutons Précédent et Suivant
require 'Fonctions_Agenda.php';

 // connection à la BDD
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table
mysql_query ($sql);
// mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error() );

 // on ajoute le texte issu du formulaire dans la table agenda
$sql = ('INSERT INTO agenda ID, Lien, Source, Date, Titre_Page, Stitre1, Stitre, Info VALUE "'.$ID.'", "'.$Lien.'", "'.$Source.'", "'.$Date.'", "'.$Titre_Page.'", "'.$Stitre1.'", "'.$Stitre.'", "'.$textarea.'"');

  // si ça ne se passe pas bien on affiche une erreur
or die ('Erreur : '.mysql_error() );

 // sinon on affiche un message prévénant l'utilisateur que c'est OK avec le titre-lien et le titre de page !
else
{
   echo 'le nouvel événement à été enregistré dans l\'agenda : '.$_POST['Lien'].' concernant la page '.$_POST['Titre_Page']'';  
}
 // on ferme la connexion à la base
  mysql_close(); 

 // Puis on redirige le rédacteur vers le formulaire en cas d'ajout d'un second événement dans son agenda :
header('Location: Formulaire.php');

 ?>  
	  </td>
    </tr>
  </table>
<hr>
  <table width="100%"  border="0" cellpadding="6" cellspacing="0">
    <tr>
      <td width="16%" align="center"><img src="../images/sign-graci.gif" width="134" height="40" /></td>
      <td  width="84%" class="copy"><strong>Tous droits réservés par Gracianne Hastoy </strong>Aucune partie de ce site ne peut être reproduite, sous quelque forme que ce soit, sans l'autorisation de l'auteur.</td>
    </tr>
    <tr>
      <td width="16%" align="center" class="maj"><?
print("Modifié le ");
print(date("d - m - Y", filemtime($SCRIPT_FILENAME)));
?>
      </td>
      <td  width="84%"><div align="right"><a href="javascript:history.go(-1)"><img src="../images/Btn_Retour.gif" width="29" height="22" border="0" alt="Page précédente" title="Page précédente" /></a>&nbsp;&nbsp;&nbsp;&nbsp; Ce site est audité par:
            <script language="javascript" src="../scripts/xiti.js" type="text/javascript"></script>
      </div></td>
    </tr>
  </table>
</div>
</body>
</html>

Merci déjà à ceux qui ont essayé de m'aider mais là, je suis trop perturbé pour tenter quoi que ce soit.



Le bonheur est la seule chose que l'on peut donner sans l'avoir.

12 réponses

  1. .Zoro. Messages postés 285 Statut Membre 33
     
    il faudrai l'erreur complete

    dans le texte d'erreur que tu poste, il doit y avoir le nom du fichier et le numero de la ligne ou l'erreur est située

    alor poste le ligne en question stp
    0
  2. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Oups ! c'est vrai (c'est dire combien je suis perdu....
    Parse error: syntax error, unexpected T_LOGICAL_OR in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 56

    Merci encore parceque je n'en peux plus...

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
  3. .Zoro. Messages postés 285 Statut Membre 33
     
    essai d'ecrire ta requete sql comme suit

    $sql = ('INSERT INTO agenda (ID, Lien, Source, Date, Titre_Page, Stitre1, Stitre, Info) VALUE ("'.$ID.'", "'.$Lien.'", "'.$Source.'", "'.$Date.'", "'.$Titre_Page.'", "'.$Stitre1.'", "'.$Stitre.'", "'.$textarea.'")');

    j'ai rajouter des parentheses
    essaye comme sa et dit ce que sa donne
    0
  4. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Désolé mais c'est exactement pareil à savoir:
    Parse error: syntax error, unexpected T_LOGICAL_OR in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 56

    C'est pas dieu possible. Je vais "peter" un câble !
    En tous cas merci de ton soutient.

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. .Zoro. Messages postés 285 Statut Membre 33
     
    je crois avoir trouvé

    $sql = ('INSERT INTO agenda ID, Lien, Source, Date, Titre_Page, Stitre1, Stitre, Info VALUE "'.$ID.'", "'.$Lien.'", "'.$Source.'", "'.$Date.'", "'.$Titre_Page.'", "'.$Stitre1.'", "'.$Stitre.'", "'.$textarea.'"');

    // si ça ne se passe pas bien on affiche une erreur
    or die ('Erreur : '.mysql_error() );

    tu utilise la condition "or die" pour parer aux erreurs mais tu as fermé la requete

    supprime le point-virgule au bout de ta requete sql
    je l'ai mis en gras
    0
  7. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Parse error: syntax error, unexpected T_ELSE in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 59
    et le code php:
    <?php  
     // Infos de connexion à la BDD et affichage des boutons Précédent et Suivant
    require 'Fonctions_Agenda.php';
    
     // connection à la BDD
    $link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
    mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table
    mysql_query ($sql);
    // mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error() );
    
     // on ajoute le texte issu du formulaire dans la table agenda
    $sql = ('INSERT INTO agenda (ID, Lien, Source, Date, Titre_Page, Stitre1, Stitre, Info) VALUE ("'.$ID.'", "'.$Lien.'", "'.$Source.'", "'.$Date.'", "'.$Titre_Page.'", "'.$Stitre1.'", "'.$Stitre.'", "'.$textarea.'")') 
    
      // si ça ne se passe pas bien on affiche une erreur
    or die ('Erreur : '.mysql_error() );
    
     // sinon on affiche un message prévénant l'utilisateur que c'est OK avec le titre-lien et le titre de page !
    else
    {
       echo 'le nouvel événement à été enregistré dans l\'agenda : '.$_POST['Lien'].' concernant la page '.$_POST['Titre_Page']'';  
    }
     // on ferme la connexion à la base
      mysql_close(); 
    
     // Puis on redirige le rédacteur vers le formulaire en cas d'ajout d'un second événement dans son agenda :
    header('Location: Formulaire.php');
    
     ?>  

    La ligne 59 est celle du else (en gras).

    Je crois que j'ai tout essayé (y compris ta manière d'écrire la requete). Voici le site en question:
    http://editionsgracianne.free.fr/presse/Formulaire.php (user= test et pass = toto)
    Les boutons souligné ne fonctionne pas et Citation me provoque des retours chariot non souhaité (mais là c'est du javascript (si tu veux le code complet pour faire la même chose, je te l'envoi ou le colle ici).

    Merci encore pour ta patience !

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
  8. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Au fait cela devrait donner comme sur ma page perso sur les prénoms basques et leur origine:
    http://abarka.free.fr/index.php?page=Intro_Prenoms&lang=Fr

    Tu te rends compte ? J'ai fait ça mais la seule chose que je n'ai pas réalisé encore c'est de renseigner une table via un formulaire.

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
  9. .Zoro. Messages postés 285 Statut Membre 33
     
    pour ta deuxieme erreur sur le else

    tu a oublié de fermer le IF avant de passer au ELSE

    met un } avant le else
    0
  10. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Salut kadeh et merci pour ton intervention,

    Beaucoup d'méliorations depuis ton aide mais maintenant j'ai plein de warning dont la plupart sont cachés mais je pense que c'est les mêmes que ceux ci-dessous à savoir les déclarations de variables.
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 9


    LIGNE 9: $Stitre = mysql_real_escape_string(htmlspecialchars($_POST['Stitre'])); par exemple

    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 10

    D'autre, à l'intérieur du form apparement:
    Warning: main(Fonctions_Agenda.php) [function.main]: failed to open stream: No such file or directory in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 44
    Et la ligne 44:
    require 'Fonctions_Agenda.php';

    Fatal error: main() [function.require]: Failed opening required 'Fonctions_Agenda.php' (include_path='/mnt/171/sda/4/e/editionsgracianne/include:.:/usr/php4/lib/php') in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 44

    Normalement le menu qui apparait sur la gauche ne devrait pas apparaitre. Pourquoi est-il là ? (J'ai mis
    <!--<?php include('../menu.php'); ?>-->

    en commentaire dans la page).
    Je te laisse regarder par toi-même sur: http://editionsgracianne.free.fr/presse/Formulaire.php (user = test et pass = toto).
    Un grand merci encore. Je commence à voir je jour après tant d'heures à chercher partout (forums, tutos etc...)

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
    1. kadeh Messages postés 341 Statut Membre 92
       
      mysql_real_escape_string() se fait après mysql_connect() pas avant.

      Warning: main(Fonctions_Agenda.php) [function.main]: failed to open stream: No such file or directory in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 44

      require ('chemin/Fonctions_Agenda.php');

      vérifier si le fichier "Fonctions_Agenda.php" est au bon répertoire.

      pour commenter du php, utiliser plutot // ou /**/
      <?php // include('../menu.php'); ?>

      @+
      0
  11. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Merci les gars, ça avance. Mais encore 2 soucis:
    1-: cette phrase ne s'affiche pas correctement "le nouvel événement à été enregistré dans l'agenda concernant la page :" dont voici le code:
    // on prévient l'utilisateur que l'enregistrement s'est bien déroulé
          echo 'le nouvel événement '.$_Lien.' à été enregistré dans l\'agenda concernant la page : '.$_Titre.'';


    Ensuite, mais j'y pense maintenant, il vaudrait mieux mettre un bouton pour retourner au formulaire plutôt que cette ligne:
    // Puis on redirige le rédacteur vers le formulaire en cas d'ajout d'un second événement dans son agenda :
     header('Location: Formulaire.php');
    qui me provoque l'erreur ci-dessous.
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php:18) in /mnt/171/sda/4/e/editionsgracianne/presse/Traitement_Agenda.php on line 69

    Qu'imagineriez-vous, vous dans ce cas précis ? Je pense (mais n'en suis pas sur du tout) que même si cela fonctionnait, l'utilisateur n'aurait pas le temps de voir le message signalant que l'enregistrement s'est bien déroulé. Je me trompe ?

    Merci encore.

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
    1. .Zoro. Messages postés 285 Statut Membre 33
       
      pourquoi demande tu les variables "$_Titre" et $_Lien

      ecrit tout simplement "$Titre" et "$Lien"
      comme tu les a declarées.


      ensuite
      pour ta redirection

      tu as le choix :

      soit tu laiise l'utilisateur sur la page avec un lien pour en sortir (ce que tu dit)

      ou alor une technique que j'utilise pour mes scripts:
      j'utilise la tamporisation de sortie
      http://www.siteduzero.com/tutoriel-3-38102-la-tamporisation-de-sortie-en-php.html
      le principe est que rien n'est envoyé au clien tant que le script ou la generation n'est pas terminée.
      donc, adieu les soucis avec "header already send by"
      et pour le message
      je l'enregistre dans une variable de session pour l'afficher sur la page suivante.
      0
    2. kadeh Messages postés 341 Statut Membre 92
       
      Bonjour,
      <?php
      function redirect($url, $time=3)
      {     
         //On vérifie si aucun en-tête n'a été envoyé    
         if (!headers_sent())
         {
           header("refresh: $time;url=$url");
           exit;
         }
         else
         {
           echo '<meta http-equiv="refresh" content="',$time,';url=',$url,'">';
         }
      }
      // puis pour faire la redirection n'importe où dans la page.
      redirect("Formulaire.php","5"); 
      ?>

      @+
      0
    3. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
       
      Bonjour Kadeh,
      C'est super ! mais je crois que je vais garder le bouton Retour au formulaire. Je verrai avec elle mais ça laisse le temps de lire le résumé (bien que je peux allonger la $time).
      Cependant, j'ai encore des soucis:
      1- si le texte contient des apostrophes (dans les variables) il me les affiche. Essaie ici: http://editionsgracianne.free.fr/presse/Formulaire.php (user=test et pass=toto). J'ai essayé avec htmlspecialchars mais ça ne fonctionne pas. ?.
      La ligne correspondante est celle-ci:
      // on prévient l'utilisateur que l'enregistrement s'est bien déroulé
      echo 'le nouvel événement "<strong> '.$Lien.'</strong>" à été enregistré dans l\'agenda concernant la page "<strong>'.$Titre.'</strong>"'; 

      2- Les dates s'écrivent, sur la table, sous la forme 0000-00-00 (que des zéros) et ce quelque soit la façon de saisir, le petit calendrier ou la saisie manuelle.
      Merci beaucoup pour ton script il me servira sans doute dans d'autres circonstances.
      0
    4. kadeh Messages postés 341 Statut Membre 92
       
      Bonjour,
      "1- si le texte contient des apostrophes (dans les variables) il me les affiche."
      Vous parlez de l'affichage des apostrophes ou des antislashs??
      L'antislash est ajouté automatiquement par ce que Les guillemets magiques sont activés sur votre hébergement . pour enlever l'antislash à l'affichage utilisez stripslashes():
      echo 'le nouvel événement à été enregistré dans l\'agenda : '.htmlentities(stripslashes($_POST['Lien'])).' concernant la page '.htmlentities(stripslashes($_POST['Titre_Page'])).'';
      
      // pour afficher correctement les données provenant d'un formulaire et ce quelque soit  la configuration de la directive php magic_quotes_gpc (on/off):
      
      if (get_magic_quotes_gpc()) {
          // magic_quotes_gpc activé
          echo(htmlentities(stripslashes($_POST['variable'])));
      }
      else {
          // magic_quotes_gpc désactivé
          echo(htmlentities($_POST['variable']));
      }
      


      "2- Les dates s'écrivent, sur la table, sous la forme 0000-00-00 (que des zéros) et ce quelque soit la façon de saisir, le petit calendrier ou la saisie manuelle. "
      - " Le format d'une valeur de DATE est 'YYYY-MM-DD'. En accord avec ANSI SQL, aucun autre format n'est autorisé."
      - MySQL - Fonctions de dates et d'heures
      - PHP - Fonction date
      $Date = mysql_real_escape_string(date("Y-m-d",strtotime($_POST['Date'])));

      @+
      0
    5. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
       
      Merci kadeh,
      j'avais mis le htmlentities mais SANS le stripslashes .
      Par contre le fait qu'il n'y ait que des 00 ça ce n'est pas normal (je ne parle pas du format, je sais bien que c'est yyyy-mm-dd) mais je n'ai que des zéros (les chiffres 0).
      0
  12. txiki Messages postés 6514 Date d'inscription   Statut Contributeur Dernière intervention   609
     
    Oups ! mauvaise idée. Ça oblige a retaper le user et le pass à chaque fois. Faut que je trouve autre chose.

    Le bonheur est la seule chose que l'on peut donner sans l'avoir.
    0
  13. kadeh Messages postés 341 Statut Membre 92
     
    Bonjour,

    // $sql doit être déclaré avant mysql_query ($sql);
    $sql = ('INSERT INTO agenda (ID, Lien, Source, Date, Titre_Page, Stitre1, Stitre, Info) VALUE ("'.$ID.'", "'.$Lien.'", "'.$Source.'", "'.$Date.'", "'.$Titre_Page.'", "'.$Stitre1.'", "'.$Stitre.'", "'.$textarea.'")') ;
    
    mysql_query ($sql) /*si ça ne se passe pas bien on affiche une erreur*/ or die ('Erreur : '.mysql_error() );
    

    or die en cas d'échec, et else c'est quoi ??
    normalement c'est la même chose.
    sinon employez (if et else) au lieu de "or die".
    vous pouvez consulter cet article: Gérer les erreurs MySQL en PHP sans or die
    @+
    -1