Zelf opgelost!

Voor degenen die in de toekomst hetzelfde probleem tegenkomen: het probleem was dat het script naar de verkeerde tabel in de database keek om te bepalen wie het laatst een bericht stuurde. Het had mt.from_user moeten zijn in plaats van m.form_user.




Hallo iedereen,

Ik ben bezig met een chat script voor mijn website en ik loop tegen het volgende probleem aan. Wanneer iemand een bericht ontvangt, is de tekst dun en degene die het bericht verstuurde heeft dikke tekst. Dit zou juist andersom moeten zijn, maar wanneer ik het probeer om te draaien, doet het script precies het tegenovergestelde.


Heeft iemand een idee wat er fout gaat?

mt.read_from == Verzender heeft het gelezen
mt.read_to == Ontvanger heeft het gelezen

Alvast bedankt!


  
<?php
$messages_per_page = 10;
$page = isset($_GET['paged']) ? (int)$_GET['paged'] : 1;
if ($page < 1) {
    $page = 1;
}
$offset = ($page - 1) * $messages_per_page;

$query = "
SELECT 
    m.id, 
    m.title, 
    m.from_user, 
    m.to_user, 
    m.datum,
    m.message_id, 
    mt.text, 
    mt.response_placed, 
    mt.read_from, 
    mt.read_to, 
    mem.username AS last_user
FROM 
    messages m
JOIN 
    (SELECT 
         message_id, 
         MAX(response_placed) as latest_response 
     FROM 
         message_text 
     GROUP BY 
         message_id) latest_mt 
    ON m.message_id = latest_mt.message_id
JOIN 
    message_text mt 
    ON m.message_id = mt.message_id 
    AND mt.response_placed = latest_mt.latest_response
JOIN 
    members mem 
    ON mem.id = mt.from_user
WHERE 
    (m.from_user = ? AND mt.delete_from = 0) OR 
    (m.to_user = ? AND mt.delete_to = 0)
ORDER BY 
    mt.response_placed DESC
LIMIT ? OFFSET ?";

$stmt = $dbcreat->prepare($query);
$stmt->bind_param('iiii', $user_id, $user_id, $messages_per_page, $offset);
$stmt->execute();
$result = $stmt->get_result();

$count_query = "
    SELECT 
        COUNT(DISTINCT m.message_id) as total
    FROM 
        messages m
    JOIN 
        message_text mt ON m.message_id = mt.message_id
    WHERE 
        (m.from_user = ? AND mt.delete_from = 0) OR 
        (m.to_user = ? AND mt.delete_to = 0)";

$count_stmt = $dbcreat->prepare($count_query);
$count_stmt->bind_param('ii', $user_id, $user_id);
$count_stmt->execute();
$count_result = $count_stmt->get_result();
$total_messages = $count_result->fetch_assoc()['total'];
$total_pages = ceil($total_messages / $messages_per_page);

if (!isset($total_pages)) {
    $total_pages = 1;
}
?>

<div class="compact-content-box">
    <?php if ($result->num_rows > 0): ?>
        <ul>
            <?php while ($row = $result->fetch_assoc()): ?>
                <?php
 if (($row['from_user'] == $user_id && $row['read_from'] == 0) || ($row['to_user'] == $user_id && $row['read_to'] == 0)) {
                    $is_bold = true;
                }else{
                    $is_bold = false;

                }
                ?>
                <li>
                    <div>
                        <a href="?page=view_message&message_id=<?php echo htmlspecialchars($row['message_id']); ?>" style="<?= $is_bold ? 'font-weight: bold;' : '' ?>">
                            <?php echo trim(htmlspecialchars($row['title'])); ?>
                        </a>
                        <div class="note-stats">
                            Last response: <a href="?page=profile&id=<?php echo trim(htmlspecialchars($row['last_user'])); ?>"><?php echo htmlspecialchars($row['last_user']) ?></a> - at: <?php echo htmlspecialchars($row['response_placed']) ?>
                        </div>
                    </div>
                    <div>
                        <form method="post" style="display:inline;">
                            <input type="hidden" name="message_id" value="<?= $row['message_id'] ?>">
                            <button type="submit" name="delete_message">Delete</button>
                        </form>
                    </div>
                </li>
            <?php endwhile; ?>
        </ul>
    </div>

    <div class="content-box">
        <!-- Pagination Links -->
        <div class="pagination">
            <?php if ($page > 1): ?>
                <a href="?page=all_messages&paged=<?= $page - 1 ?>">&laquo; Previous</a>
            <?php endif; ?>

            <?php for ($i = 1; $i <= $total_pages; $i++): ?>
                <a href="?page=all_messages&paged=<?= $i ?>" <?= $i == $page ? 'class="active"' : '' ?>><?= $i ?></a>
            <?php endfor; ?>

            <?php if ($page < $total_pages): ?>
                <a href="?page=all_messages&paged=<?= $page + 1 ?>">Next &raquo;</a>
            <?php endif; ?>
        </div>
    </div>
    <?php else: ?>
        <p>No messages found, <a href="?page=new_message">click here to create a new message</a>.</p>
    <?php endif; ?>
</div>
<?php
} else {
    echo '<p class="compact"><strong>To view this page you have to login first.</strong></p>';
}
Het had mt.from_user moeten zijn in plaats van m.form_user.
Misschien de tabelnamen toch gewoon uitschrijven ipv afkorten, dan had je dit eerder gezien ;-)

Reageren