Page 1 sur 1

Script marche sur serveur linux mais pas WampServer ?

Posté : 15 juin 2017, 14:42
par Couin
Hello,

Le script est php et javascript, il permet d'autocomplèter un champ selon les valeurs que l'on pioche dans une DB.
Je l'utilise dans une boucle for car c'est pour créer des playlists d'émission et qu'au fur et à mesure de la saisie, il suggère ce qui a déjà été joué dans une émission précédent (afin que l'on puisse éviter de remettre un même titre).
C'est le seul script que j’ai trouvé qui fonctionne dans une boucle (toutes les autres jquery autocomplete etc etc , seul le premier champs marchaient).

Seulement voilà, je l'ai testé et mis en place cette nuit sur un serveur linux mais pas sur wamp2.2 que j'utilise sur un windows pour developper habituellement.

Infos sur la version windows :
PHP Version 5.3.13
Apache 2.2.22 (Win32)
Version du serveur MySQL : 5.5.24-log

Infos sur la version linux :
PHP Version 5.3.10-1ubuntu3
Apache 2.2.22 (Ubuntu)
Version du serveur : 5.5.22-0ubuntu1

Les versions sont assez proches (certes anciennes mais si je mets plus récent je vais avoir plusieurs scripts HS, ce n'est aps envisageable de changer pour le moment).


Voici le script en question, que j'ai adapté à mon besoin ; je l'ai simplifié pour ici (donc plus de boucle ni autre, juste le champ) sur une page index.php :

Code : Tout sélectionner

<html> <head> <link rel="stylesheet" type="text/css" href="style.css" /> <link rel="stylesheet" href="./js/jquery-ui.min.css" type="text/css" /> </head> <body> <input type="text" size="80" name="titre" value="" class='auto'> <script type="text/javascript" src="./js/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="./js/jquery-ui.min.js"></script> <script type="text/javascript"> $(function() { //autocomplete $(".auto").autocomplete({ source: "search.php", minLength: 1 }); }); </script> </body> </html>
Et sur une page search.php :

Code : Tout sélectionner

<?php define('DB_SERVER', 'localhost'); define('DB_USER', 'playlist'); define('DB_PASSWORD', 'playlist'); define('DB_NAME', 'playlist'); if (isset($_GET['term'])){ $return_arr = array(); try { $conn = new PDO("mysql:host=".DB_SERVER.";port=8889;dbname=".DB_NAME, DB_USER, DB_PASSWORD); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare('SELECT titre,datepl FROM playlist WHERE titre LIKE :term GROUP BY titre ORDER BY titre ASC, datepl DESC'); $stmt->execute(array('term' => '%'.$_GET['term'].'%')); while($row = $stmt->fetch()) { // $return_arr[] = $row['datepl']; $return_arr[] = $row['titre'] . " (" . $row['datepl'] . ")" ; } } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } /* Toss back results as json encoded array. */ echo json_encode($return_arr); } ?>
En revanche, je ne connais totalement rien à PDO, mais j'ai trovué que ce script qui marchait dans un for .

Si quelqu'un à une idée je suis preneur :)

Merci
Couin

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 15 juin 2017, 15:33
par ynx
Salut,

As tu un message d'erreur dans la console de développement de ton navigateur ?

Bonne journée,

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 15 juin 2017, 23:57
par Couin
Bonjour,

Alors j'ai regardé la console (firefox) , il m'est indiqué en point d'exclamation bleu :
« none », URL, ou fonction filter attendu, mais « Alpha( » trouvé. Erreur d’analyse de la valeur pour « filter ». Déclaration abandonnée.
Je ne trouve pas à quoi cela correspond et ce que j'ia cherché sur les divers forums , ne m'a pas aidé :(

Indiqué en orange :
J'ai placé cette image (récupéré sur le net, en fait c'ets un rectangle blanc) dans un rép "images" dans le rép "js".

Egalement :
Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
J'ai remplacé le @ par # dans le seul fichier que notepad++ a trouvé contenant cela.

Au refresh, plus de message d'erreur à propos de l'image ni //@ , mais un nouveau :
L’utilisation de « getPreventDefault() » est obsolète. Utiliser « defaultPrevented » à la place.
J'ai donc suivi la préco , je n'ai plus d'erreur, mais cela ne fonctionne toujours pas (je peux écrire dans le champs mais aucune liste déroulante de proposition ne s'affiche).

Merci :)

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 16 juin 2017, 17:27
par ynx
Si tu n'as plus d'erreur javascript, le problème dois donc venir du script php.

Ton script php se connecte à la base de données qui est sur localhost (c'est à dire sur la base de données qui est hébergé sur le même serveur que le site).
Puisque le script fonctionne sur le serveur linux, ce dernier a donc bien une base de données nommé playlist accessible. Par contre sur ton serveur wamp, as tu une base de donnée playlist (en vérifiant via phpmyadmin par exemple) ?

Tu peux également essayer d'appeler directement ton script.php?term=test dans ton navigateur pour voir si il retourne une erreur.

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 16 juin 2017, 17:55
par Couin
Hello,

Alors , effectivement, j'aurais dû préciser, il ya bien une base playlist sur le localhost où il ya wamp.
En gros, pour l'historique, j'ai developpé le reste à la maison sur wamp, puis transferé sur mon serveur nunux au boulot via filezilla, pour continuer le dev (bien sur , exporté la DB playlist de wamp pour la mettre sur le linux , et également créé l'utilisateur ayant les droits).
Puis j'ai trovué ce script d'autocomplete qui marchait comme je voulais(sans poser de soucis dans les boucles for), mais une fois que j'ai récupéré pour continuer le dev sous wamp chez moi, marchait plus.
J'ai testé sur un wamp que j'ai au boulot aussi, idem.

En revanche, ta dernière phrase m'a été d'une très grande aide puisqu'elle cela m'a révélé d'une erreur de connexion refusé à propos de PDO , et m'étant demandé pourquoi le port 8889 , je l'ai viré (on teste hein lol) et oooooh, plus de souci et le script marche. Je sais pas d'où sort ce port ni à quoi il sert lol


Un grand merci à toi pour le coup de main :)

Bon WE
Couin

Re: [RESOLU] Script marche sur serveur linux mais pas WampServer ?

Posté : 20 juin 2017, 23:11
par Couin
Hello,

Je viens de de m'apercevoir d'un truc : Ca ne fonctionne pas si les données contiennent des accents :(

Si quelqu'un a une pitit idée de ce que je pourrais modifier ?

MErciiiii
Couin

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 21 juin 2017, 00:00
par @rthur
Bonjour,

Qu'entends-tu par "ça ne fonctionne pas" ? Quel est le message d'erreur ?

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 21 juin 2017, 00:27
par Couin
Re,

Poursuivant mes divers tests , j'en sais un peu plus sur ce qui marche ou pas comme cas.
En fait, par exemple j'ai 5 lignes de données :
papa
popo
pepe
pipi
pépé

Si je cherche p , je vais avoir :
papa
pepe
pipi
popo

On voit que pépé a disparu mais le reste s'affiche.

En revanche, si j'ai comme données
papa
popo
pepe
pipi
pepe pépé

Si je cherche p , rien ne s'affiche.

En allant un peu plus loin, et en appelant directement le fichier search.php , en retirant la condition if isset get term, et en mettant WHERE 1 au lieu de WHERE (titre LIKE :termm) , donc pour tout lister, j'obtiens ceci (notons que les 5 lignes de données font partie d'une litre de titre musicaux) :
dans le cas "pépé" :
","P.Lion - Burn in his hands
","papa
","Paul Johnson - Get get down (XXL Remix)
","pepe
","Pinball - Hands up
","pipi
","popo
","Porn Kings - Amour (Remix) (Bonus)
","Puretone - Addicted To Bass (Remix) (Bonus)

et dans le cas "pepe pépé" :
","P.Lion - Burn in his hands
","papa
","Paul Johnson - Get get down (XXL Remix)
","pepe
",null,"Pinball - Hands up
","pipi
","popo
","Porn Kings - Amour (Remix) (Bonus)
","Puretone - Addicted To Bass (Remix) (Bonus)

On voit que ca se transforme en null, que le renvoi à la ligne a sauté.
Je pense que ce désordre doit bousiller la structure du array qui du coup , quand c'est en mode liste déroulante (utilisation normale quoi), ca ne marche plus car rien ne s'affiche.

Merci :)

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 21 juin 2017, 01:20
par Couin
Alors j'avance un peu sur mes recherches :

J'ai modifié le code vers ce qui concerne GET term :

Code : Tout sélectionner

$wideterm = '%'.utf8_decode($_GET['term']).'%';
puis un peu plus loin :

Code : Tout sélectionner

$stmt->execute(array('term' => $wideterm ));
On voit que j'ai rajouté utf8 décode.

puis à la construction du array :

Code : Tout sélectionner

$return_arr[] = utf8_encode($row['titre']) . " (" . $row['datepl'] . ")" ;
Alors, ça marche presque :
Ca s'affiche si la donnée est par exemple épé , ou ppépé , ou encore tépé , mais pépé non .
On y est presque.

(Par contre, les résultats d'une recherche é affichent aussi ceux de e ).

La suite au prochain post :)

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 22 juin 2017, 09:42
par @rthur
Par contre, les résultats d'une recherche é affichent aussi ceux de e
Cela dépend de ta SGBD, si c'est MySQL, c'est normal car c'est le fonctionnement par défaut.
Pour faire une recherche avec ou sans accent, voici une piste : https://stackoverflow.com/questions/500 ... h-in-mysql

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 22 juin 2017, 14:16
par Couin
Coucou :)

C'est bien mysql vi, et je suis tombé sur le meme topic mais appliqué au script cela ne marche pouint (d'où l'autre sujet que j'ai ouvert récemment viewtopic.php?f=8&t=278386 )

Merciiii

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 23 juin 2017, 00:51
par @rthur
Avant de le mettre dans ton script, teste tes requêtes avec phpmyadmin pour voir ce qui marche et ne marche pas c'est + simple.
Malheureusement à part tester les différents encodages comme l'indique le post de stackoverflow, je ne vois pas d'autres solutions.

Re: Script marche sur serveur linux mais pas WampServer ?

Posté : 23 juin 2017, 03:13
par Couin
Le pire c'est que dans phpmyadmin ca marche (cf mon autre sujet dont j'ai mis le lien dans mon message précédent).
J'ai beau changer un tas de trucs au niveau de la db, mettre des utf8 bin etc etc, le truc me sort toujours la meme chose avec le latin1 qui sort de je ne saisp as où ...
Je ne m'en sors pas du tout , c'est désespérant d'autant que ca mets rend mon projet quasiment inutile :(