Erreur substring

Résolu
t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   -
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. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Relis ton code :
    .tonarray[$i]['date_mariage'].
    .$tonarray[$i]['conjoint'].

    Lequel est le bon ?
    0
  2. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    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 !??
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Affiche (avec echo par exemple) ta requête avant son exécution et regardes ce qui ne va pas.
      0
  3. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    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 !
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Affiche le contenu de la variable $query4 et essayes-la dans PhpMyAdmin.
      0
  4. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    L'erreur est dans la syntaxe :
    (SUBSTRING('.$tonarray[$i]['date_mariage'].', -4))
    Mais je ne trouve pas comment !!??
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      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 ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    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 !
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Ca fonctionne comme toute variable ...
      Pour les quotes, il faut les ajoutées dans la requête.
      0
    2. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
       
      J'ai essayé plusieurs solutions, et si j'écris
      ORDER BY 'SUBSTRING('.$tonarray[$i]['date_mariage'].', -4)' ASC'

      Le tri ne se fait pas ???
      0
    3. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
       
      Je n'y arrive vraiment pas ! Tu as la solution ?
      0
    4. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      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.
      0
  7. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    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() ......"
    0
  8. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    Ca fonctionne avec asort !
    Merci !
    0