Un espace en trop sur retour Ajax ?

Avatar du membre
Eléphant du PHP | 164 Messages

28 janv. 2020, 18:27

Hellooo :)

Un petit script pour afficher la playlist précédente ou suivante via 2 boutons qui appellent une fonction sur un évènement "onclick".

La fonction :

Code : Tout sélectionner

function prevnextpl(sens) { actualdate = document.getElementById('datepl').value; $.ajax({ type: 'POST', url: 'returndate.php', data: { date:actualdate, sens:sens }, success: function(data){ returndate = data; changepl(returndate); document.getElementById('datepl').value = returndate; } }); }
On récupère la date de playlist actuelle (celle affichée), on appelle une page returndate.php avec des données envoyées en POST : la date actuelle et le sens (si playlist précédente ou suivante).
La page php regarde dans la base de données, quelle est la date précédente ou suivante, et retourne la nouvelle date.
Avec la nouvelle date, on change de playlist via une autre fonction, donc le paramètre est la date voulue.
Et on met à jour la date actuelle avec la nouvelle date.

Problème, cela ne fonctionne pas.
En cherchant et en jouant sur divers "echo" et "alert", j'ai fini par constater qu'un espace se glisse en premier.

Si je fais

Code : Tout sélectionner

returndate = "poc"+data; changepl(returndate);
et que dans la page php générant la playlist pour la fonction changepl(), je mets un écho de la date qui lui est envoyée, je vois affiché par exemple ceci :
poc 2020-01-12
au lieu de
poc2020-01-12

Voici le code php qui génère le returndate :

Code : Tout sélectionner

<? $date = $_POST['date']; $sens = $_POST['sens']; $returndate = date('Y-m-d',strtotime($date . $sens." 1 week")); require 'readconfig.php'; if ($sens == '-') { $sql = "SELECT datepl FROM `playlist` WHERE datepl <= '$returndate' ORDER BY datepl DESC LIMIT 1"; } else { $sql = "SELECT datepl FROM `playlist` WHERE datepl >= '$returndate' ORDER BY datepl ASC LIMIT 1"; } $requete = mysql_query( $sql ) ; while( $result = mysql_fetch_object( $requete ) ) { $returndate = $result->datepl; } echo $returndate;?>
Alors bien sur, je peux tricher en mettant un trim sur le data de retour Ajax ( returndate = data.trim(); ) et ca fonctionne mais j'aimerais comprendre d'où sort cet espace .

si quelqu'un a une idée :)
Merkouiiiin
Un Couin vaut mieux que Deux tu couineras :D

Mammouth du PHP | 1303 Messages

28 janv. 2020, 18:46

peut-être:
<? $date = $_POST['date'];

Avatar du membre
Eléphant du PHP | 164 Messages

28 janv. 2020, 19:06

Hmmm, merci pour ta réponse mais j'ai beau chercher, je ne vois pas de différence avec le $date = $_POST['date']; que j'ai en début de page php ?

Edit : en passant via un array en json (vu que je vais avoir 2 autres infos à passer) , pas besoin de trim.
Un Couin vaut mieux que Deux tu couineras :D

Avatar du membre
Mammouth du PHP | 1131 Messages

28 janv. 2020, 21:21

Salut Couin, l'espace est dans la base de données. ou avant l'ouverture de la balise php, peut être un BOM utf-8 ?
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Avatar du membre
Eléphant du PHP | 164 Messages

30 janv. 2020, 16:29

Hello,

Si je regarde l'encodage du fichier il est en UTF8 (et non UTF8-BOM) donc je pense que c'est bon pour ça, et il n'y a pas d'espace dans la DB non plus.
Je sèche :P
Un Couin vaut mieux que Deux tu couineras :D

Avatar du membre
Eléphant du PHP | 164 Messages

02 févr. 2020, 03:40

Yop !

Naroth avait répondu mais je n’avais pas encore répondu avant de test, mais il a supprimé son message entre temps :(
SI tu trim ta variable avant le retour t'as toujours le problème ?
Le problème est toujours là si je trim la variable avant le retour.
Un Couin vaut mieux que Deux tu couineras :D