Erreur substring

Résolu
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 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

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Relis ton code :
.tonarray[$i]['date_mariage'].
.$tonarray[$i]['conjoint'].

Lequel est le bon ?
0
t671 Messages postés 1476 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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Affiche (avec echo par exemple) ta requête avant son exécution et regardes ce qui ne va pas.
0
t671 Messages postés 1476 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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Affiche le contenu de la variable $query4 et essayes-la dans PhpMyAdmin.
0
t671 Messages postés 1476 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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t671 Messages postés 1476 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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Ca fonctionne comme toute variable ...
Pour les quotes, il faut les ajoutées dans la requête.
0
t671 Messages postés 1476 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
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Je n'y arrive vraiment pas ! Tu as la solution ?
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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
t671 Messages postés 1476 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
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Ca fonctionne avec asort !
Merci !
0