rare bug...
Simon - 08/09/2005 20:31
PHP expert
ik heb een zeer rare bug
ik werk met een forum waarbij je moet aanmelden bij bepaalde clubs voordat je kan posten
<?
$gAbo2 = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
while($Abo = mysql_fetch_assoc($gAbo2)) {
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id != '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
}
while($tav = mysql_fetch_assoc($gTav2)) {
?>
een stukje waar het fout loopt is hier:
Bij geabonneerde tavernes loopt alles mooi en zoals ik het wil,
maar als je niet geabonneerd bent treed er een rare fout op, het volgende:
er zijn 16 clubs, ik ben bij 15 geabonneerd...
maar ipv van dat er 1 club staat bij niet geabonneerd staan er 15, de verklaring is dat er slechts 1 taverne eruit wordt gehaald hier:
<?
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id != '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
?>
de andere 15 worden er niet uigefilterd, hoe komt dit?:(
10 antwoorden
Gesponsorde links
Steven - 08/09/2005 20:36 (laatste wijziging 08/09/2005 20:37)
HTML interesse
Heel makkelijk, je verandert: niet geabonerd in geaboneerde clubs
dus ipv:
15 niet geabonneerde clubs,
krijg je dit:
15 geaboneerde clubs ;)
[edit]
Ik weet niet hoe die bug komt, maar dit lijkt mij makkelijker ;)
Simon - 08/09/2005 20:47 (laatste wijziging 10/09/2005 10:03)
PHP expert
dat is dus echt onzin
ik zou graag mijn volledig script hier posten, maar is 200 regels, mag dat?
als het niet mag dan neem je mijn post maar weg:
ik heb de foute code gepost :s
ik heb de foute code gepost : s
ik probeer het nog beter uit te leggen:
bijv:
er zijn 10 clubs.
ik ben geabonneerd bij 9.
er staat dus bij geabonneerde clubs (9) en de juiste clubs,
maar bij nietgeaboneerd staat (1) maar er komen 9 clubs te staan, wat dus niet klopt.
hoe dit komt, als je kijkt naar het stukje in mijn eerste post zie je:
WHERE t_id != ...
dus: er wordt door deze query maar 1 club eruit gehaald, namelijk de eerste club in het rijtje.
nochtans staat deze query in een while loop, maar toch schijnt deze niet te werken.
hoe komt dit? hoe kan ik het verhelpen?
niemand?
Simon - 09/09/2005 18:02 (laatste wijziging 09/09/2005 19:35)
PHP expert
neej, werkt niet
nog iemand een idee?
echt niemand? dat kan toch nie?
Rens - 09/09/2005 20:37
Crew algemeen
Over dit stukje:
<?PHP
$gAbo2 = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
while($Abo = mysql_fetch_assoc($gAbo2)) {
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id != '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
}
while($tav = mysql_fetch_assoc($gTav2)) {
?>
Verander eens in dit:
<?PHP
$gAbo2 = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
while($Abo = mysql_fetch_assoc($gAbo2))
{
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id != '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
while($tav = mysql_fetch_assoc($gTav2))
{
// gegevens weergeven
}
}
?>
<?PHP
{
{
// gegevens weergeven
}
}
?>
(de verandering van inspringen e.d. is niet nodig, heb ik alleen ff gedaan zodat het voor mij iets makkelijker leesbaar is, en ik je dus makkelijker kan helpen...)
Rens - 09/09/2005 22:16 (laatste wijziging 09/09/2005 22:25)
Crew algemeen
Owjah, klopt, foutje...
Ik zie het nu staan.
In de 2e query staat dit: !=
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id != '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
Die moet je ff veranderen in: =
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id = '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
edit; Nog iets, je zou misschien ook het aantal tavernes kunnen tellen, en dan:
$iAantalNietGeaboneerd = $iAantalTavernes-$iAantalGeaboneerd;
$iAantalNietGeaboneerd = $iAantalTavernes - $iAantalGeaboneerd ;
Simon - 10/09/2005 10:05
PHP expert
het spijt me maar ik was zo dom om de foute code te posten
dit is de juiste, nu zal je ook zien hoe het in elkaar zit Rensjuh
<?php
ob_start();
require("config.php"); // connectie met database maken en database selecteren
require("functies.php");
session_start();
?>
<html>
<head>
<link rel="stylesheet" href="styletav.css" type="text/css">
<title>Alle tavernes</title>
</head>
<body bgcolor="#000000">
<?php
if(!isset($_SESSION['suser']))
{ //dus als er niemand is ingelogd
?>
<div class="okbox">
<div class="oktitle">FOUT</div>
<div class="noktext">U dient ingelogd te zijn om dit te bekijken.</div>
</div>
<?php
}
else
{
$userid = mysql_query("SELECT * FROM users WHERE username = '".$_SESSION['suser']."'") or die(mysql_error());
$id = mysql_fetch_assoc($userid);
$user = $id['id'];
?>
<table width="70%" border="0" class="sh" cellpadding="0" cellspacing="0">
<tr bgcolor="#333399">
<th width="35%" nowrap><b> Naam taverne</b></th>
<th width="17%" nowrap><b> Oprichter</b></th>
<th width="4%" nowrap><b><center>#L</center></b></th>
<th width="4%" nowrap><b> Posts</b></th>
<th width="10%" nowrap><b> </b></th>
</tr>
<?php
$gAbo = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
$result = mysql_num_rows($gAbo);
if($result >= 1) {
echo " Geabonneerde tavernes (".$result.")<br><br>";
while($abo = mysql_fetch_assoc($gAbo)) {
$gTav = mysql_query("SELECT * FROM tavernes WHERE t_id = '".$abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
while($tav = mysql_fetch_assoc($gTav)) {
?>
<tr bgcolor="#444444">
<td width="35%"><b> <a href="tavernes.php?tavid=<?= $tav['t_id']; ?>" target="_blank"><font color="#FFFF00"><?= $tav['t_naam']; ?></font></a></b></td>
<td width="17%"> <?= afkorten($tav['t_eigenaar'], 15); ?></td>
<td width="4%"><center>
<?php
$gLid = mysql_query("SELECT * FROM abonnementen WHERE clubid='".$tav['t_id']."'") or die(mysql_error());
echo mysql_num_rows($gLid);
?>
</center></td>
<td width="4%">
<?php
$gPost = mysql_query("SELECT * FROM t_topics WHERE taverne_id='".$tav['t_id']."'") or die(mysql_error());
while($topic = mysql_fetch_assoc($gPost)) {
$gPost2 = mysql_query("SELECT * FROM t_replys WHERE topic_id = '".$topic['id']."'") or die(mysql_error());
}
$gMax = mysql_query("SELECT * FROM tavernes WHERE t_id = '".$tav['t_id']."'") or die(mysql_error());
$tav = mysql_fetch_assoc($gMax);
echo mysql_num_rows($gPost) + mysql_num_rows($gPost2) ."/".$tav['t_maxposts'];
?>
</td>
<td width="10%"> <a href="opzeggen.php?tavid=<?= $tav['t_id']; ?>"><u>opzeggen</u></a></td>
</tr>
<?
}
}
}
else {
echo " Geabonneerde tavernes (0)<br><br>";
?>
<tr bgcolor="#444444">
<td colspan="5"> Geen abonnementen</td>
</tr>
<?php
}
?>
</table>
<br>
<table width="70%" class="sh" border="0" cellpadding="0" cellspacing="0">
<tr bgcolor="#333399">
<th width="35%" nowrap><b> Naam taverne</b></th>
<th width="17%" nowrap><b> Oprichter</b></th>
<th width="4%" nowrap><b><center>#L</center></b></th>
<th width="4%" nowrap><b> Posts</b></th>
<th width="10%" nowrap><b> </b></th>
</tr>
<?php
$gAbo = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
$gTavs = mysql_query("SELECT * FROM tavernes ORDER BY t_naam ASC") or die(mysql_error());
$allAbo = mysql_num_rows($gAbo);
$alltavs = mysql_num_rows($gTavs);
$result = $alltavs - $allAbo;
if($result >= 1) {
echo " Niet-geabonneerde tavernes (".$result.")<br><br>";
$gAbo = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
$result3 = mysql_num_rows($gAbo);
if($result3 == 0) {
$gTav1 = mysql_query("SELECT * FROM tavernes ORDER BY t_naam ASC") or die(mysql_error());
while($tav = mysql_fetch_assoc($gTav1)) {
?>
<tr bgcolor="#444444">
<td width="35%"><b> <font color="#FFFF00"><?= $tav['t_naam']; ?></font></b></td>
<td width="17%"> <?= afkorten($tav['t_eigenaar'], 15); ?></td>
<td width="4%"><center>
<?php
$gLid = mysql_query("SELECT * FROM abonnementen WHERE clubid='".$tav['t_id']."'") or die(mysql_error());
echo mysql_num_rows($gLid);
?>
</center></td>
<td width="4%">
<?php
$gPost = mysql_query("SELECT * FROM t_topics WHERE taverne_id='".$tav['t_id']."'") or die(mysql_error());
while($topic = mysql_fetch_assoc($gPost)) {
$blaat = $topic['id'];
}
$gPost2 = mysql_query("SELECT * FROM t_replys WHERE topic_id = '".$blaat."'") or die(mysql_error());
$gMax = mysql_query("SELECT * FROM tavernes WHERE t_id = '".$tav['t_id']."'") or die(mysql_error());
$tav = mysql_fetch_assoc($gMax);
echo mysql_num_rows($gPost) + mysql_num_rows($gPost2) ."/".$tav['t_maxposts'];
?>
</td>
<td width="10%"> <a href="abonneren.php?tavid=<?= $tav['t_id']; ?>"><u>abonneren</u></a></td>
</tr>
<?php
}
}
else {
$gAbo2 = mysql_query("SELECT * FROM abonnementen WHERE userid='".$user."'") or die(mysql_error());
while($Abo = mysql_fetch_assoc($gAbo2))
{
$gTav2 = mysql_query("SELECT * FROM tavernes WHERE t_id != '".$Abo['clubid']."' ORDER BY t_naam ASC") or die(mysql_error());
}
while($tav = mysql_fetch_assoc($gTav2))
{
?>
<tr bgcolor="#444444">
<td width="35%"><b> <font color="#FFFF00"><?= $tav['t_naam']; ?></font></b></td>
<td width="17%"> <?= afkorten($tav['t_eigenaar'], 15); ?></td>
<td width="4%"><center>
<?php
$gLid = mysql_query("SELECT * FROM abonnementen WHERE clubid='".$tav['t_id']."'") or die(mysql_error());
echo mysql_num_rows($gLid);
?>
</center></td>
<td width="4%">
<?php
$gPost = mysql_query("SELECT * FROM t_topics WHERE taverne_id='".$tav['t_id']."'") or die(mysql_error());
while($topic = mysql_fetch_assoc($gPost)) {
$blaat = $topic['id'];
}
$gPost2 = mysql_query("SELECT * FROM t_replys WHERE topic_id = '".$blaat."'") or die(mysql_error());
$gMax = mysql_query("SELECT * FROM tavernes WHERE t_id = '".$tav['t_id']."'") or die(mysql_error());
$tav = mysql_fetch_assoc($gMax);
echo mysql_num_rows($gPost) + mysql_num_rows($gPost2) ."/".$tav['t_maxposts'];
?>
</td>
<td width="10%"> <a href="abonneren.php?tavid=<?= $tav['t_id']; ?>"><u>abonneren</u></a></td>
</tr>
<?php
}
}
}
else {
echo " Niet-geabonneerde tavernes (".$result.")<br><br>";
?>
<tr bgcolor="#444444">
<td colspan="5"> U bent reeds op alle tavernes geabonneerd.</td>
</tr>
<?php
}
?>
</table>
<br><br>
<?php
}
?>
</body>
</html>
<?php
require ( "config.php" ) ; // connectie met database maken en database selecteren
require ( "functies.php" ) ;
?>
<html>
<head>
<link rel="stylesheet" href="styletav.css" type="text/css">
<title>Alle tavernes</title>
</head>
<body bgcolor="#000000">
<?php
if ( ! isset ( $_SESSION [ 'suser' ] ) ) { //dus als er niemand is ingelogd
?>
<div class="okbox">
<div class="oktitle">FOUT</div>
<div class="noktext">U dient ingelogd te zijn om dit te bekijken.</div>
</div>
<?php
}
else
{
$user = $id [ 'id' ] ;
?>
<table width="70%" border="0" class="sh" cellpadding="0" cellspacing="0">
<tr bgcolor="#333399">
<th width="35%" nowrap><b> Naam taverne</b></th>
<th width="17%" nowrap><b> Oprichter</b></th>
<th width="4%" nowrap><b><center>#L</center></b></th>
<th width="4%" nowrap><b> Posts</b></th>
<th width="10%" nowrap><b> </b></th>
</tr>
<?php
if ( $result >= 1 ) {
echo " Geabonneerde tavernes (" . $result . ")<br><br>" ;
?>
<tr bgcolor="#444444">
<td width="35%"><b> <a href="tavernes.php?tavid=<?= $tav [ 't_id' ] ; ?> " target="_blank"><font color="#FFFF00"><?= $tav [ 't_naam' ] ; ?> </font></a></b></td>
<td width="17%"> <?= afkorten( $tav [ 't_eigenaar' ] , 15 ) ; ?> </td>
<td width="4%"><center>
<?php
?>
</center></td>
<td width="4%">
<?php
}
?>
</td>
<td width="10%"> <a href="opzeggen.php?tavid=<?= $tav [ 't_id' ] ; ?> "><u>opzeggen</u></a></td>
</tr>
<?
}
}
}
else {
echo " Geabonneerde tavernes (0)<br><br>" ; ?>
<tr bgcolor="#444444">
<td colspan="5"> Geen abonnementen</td>
</tr>
<?php
}
?>
</table>
<br>
<table width="70%" class="sh" border="0" cellpadding="0" cellspacing="0">
<tr bgcolor="#333399">
<th width="35%" nowrap><b> Naam taverne</b></th>
<th width="17%" nowrap><b> Oprichter</b></th>
<th width="4%" nowrap><b><center>#L</center></b></th>
<th width="4%" nowrap><b> Posts</b></th>
<th width="10%" nowrap><b> </b></th>
</tr>
<?php
$result = $alltavs - $allAbo ;
if ( $result >= 1 ) {
echo " Niet-geabonneerde tavernes (" . $result . ")<br><br>" ; if ( $result3 == 0 ) {
?>
<tr bgcolor="#444444">
<td width="35%"><b> <font color="#FFFF00"><?= $tav [ 't_naam' ] ; ?> </font></b></td>
<td width="17%"> <?= afkorten( $tav [ 't_eigenaar' ] , 15 ) ; ?> </td>
<td width="4%"><center>
<?php
?>
</center></td>
<td width="4%">
<?php
$blaat = $topic [ 'id' ] ;
}
?>
</td>
<td width="10%"> <a href="abonneren.php?tavid=<?= $tav [ 't_id' ] ; ?> "><u>abonneren</u></a></td>
</tr>
<?php
}
}
else {
{
}
{
?>
<tr bgcolor="#444444">
<td width="35%"><b> <font color="#FFFF00"><?= $tav [ 't_naam' ] ; ?> </font></b></td>
<td width="17%"> <?= afkorten( $tav [ 't_eigenaar' ] , 15 ) ; ?> </td>
<td width="4%"><center>
<?php
?>
</center></td>
<td width="4%">
<?php
$blaat = $topic [ 'id' ] ;
}
?>
</td>
<td width="10%"> <a href="abonneren.php?tavid=<?= $tav [ 't_id' ] ; ?> "><u>abonneren</u></a></td>
</tr>
<?php
}
}
}
else {
echo " Niet-geabonneerde tavernes (" . $result . ")<br><br>" ; ?>
<tr bgcolor="#444444">
<td colspan="5"> U bent reeds op alle tavernes geabonneerd.</td>
</tr>
<?php
}
?>
</table>
<br><br>
<?php
}
?>
</body>
</html>
dit is beter, nu zie je bij niet geabonneerd dezeflde query als bovenaan, en daar loopt het mis
ikkedikke - 10/09/2005 11:06
PHP expert
je overschrijft iedere keer in die eerste regel het id, in de 2e query zal die dus alleen nog het id van de laatste vorige query onthouden hebben...
Simon - 10/09/2005 13:40 (laatste wijziging 10/09/2005 15:23)
PHP expert
en hoe valt dit op te lossen?
iemand?
Gesponsorde links
Dit onderwerp is gesloten .