par
11inq » 03 nov. 2020, 18:15
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
[quote="or 1" post_id=464765 time=1604414319 user_id=23847]
pourquoi les données présentes dans le json ne sont pas dans la base de données ?
[/quote]
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]<?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();
[/code]
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