Page 1 sur 1
PHP MySQL while - for
Posté : 03 nov. 2020, 15:20
par 11inq
Bonjour,
lorsque j'inclue for dans while j'obtiens seulement le premier résultat
comment faire pour obtenir toute la table svp?
Code : Tout sélectionner
$posts = array();
$posts[] = array('status' => 'ok');
$seenbydata = array();
while ($row = $result->fetch_assoc()) {
$msgid = $row['id'];
$msgdate = $row['date'];
$sendby = $row['sendby'];
$sendto = $row['sendto'];
$message = $row['message'];
$sendername = $row['sendername'];
$attach = $row['file'];
$msgdateago = timeago($msgdate);
$seenby = json_decode($row['seenby']);
for ($i = 0; $i < count($seenby); $i++) {
$seenid = $seenby[$i];
$sql = "SELECT CONCAT(users.prenom, ' ', users.nom) AS name FROM users WHERE identifiant = '$seenid'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$seenbydata[] = array('seenby' => array(
'id' => $seenid,
'name' => $row['name']
));
}
}
}
$posts[] = array(
'convdata' => array(
'msgid' => $msgid,
'msgdate' => $msgdate,
'msgdateago' => $msgdateago,
'seen' => $seenbydata,
'sendby' => $sendby,
'sendto' => $sendto,
'message' => $message,
'attach' => $attach,
'sendername' => $sendername
)
);
}
si je retire for j'obtiens la table complete mais bon il me faut le contenu du for aussi
j'encode le tout en json
Re: PHP MySQL while - for
Posté : 03 nov. 2020, 15:24
par or 1
while ($row = $result->fetch_assoc()) {
while ($row = $result->fetch_assoc()) {
ne va pas sans poser un problème.
Re: PHP MySQL while - for
Posté : 03 nov. 2020, 15:36
par 11inq
while ($row = $result->fetch_assoc()) {
while ($row = $result->fetch_assoc()) {
ne va pas sans poser un problème.
Merci de ta réponse
en faisant ceci j'ai une erreur
Code : Tout sélectionner
for ($i = 0; $i < count($seenby); $i++) {
$seenid = $seenby[$i];
$sql2 = "SELECT CONCAT(users.prenom, ' ', users.nom) AS name FROM users WHERE identifiant = '$seenid'";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
while ($row2 = $result2->fetch_assoc()) {
$seenbydata[] = array('seenby' => array(
'id' => $seenid,
'name' => $row2['name']
));
}
}
}
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 15:41
par 11inq
j'ai réglé, le problem vient du coté de la BDD j'avais des valeur non trouvable pour for
Re: PHP MySQL while - for
Posté : 03 nov. 2020, 15:58
par 11inq
effectivement j'ai un problem avec while, j'ai tout en double
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 16:33
par 11inq
J'ai enfin réussi, voici le code pour ceux qui en aurait besoin un jour
Code : Tout sélectionner
<?php
include "config.php";
$sql = "SELECT * FROM messages ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$posts = array();
$posts[] = array('status' => 'ok');
while ($row = $result->fetch_assoc()) {
$seenby = json_decode($row['seenby']);
$msgid = $row['id'];
$seenby2 = array();
foreach($seenby as $key => $value) {
$sql = "SELECT CONCAT(users.prenom, ' ', users.nom) AS name FROM users WHERE identifiant = '$value'";
$result2 = $conn->query($sql);
if ($result2->num_rows > 0) {
while ($row2 = $result2->fetch_assoc()) {
$seenby2[] = array('user' => array(
'id' => $value,
'name' => $row2['name']
));
}
}
}
$posts[] = array(
'msgid' => $msgid,
'seenby' => $seenby2
);
}
}
header('Content-Type: application/json');
echo json_encode($posts, JSON_PRETTY_PRINT);
$conn->close();
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 16:38
par or 1
pourquoi les données présentes dans le json ne sont pas dans la base de données ?
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 18:15
par 11inq
pourquoi les données présentes dans le json ne sont pas dans la base de données ?
En fait c'est une partie du code d'une messagerie que j'essaye de créer
dans la base de donnés il y a une colonne json ou je stock les id des utilisateurs qui ont vu le message
Ensuite avec php je vais chercher dans la BDD le nom + prénom pour chaque id utilisateur du json.
Toujours en développement mais voici le code php pour voir les messages d'une conversation
Code : Tout sélectionner
<?php
include "config.php";
function timeago($date)
{
$timestamp = strtotime($date);
$strTime = array("secondes", "minutes", "heurs", "jours", "mois", "an");
$length = array("60", "60", "24", "30", "12", "10");
$currentTime = time();
if ($currentTime >= $timestamp) {
$diff = time() - $timestamp;
for ($i = 0; $diff >= $length[$i] && $i < count($length) - 1; $i++) {
$diff = $diff / $length[$i];
}
$diff = round($diff);
return "Il y'a $diff $strTime[$i]";
}
}
session_start();
$userid = $_SESSION['identifiant'];
$conversation = $_POST['conversation'];
$sql = "SELECT messages.id, messages.date, sendby, message, sendto, seenby, CONCAT( users.prenom, ' ', users.nom) AS sendername, file FROM messages
LEFT JOIN users ON sendby = users.identifiant
LEFT JOIN (SELECT msgid, file FROM messages_attach WHERE convid = '$conversation') AS attach ON messages.id = attach.msgid
WHERE conversation = '$conversation' AND NOT JSON_CONTAINS(deletedfor, '\"$userid\"') ORDER BY date ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$posts = array();
$posts[] = array('status' => 'ok');
while ($row = $result->fetch_assoc()) {
$msgid = $row['id'];
$msgdate = $row['date'];
$sendby = $row['sendby'];
$sendto = $row['sendto'];
$message = $row['message'];
$sendername = $row['sendername'];
$attach = $row['file'];
$msgdateago = timeago($msgdate);
$seenby = json_decode($row['seenby']);
$seenby2 = array();
foreach ($seenby as $key => $value) {
$sql = "SELECT CONCAT(users.prenom, ' ', users.nom) AS name FROM users WHERE identifiant = '$value'";
$result2 = $conn->query($sql);
if ($result2->num_rows > 0) {
while ($row2 = $result2->fetch_assoc()) {
$seenby2[] = array('user' => array(
'id' => $value,
'name' => $row2['name']
));
}
}
}
$posts[] = array(
'msgdata' => array(
'msgid' => $msgid,
'msgdate' => $msgdate,
'msgdateago' => $msgdateago,
'seen' => $seenby2,
'sendby' => $sendby,
'sendto' => $sendto,
'message' => $message,
'attach' => $attach,
'sendername' => $sendername
)
);
}
}
header('Content-Type: application/json');
echo json_encode($posts, JSON_PRETTY_PRINT);
$conn->close();
sil y a possibilité de faire ce que je veux faire directement en mysql je suis preneur,
c'est à dire faire JOIN pour trouver les noms prenom en utilisant la colonne json pour les id
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 18:30
par or 1
avec une table de 2 champs, idmessage et iduser, pas besoin de json. et il sera possible de faire une seule requête pour tout avoir.
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 19:55
par 11inq
avec une table de 2 champs, idmessage et iduser, pas besoin de json. et il sera possible de faire une seule requête pour tout avoir.
c'est ce que j'avais fait au départ mais finalement j'ai opté pour du json pour ne pas avoir une base de données trop lourde. Je ne sais pas si c'est mieux
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 20:40
par or 1
clairement pas. faire une seule requete sql par rapport à une requete puis une requete dans un while, cela n'a rien à voir en terme de charge du serveur.
Re: [RESOLU] PHP MySQL while - for
Posté : 03 nov. 2020, 21:15
par 11inq
clairement pas. faire une seule requete sql par rapport à une requete puis une requete dans un while, cela n'a rien à voir en terme de charge du serveur.
d'accord merci
et pas possible de garder la colonne json avec les id et faire du JOIN pour aller chercher les noms + prénoms associé en requête SQL?