Erreur substring

Résolu
Bonjour,

$query4 = 'SELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ORDER BY (SUBSTRING ('.tonarray[$i]['date_mariage'].', -4)) ASC';   //
$result4 = mysql_query($query4) or die(mysql_error());
$row4 = mysql_fetch_array($result4);

J'ai une erreur
Parse error: syntax error, unexpected '[' in /mnt/168/sda/5/0/th1/gen_famille/gestion/fiche_indiv.php on line 492
sur la ligne du query4 !
Je n'arrive pas à la déceler ! Merci.

7 réponses

  1. Je pense que j'approche .............

    Si je fais "usort($tonarray);" à la place de "sort($tonarray);" j'affiche dans l'ordre voulu.

    Par contre, j'ai le message d'erreur "Warning: Wrong parameter count for usort() ......"
    1. Effectivement, c'est ce qui me semble. Mais je ne vois pas où en rajouter ............. !?
      Et j'avais penser faire un substring directement dans php, mais comme le résultat sort d'un tableau, je ne sais pas trop comment ça marche !
      1. Modérateur
        Ca fonctionne comme toute variable ...
        Pour les quotes, il faut les ajoutées dans la requête.
      2. J'ai essayé plusieurs solutions, et si j'écris
        ORDER BY 'SUBSTRING('.$tonarray[$i]['date_mariage'].', -4)' ASC'

        Le tri ne se fait pas ???
      3. Je n'y arrive vraiment pas ! Tu as la solution ?
      4. Modérateur
        Fais ton SubString par PHP, pour commencer, sinon, en SQL, tu fais un ORDER BY sur une donnée fixe, donc pas de sens.

        Et pour échapper une quote ', il faut mettre un \ devant.
    2. L'erreur est dans la syntaxe :
      (SUBSTRING('.$tonarray[$i]['date_mariage'].', -4))
      Mais je ne trouve pas comment !!??
      1. Modérateur
        2 choses :
        Il ne manque pas des quotes ?
        Et ne serait-il pas préférable de faire le Substring directement dans PHP plutôt que de le faire dans la requête ?
    3. Je ne vois pas bien ce que je pourrais afficher !
      Voici mon tableau :

      $tonarray[0]=array("mariage" => $marg_1 ,"date_mariage" => $row['date_mariage_1'] , "conjoint" => $row['num_cj_1'] , "lieu_mariage" => $row['lieu_mariage_1'] , "acte_mariage" => $row['acte_mariage_1'] , "divorce" => $row['divorce_1'], "photo_lieu" => $row['photo_lieu_lien_1']);
      
      $tonarray[1]=array("mariage" => $marg_2 ,"date_mariage" => $row['date_mariage_2'] , "conjoint" => $row['num_cj_2'] , "lieu_mariage" => $row['lieu_mariage_2'] , "acte_mariage" => $row['acte_mariage_2'] , "divorce" => $row['divorce_2']);
      
      $tonarray[2]=array("mariage" => $marg_3 ,"date_mariage" => $row['date_mariage_3'] , "conjoint" => $row['num_cj_3'] , "lieu_mariage" => $row['lieu_mariage_3'] , "acte_mariage" => $row['acte_mariage_3'] , "divorce" => $row['divorce_3']);
      
      $tonarray[3]=array("mariage" => $marg_4 ,"date_mariage" => $row['date_mariage_4'] , "conjoint" => $row['num_cj_4'] , "lieu_mariage" => $row['lieu_mariage_4'] , "acte_mariage" => $row['acte_mariage_4'] , "divorce" => $row['divorce_4']);
      
      sort($tonarray);
      for($i=0; $i<=3; $i++)
      {


      ma requête :

      if ($tonarray[$i]['conjoint'] != "") 
      { 
      $query4 = 'SELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ORDER BY SUBSTRING('.$tonarray[$i]['date_mariage'].', -4) ASC'; 
      $result4 = mysql_query($query4) or die(mysql_error());
      $row4 = mysql_fetch_array($result4);


      Et quand j'ai l'erreur You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mai 1856, -4)) ASC' at line 1
      la date est en fait "15 mai 1856", et je cherche à trier sur les 4 derniers caractères, là 1856 !
      1. Modérateur
        Affiche le contenu de la variable $query4 et essayes-la dans PhpMyAdmin.
    4. Merci ! Effectivement ...............
      Par contre, maintenant j'ai une autre erreur, toujours sur

      $query4 = 'SELECT id,num_indiv,famille,nom,prenom,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' ORDER BY (SUBSTRING('.$tonarray[$i]['date_mariage'].', -4)) ASC'; 
      

      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mai 1856, -4)) ASC' at line 1
      mai 1856 correspond à '.$tonarray[$i]['date_mariage'].'.
      Je ne veux trier que sur le 1856 !??
      1. Modérateur
        Affiche (avec echo par exemple) ta requête avant son exécution et regardes ce qui ne va pas.
    5. Modérateur
      Relis ton code :
      .tonarray[$i]['date_mariage'].
      .$tonarray[$i]['conjoint'].

      Lequel est le bon ?