Hellowww again!


Ik was weer lekker bezig met PHP :D en stuiterde op een probleem met mijn notificatie functie...

Probleem 1. Ik kan het maar naar 1 persoon sturen, maar ik wil dat het naar 1 iemand kan worden verzonden, 2, 3, 4, etc. of iedereen. Maar als meerdere mensen het ontvangen, moeten hun per persoon, per hun sessie seen op 1 op één of andere manier zetten zodat hun geen nieuwe meldingen meer zien, maar de gene die het nog niet hebben gelezen wel

Probleem 2. Ik kom er maar niet uit, ook niet met google, hoe ik kan zorgen dat ik met deze code;

<?php
											$data = $conn->query("SELECT `notification_name`, `notification_message` FROM `notifications` WHERE `userId_recieve`='$userId' AND `seen`='0'");
											foreach ($data as $key => $value) {
											    foreach ($value as $key2 => $value2) {
												   echo "<li><a><i class='".$value2."'></i>".$value2."</a></li>";
											    }
											}
											?>										}

DATABASE OPSTELLING
	
id
notification_name
notification_message
userId_recieve
seen

kan zorgen dat value2 (de eerste) uit de db wordt gehaald met notification_name, en value2 de 2e dat die wordt opgehaald als notifictaion_message
$data is geen array. Je vergeet te fetchen ;-)
Ps: Ken je var_dump() al? Ideaal voor debuggen.
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\paneel\paneel_index.php on line 139 komt er te staan als ik het fetch voor foreach ($data as $key => $value) { en als ik het daarna doe geeft die niks aan..
Laat je relevante code eens zien?
En wat zegt var_dump() op je variabele?
en vardump gaat heel me pagina door buggen

[size=xsmall]Toevoeging op 26/12/2016 16:40:02:[/size]

dan zie ik alleen menubalk en verder niks

[size=xsmall]Toevoeging op 26/12/2016 16:40:33:[/size]


							<li class="dropdown notifications-menu">
								<a href="#" class="dropdown-toggle" data-toggle="dropdown">
									<i class="fa fa-bell-o"></i>
									<span class="label label-warning"><?php 
										$userId = $_SESSION['id'];
										$result = $conn->query("SELECT COUNT(*) FROM `notifications` WHERE `userId_recieve`='$userId' AND `seen`='0'");
										$row = $result->fetch_row();
										echo $row[0]?></span>
								</a>
								<ul class="dropdown-menu">
									<li class="header">Je hebt 
										<?php echo $row[0]?> meldingen</li>
									<li>
										<ul class="menu">
											<?php
											$data = $conn->query("SELECT `notification_name`, `notification_message` FROM `notifications` WHERE `userId_recieve`='$userId' AND `seen`='0'");
											$data = $data->fetch_array();
											foreach ($data as $key => $value) {
											    foreach ($value as $key2 => $value2) {
												   echo "<li><a><i class='".$value2['notification_name']."'></i>".$value2['notification_message']."</a></li>";
											    }
											}
											?>
										</ul>
									</li>
									<li class="footer"><a href="#">Zie alle meldingen</a></li>
								</ul>
							</li>
Je moet 100% zeker zijn dat je een ARRAY gebruikt in je foreach lus.
Wanneer je dat niet zeker weet moet je dat voor de foreach lus checken.
$data kan de waarde FALSE hebben als je query mislukt.
<?php
if(is_array($data))
foreach($data as $key => $value) {
// ...
?>
Daarnaast moet je een fout op het scherm zetten als je query mislukt zodat je niet telkens in het duister hoeft te tasten. Hetzelfde geldt als je verbinding maakt met de mysql server.

Als ik if(is_array($data)) erin plak geeft die geen errors, maar ook geen resultaten


[size=xsmall]Toevoeging op 26/12/2016 16:45:54:[/size]

query werkt gewoon
Een site bugt niet echt van var_dump, gezien het voor ontwikkeling en testdoeleinden gebruikt wordt.

Je ziet dan wat de inhoud van een variabele is. Maar hoezo overschrijf je $data?
$result voor een query en $data voor een fetch vind ik logischere namen.


[size=xsmall]Toevoeging op 26/12/2016 16:50:41:[/size]

bij
echo "<li><a><i class='".$value2."'></i>".$value2."</a></li>";
doet hij het goed, maar hij vult class='".$value2."' niet bij class= in dus eigelijk pakt die het die 2 apart en maakt er een nieuwe <li> van..

[size=xsmall]Toevoeging op 26/12/2016 16:58:52:[/size]

ZOuden jullie (als jullie tijd hebben) iets voor mij willen maken wat werkt en dat ik het daar van kan leren.. Ik ben niet zo goed in uitleggen :P
Ik kan mij niet indenken dat je de tweede foreach nodig hebt.
Wat zegt var_dump() over $value na de eerste foreach?
array(4) { [0]=> string(8) "Promotie" ["notification_name"]=> string(8) "Promotie" [1]=> string(29) "U hebt een promotie ontvangen" ["notification_message"]=> string(29) "U hebt een promotie ontvangen" } zegt de var_dump

[size=xsmall]Toevoeging op 27/12/2016 10:52:53:[/size]

... Voor de meerdere users die een melding kunnen ontvangen, als ik ze allemaal in de database zet met user1, user2, user3, etc. hoe kan ik dan kijken of jouw userid daar tussen zit?

Reageren