Ontvangen en verzender
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!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?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 ?>">« 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 »</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>';
}[/code]
Gewijzigd op 12/07/2024 10:58:56 door Patric hoog
Quote:
Misschien de tabelnamen toch gewoon uitschrijven ipv afkorten, dan had je dit eerder gezien ;-)Het had mt.from_user moeten zijn in plaats van m.form_user.