Erreur substring

Résolu/Fermé
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - Modifié par t671 le 6/08/2016 à 19:32
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 8 août 2016 à 16:27
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
6 août 2016 à 19:56
Relis ton code :
.tonarray[$i]['date_mariage'].
.$tonarray[$i]['conjoint'].

Lequel est le bon ?
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
Modifié par t671 le 7/08/2016 à 11:50
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
7 août 2016 à 11:58
Affiche (avec echo par exemple) ta requête avant son exécution et regardes ce qui ne va pas.
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
Modifié par t671 le 7/08/2016 à 14:00
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
7 août 2016 à 14:34
Affiche le contenu de la variable $query4 et essayes-la dans PhpMyAdmin.
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
7 août 2016 à 15:35
L'erreur est dans la syntaxe :
(SUBSTRING('.$tonarray[$i]['date_mariage'].', -4))
Mais je ne trouve pas comment !!??
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
7 août 2016 à 16:53
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
8 août 2016 à 10:18
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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
8 août 2016 à 11:26
Ca fonctionne comme toute variable ...
Pour les quotes, il faut les ajoutées dans la requête.
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
8 août 2016 à 11:37
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
8 août 2016 à 11:46
Je n'y arrive vraiment pas ! Tu as la solution ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
8 août 2016 à 11:56
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
8 août 2016 à 15:25
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
8 août 2016 à 16:27
Ca fonctionne avec asort !
Merci !
0