Preg_match probleem.
Ik ben net tegen en fout opgelopen waar ik niet uit kom.
Ik heb dus deze code:
Quote:
if(preg_match("/_".$cur_user."/", $h)){
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#999">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}else{
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#089380">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#999">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}else{
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#089380">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}
En in mijn tabel is het tabel 'bekeken' leeg.
$cur_user is dus in mijn geval _1.
Maar hij laat die else niet zien.
2. Voor simpele matches is de pReg library niet gemaakt, gebruik dan iets als strpos.
3. Je bent je bewust dat als $cur_user _1 bevat hij probeert __1 te matchen?
4. Om je vraag te kunnen beantwoorden hebben we nodig wat er in $h zit.
5. Wat heb je al gedebugged? Heb je bijv. al gekeken of de variabelen wel de waarde bevatten die je verwacht?
6. We hebben hier op het forum een automatische highlighter als je de code begint met <?php en eindigt met ?>
$r['bekeken']; =
_1
Probleem is dat als ik bijvoorbeeld een topic bekijk, deze bij iedereen grijs wordt, i.p.v. alleen bij mij.
Waarschijnlijk kun je ook zoiets doen:
Maar als dat niet werkt moet je even mijn 1e vraag beantwoorden.
De waarde $cur_user is een $_SESSION['id'] van de gebruiker.
De waarde $h is in de database de kolom 'bekeken' in de tabel forum_topics. Deze bevat in een array van een topic dus de id's van gebruikers die het hebben gelezen.
Het wordt per id zo aangeduid: _(nummer id) en zo zou die de juiste id er uit moeten halen.
Alles wordt daardoor grijs, ook al zijn er geen id's bekend.
eens de onderstaande code en laat dan even weten wat er op het scherm te zien is:
Code (php)
Gewijzigd op 02/05/2013 00:38:19 door Ozzie PHP
Dan wel met de sluitende quote op regel 4 uiteraard...
@Dylan: zoals je ziet, zit er dus geen informatie in. Volgens jou was $h een array met IDs. Volgens bovenstaande informatie is het een lege string. Ook $cur_user bevat niet de juiste waarde.
string(4) "_2_1"
$cur_user:
NULL
Jij verwachte dat $h een array bevatte, maar het bevat "" (niks dus en ook nog een string en geen array)
Jij verwachte ook dat $cur_user de waarde 1 bevattw, maar het bevat NULL (meer dan niks dus ;-) )
Gewijzigd op 02/05/2013 00:47:18 door Wouter J
Toevoeging op 02/05/2013 00:43:29:
UPDATE:
door toepassing van global $cur_user; heb ik nu dit:
$h:
string(4) "_2_1"
$cur_user:
string(1) "1"
Als je die $cur_user werkend krijgt kun je $h exploden op een underscore en alsnog de in_array controle toepassen. Maar je datamodel klopt niet veel van op deze manier.
Toevoeging op 02/05/2013 00:45:48:
"door toepassing van global $cur_user; heb ik nu dit:"
en klopt dat? Log eens in als een andere user. Krijg je dan een ander getal?
$h:
string(4) "_2_1"
$cur_user:
bool(false)
Ingelogd ander gebruiker:
$h:
string(4) "_2_1"
$cur_user:
string(1) "2"
Dit samen met het feit dat global vars echt code smell is geeft mij de conclusie dat er in je script iets goed fout gaat met je database en met je sessions. Wat linkjes waarvan ik denk dat het verstandig is om ze door te lezen:
- http://phptuts.nl/view/39/
- http://phptuts.nl/view/41/
- http://wouterj.github.io/sql-boilerplate
- http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
Klopt het trouwens dat _2_1 betekend dat de ids 1 en 2 het topic hebben gelezen? Als dat zo is zou ik zeker mijn laatste link eens goed doorlezen. Dan is er namelijk iets goed fout met je database ontwerp.
Gewijzigd op 02/05/2013 00:51:55 door Wouter J
Dit heb ik bewust gedaan.
Probeer dit eens:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$h_array = explode('_', $h);
if($cur_user !== false && in_array($cur_user, $h_array)){
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#999">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}else{
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#089380">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}
?>
$h_array = explode('_', $h);
if($cur_user !== false && in_array($cur_user, $h_array)){
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#999">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}else{
echo '<li><a href="/forum/topic/'.$topic_id.'/'.trans_name($topic_name).'/"><font color="#089380">[Nieuws] </font><div class="left marginright">'.sAvatar($topic_userid,30).'</div>'.$topic_name.' '.$vip_icon.'<br /><span class="smalltext">Door '.$topic_user.'</span></a></li>';
}
?>