[RESOLU] Affichage anticipé

Mammouth du PHP | 1029 Messages

25 mai 2016, 12:13

Oui, sauf que je pense, que les première requêtes ne retourne peut-être pas les bons résultats, a cause du like.
En effet si vous avez un userid qui vaut 15 , avec le like tel quel il va reprendre 15 - 115 - 1515- 1015 - 215 .....
Du coup, vous n'êtes pas sur de récupérer la bonne info.
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

25 mai 2016, 12:21

Le Userid est unique.

Mammouth du PHP | 1029 Messages

25 mai 2016, 12:27

Alors pourquoi un "like" et non pas un "=", car je le répète le like tel que écrit reprendra les Userid reprenant le même nombre.

Donc si vous avez dans votre variable $Userid le nombre 12 , tous les Userid reprenant la séquence 12 dans vos Userid seront sélectionné :
Le 12 bien sûr, mais également 112,212,312...1012.....1812...etc....
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

25 mai 2016, 12:46

J'ignore pourquoi avec "=" il ne trouve pas le Userid dans la seconde table.

Mammouth du PHP | 1029 Messages

25 mai 2016, 12:56

On peut avoir un extrait de la seconde table ?
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

25 mai 2016, 13:36

On peut avoir un extrait de la seconde table ?
Il s'agit d'une table reprenant nom, prénom et adresse mail d'utilisateurs d'un logiciel; elle est donc confidentielle.
Mais je peux vous donner un extrait bidon : sous quelle forme la voulez-vous ?

Mammouth du PHP | 1029 Messages

25 mai 2016, 13:42

Sql
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

25 mai 2016, 13:44

Comment puis-je vous envoyer une table SQL ?

Mammouth du PHP | 1029 Messages

25 mai 2016, 13:53

Export dans phpmyadmin choisir sql
L'expérience est la somme de toutes nos erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mai 2016, 15:21

Bonjour,

Les méthodes de connexion MySQL vont effectivement être remplacées à court terme. Celles-ci sont dépréciées à partir de php 5.5 et sont supprimées en php 7. Il est donc recommandé dès maintenant de ne plus les utiliser et de préférer utiliser l'extension MySQLi ou la librairie PDO pour exécuter les requêtes sur la base de données :)

Pour résoudre votre problème (et debuger votre code d'une manière général), vous devriez essayer de décomposer le code et ajouter des tests afin de pouvoir identifier plus facilement ce qui ne fonctionne pas :
// stocker la requête dans une variable permet d'afficher la valeur de $sql à l'écran afin de voir la requête générée et pouvoir tester celle-ci directement sur la base de données (phpMyAdmin ou autre) pour vous assurer qu'elle est correcte. 
$sql = "SELECT Prenom, Nom, Email FROM RVRTusers where Userid = " . $Userid . " order by Dates desc"; 

$users = mysqli_query($db, $sql); // exécution de la requête
if (!$users) { // en cas d'erreur de l'exécution de la requête, mysqli_query renvoi FALSE
   // on peut alors connaitre / afficher le code et le message d'erreur
   echo 'ERREUR SQL (' . $mysqli->errno . ') : ' . $mysqli->error; 
}

// si la requête renvoi systématiquement un résultat (par exemple un count()), on peut faire appel à mysqli_fetch_*. Dans le cas contraire il convient de vérifier s'il y a au moins un résultat avec un if (seul le premier enregistrement nous intéresse) ou un while (si plus d'un enregistrement retourné).
if ($user = mysqli_fetch_array($users)) { // un appel à mysqli_fetch_assoc serait plus approprié ici  

  // vous pouvez utiliser un print_r($user) pour vérifier le contenu de l'enregistrement. Faites attention notamment aux majuscules/minuscules dans le nom des indexes du tableau. 
    echo "<tr><td>" . $Userid . "</td><td>" . $user['Prenom'] . "</td><td>" . $user['Nom'] . "</td><td>" . $user['Email'] . "</td></tr>";
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 256 Messages

25 mai 2016, 15:57

Dans mon code original j'utilise effectivement un if (!$users) ... mais je ne l'avais pas mentionné par soucis de simplification.
Il y figure bien aussi dans la version Mysqli et ne donne pas d'erreur.

print_r($user) ne donne rien : il fallait s'y attendre vu le résultat de la ligne suivante (echo "<tr><td>" . $Userid . "</td><td>" . $user['Prenom'] ...)

On est toujours au même point : ceci fonctionne
$users = mysql_query("SELECT * FROM RVRTusers where Userid like '%".$Userid."%' order by Dates desc");
$user = mysql_fetch_array($users);
mais pas cela (pas d'erreur mais le résultat est vide)
$users = mysqli_query($db,"SELECT * FROM RVRTusers where Userid like '%".$Userid."%' order by Dates desc");
$user = mysqli_fetch_array($users);
ceci (avec assoc) non plus
$users = mysqli_query($db,"SELECT * FROM RVRTusers where Userid like '%".$Userid."%'");
$user = mysqli_fetch_assoc($users);

Je rappelle que mon objectif n'est pas de passer de Mysql à Mysqli mais d'accélérer le processus : avec la version actuelle il faut 19 secondes.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mai 2016, 19:43

Pour accélérer le processus tu peux t'appuyer sur un système d'infinite scroll (cf. mon message en bas de la page 1) en ne chargeant qu'un petit nombre d'enregistrements à chaque fois et au fur et à mesure que l'utilisateur scroll vers le bas avec un peu d'ajax :)

Il n'y a pas d'urgence à passer de MySQL à MySQLi ou PDO tant que tu restes sur php 5 ou inférieur. Si tu ne maîtrises pas la version du serveur ou si tu veux monter de version un jour ou que tu veux profiter des évolutions de MySQL (fonctionnalités ou sécurité), il faudra te poser la question de changer d'extension et trouver comment résoudre ce problème :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 1029 Messages

26 mai 2016, 09:54

Ok, laissons tomber ce code MySQL - MySQLI, mes requêtes reste normalement correcte et doit améliorer les perfs !!!

Pouvez-vous confirmer que en Mysql ce que je propose est correcte ?

Code : Tout sélectionner

$db = mysql_connect('server', 'user', 'pw') or die('<img src=... mysql_select_db('dbname',$db) or die('<img src="... $results = mysql_query("select trim(Userid) as 'Userid',DATE_FORMAT(Timestamp , '%d/%m/%Y') as 'date_jour', DATE_FORMAT(Timestamp , '%T') as 'heure_jour',Version,Module from RVRTlog order by Timestamp DESC"); while ($result = mysql_fetch_array($results)) { $Date = $result['date_jour']; $Time = $result['date_heure']; $Userid = $result['Userid']; echo "<tr><td>" . $Date . "</td><td>" . $Time . "</td><td>" . $result['Version'] . "</td><td>" . $result['Module'] . "</td>"; $users = mysql_query("SELECT Prenom,Nom,Email FROM RVRTusers where Userid like '%" . $Userid . "%' order by Dates desc"); $user = mysql_fetch_array($users); echo "<td>" . $Userid . "</td><td>" . $user['Prenom'] . "</td><td>" . $user['Nom'] . "</td><td>" . $user['Email'] . "</td></tr>"; }
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 256 Messages

26 mai 2016, 10:10

Pouvez-vous confirmer que en Mysql ce que je propose est correcte ?
Non : il ne trouve pas le userid dans le 2ème requête.
De plus $Time = $result['date_heure'];
est vide, fatalement puisque date_heure n'est pas défini
DATE_FORMAT(Timestamp , '%T') as 'heure_jour'

Mammouth du PHP | 1029 Messages

26 mai 2016, 10:15

Oui, bon j'ai inversé, il faut écrire

Code : Tout sélectionner

$Time = $result['heure_jour'];
Quel-sont les champs de la table RVRTusers ? est-ce que Userid est nommé de cette façon ?
L'expérience est la somme de toutes nos erreurs.