> Tous les forums > Forum des Webmasters
 erreur substringSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
t14
  Posté le 07/08/2016 @ 16:07 
Aller en bas de la page 
Petit astucien

Bonjour,

J'ai une erreur de requête en utilisant "Substring". Je l'utilise avec un tableau.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 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 ($tonarray[$i]['date_mariage']) est en fait "15 mai 1856", et je cherche à trier sur les 4 derniers caractères, donc là 1856 !

L'erreur vient de l'expression substring, mais je ne sais pas comment faire ...... ???

Publicité
Titus68
 Posté le 07/08/2016 à 17:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Il ne te manque pas des ' car SUBSTRING('.$tonarray[$i]['date_mariage'].', -4) ASC' çà va en donner :

substring(mai 1856, -4)) ASC alors que çà devrait être substring('mai 1856', -4)) ASC ?

Je me demande s'il n'y aura d'ailleurs pas un autre erreur sur :

LIKE '.$tonarray[$i]['conjoint'].' qui va donner LIKE moi par exemple au lieu de LIKE 'moi'

Faut pas rajouter des \' ?

zoulouman
 Posté le 07/08/2016 à 18:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Juste pour info, n'oublie pas que MySQL est obsolète depuis PHP 5.5.0 est abandonné avec PHP 7.0

Avant de corriger ton code, tu devrais le faire migrer vers MySQLi ou PDO, par exemple.

MySQL n'a plus a être corrigé, il faut le faire migrer.



Modifié par zoulouman le 07/08/2016 18:12
t14
 Posté le 08/08/2016 à 10:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Titus68 a écrit :

Il ne te manque pas des ' car SUBSTRING('.$tonarray[$i]['date_mariage'].', -4) ASC' çà va en donner :

substring(mai 1856, -4)) ASC alors que çà devrait être substring('mai 1856', -4)) ASC ?

Je me demande s'il n'y aura d'ailleurs pas un autre erreur sur :

LIKE '.$tonarray[$i]['conjoint'].' qui va donner LIKE moi par exemple au lieu de LIKE 'moi'

Faut pas rajouter des \' ?

C'est bien ce qui me semble, mais je ne sais pas où ??

Titus68
 Posté le 08/08/2016 à 13:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Je pense que çà doit être çà :

$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';

Tous les ' vont disparaître lors de l'analyse sauf ceux avec \' qui seront remplacés par '. Il y a un \'' : c'est bien \' et '.



Modifié par Titus68 le 08/08/2016 13:47
t14
 Posté le 08/08/2016 à 14:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Titus68 a écrit :

Je pense que çà doit être çà :

$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';

Tous les ' vont disparaître lors de l'analyse sauf ceux avec \' qui seront remplacés par '. Il y a un \'' : c'est bien \' et '.

Là, le tri n'est pas pris en compte !!!!

Titus68
 Posté le 08/08/2016 à 14:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

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

A la place de LIKE tu peux aussi indiquer =. LIKE çà fonctionne plutôt avec % (ex: Dupon%, pour rechercher tous les Dupon : Dupont, Dupond ...)



Modifié par Titus68 le 08/08/2016 14:38
t14
 Posté le 08/08/2016 à 14:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Titus68 a écrit :

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

A la place de LIKE tu peux aussi indiquer =. LIKE çà fonctionne plutôt avec % (ex: Dupon%, pour rechercher tous les Dupon : Dupont, Dupond ...)

C'est pareil ! Le tri ne se fait pas sur date_mariage !

t14
 Posté le 08/08/2016 à 15:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Titus68 a écrit :

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

A la place de LIKE tu peux aussi indiquer =. LIKE çà fonctionne plutôt avec % (ex: Dupon%, pour rechercher tous les Dupon : Dupont, Dupond ...)

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() in

Publicité
Titus68
 Posté le 08/08/2016 à 15:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

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

SUBSTRING avec -4 çà ne doit pas marcher en MySql, c'était plutôt pour PHP mais tel que c'était au départ çà ne marcherait pas.

Ah ben si je viens de voir que SUBSTRING avec -4 çà aurait dû fonctionner également. A mon avis c'est un problème de format.



Modifié par Titus68 le 08/08/2016 15:38
Titus68
 Posté le 08/08/2016 à 15:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Tes dates (date_naissance, date_dc, date_mariage) ont quel format de colonne : DATE, DATETIME, CHAR, VARCHAR ?

Avec le format DATE, la date est au format 0000-00-00 exemple 2016-08-03 : si tu prends les 4 derniers c'est sûr que çà ne va pas être bien trié : il faudrait essayer avec LEFT(date_mariage,4) si cette colonne est au format DATE.

Si elle est en CHAR par exemple, là, çà dépend dans quel format tu as saisis les dates : AAAAMMJJ ou JJMMAAAA ou autres ?

t14
 Posté le 08/08/2016 à 16:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Titus68 a écrit :

Tes dates (date_naissance, date_dc, date_mariage) ont quel format de colonne : DATE, DATETIME, CHAR, VARCHAR ?

Avec le format DATE, la date est au format 0000-00-00 exemple 2016-08-03 : si tu prends les 4 derniers c'est sûr que çà ne va pas être bien trié : il faudrait essayer avec LEFT(date_mariage,4) si cette colonne est au format DATE.

Si elle est en CHAR par exemple, là, çà dépend dans quel format tu as saisis les dates : AAAAMMJJ ou JJMMAAAA ou autres ?

Ca fonctionne avec asort !

zoulouman
 Posté le 09/08/2016 à 12:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Change de langage SGBD ! MySQL est obsolète !

t14
 Posté le 09/08/2016 à 14:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
zoulouman a écrit :

Change de langage SGBD ! MySQL est obsolète !

A mon âge, j'arrête là !!!!

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
33,98 €Carte mémoire microSDXC UHS-I SanDisk Ultra 200 Go à 33,98 €
Valable jusqu'au 20 Octobre

Amazon fait une promotion sur la mémoire microSDHC UHS-I SanDisk Ultra 200 Go qui passe à 33,98 € livrée gratuitement. On la trouve ailleurs à partir de 40 €. Cette carte mémoire offre des vitesses jusqu'à 90 Mo/s.


> Voir l'offre
72,10 €Kit de 16 Go (2 x 8 Go) de mémoire DDR4 Corsair Vengeance LPX 3200 MHz à 72,10 € livré
Valable jusqu'au 20 Octobre

Amazon Allemagne fait une belle promotion sur le kit de 16 Go (2x8 Go) de mémoire DDR4 Corsair Vengeance LPX 3200 MHz qui passe à 67,46 €. Comptez 4,64 € pour la livraison en France soit un total de 72,10 € livré. Une très bonne affaire !


> Voir l'offre
72,99 €Kit de 16 Go (2 x 8 Go) de mémoire DDR4 Crucial Ballistix 3200 MHz à 72,99 €
Valable jusqu'au 20 Octobre

Amazon fait une promotion sur le kit de 16 Go (2x8 Go) de mémoire DDR4 Crucial Ballistix 3200 MT/s CL16 qui passe à 72,99 € alors qu'on le trouve ailleurs à partir de 100 €. 


> Voir l'offre

Sujets relatifs
simple scripte PHP qui affiche un message erreur
Erreur 404 0VH
transfert de site vers Wamp et Erreur 404
Erreur macromédia Flash8
Erreur SQL ! select pwd from
Erreur: HTTP/1.0 404
erreur d execution
Erreur HTTP SEVER
Message erreur accès livre d'or
Erreur 552 disque plein
Plus de sujets relatifs à erreur substring
 > Tous les forums > Forum Forum des Webmasters