probleem met loop in loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ron -

Ron -

02/01/2007 17:08:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<? php
while($row = mysql_fetch_assoc($query))
{

   $id = $row['id'];
   while($on_off = mysql_fetch_assoc($on_off_select))
   {

      if($id == $on_off['id'])
      {

         $image = "images/design/online.gif";
      }

      else
      {
         $image = "images/design/offline.gif";
      }
   }

?>

dit lukt niet, hoe kan dat wel? nu doet hij die vergelijking namelijk maar 1 keer, want alle plaatjes zijn hetzelfde, terwijl dit niet zo moet zijn
Gewijzigd op 01/01/1970 01:00:00 door Ron -
 
PHP hulp

PHP hulp

19/11/2024 15:48:38
 
Jan Koehoorn

Jan Koehoorn

02/01/2007 17:11:00
Quote Anchor link
Wat wil je precies bereiken?
 
Ron -

Ron -

02/01/2007 17:15:00
Quote Anchor link
nouw, deze code zit in mijn ledenlijst verwerkt, hij print alle leden uit de database (tabel leden), het is de bedoeling dat hij dan elk lid apart doet vergelijken met een andere tabel (online) elke keer als een lid actief is wordt dit hierin opgeslagen, dus als dat lid in de database online voorkomt, moet het plaat online.gif zijn en anders offline.gif
Gewijzigd op 01/01/1970 01:00:00 door Ron -
 
Jan Koehoorn

Jan Koehoorn

02/01/2007 17:17:00
Quote Anchor link
Ik denk dat je bedoelt dat je twee tabellen hebt en niet twee databases? Als dat zo is, en als je datamodel goed is, kun je het waarschijnlijk met één query af.
 
Ron -

Ron -

02/01/2007 17:19:00
Quote Anchor link
owja, sorry, tabelle moet het idd zijn 8-)

hoe doe je dat dan met één query? met left join?
dit snap ik nog niet zo goed:P daarom probeer ik het altijd anders te doen:P
kun je me misschien voorbeeldje geven, of heb je dan meer info nodig?
 
Jan Koehoorn

Jan Koehoorn

02/01/2007 17:31:00
Quote Anchor link
Ja, geef even de structuur van je twee tabellen? Dan kan ik een voorbeeld geven.
 
Ron -

Ron -

02/01/2007 17:34:00
Quote Anchor link
CREATE TABLE `online` (
`id` int(11) NOT NULL default '0',
`user` text NOT NULL,
`lastactive` datetime NOT NULL default '0000-00-00 00:00:00',
`ip` varchar(15) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `leden` (
`id` int(5) NOT NULL auto_increment,
`userid` varchar(50) NOT NULL default '',
`password` varchar(32) NOT NULL default '',
`email` text NOT NULL,
`valideermail` varchar(32) NOT NULL default '0',
`valideersessie` varchar(32) NOT NULL default '0',
`homepage` text,
`name` text,
`lastname` text,
`relatie` text,
`woonplaats` text,
`day` text,
`month` text,
`year` text,
`prive` text,
`extra` text,
`level` text,
`photo` text,
`geslacht` text,
`lastupdate` text NOT NULL,
`lastactive` datetime default NULL,
`registered` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ;

en dan moeten de beide id's met elkaar vergeleken worden, als het id van de leden tabel dan in de online tabel voorkomt, moet het plaatje online zijn anders offline
 
Jan Koehoorn

Jan Koehoorn

02/01/2007 17:44:00
Quote Anchor link
SELECT l.userid
FROM leden AS l, online AS o
WHERE l.userid = o.id

Nog wel een paar vraagtekens:
- Je hebt geen auto_increment veld in je tabel online
- Waarom gebruik je zo vaak het type TEXT voor je velden? In de meeste gevallen is dat overkill en kun je volstaan met een type VARCHAR(255).
 
Willem vp

Willem vp

02/01/2007 17:55:00
Quote Anchor link
Quote:
WHERE l.userid = o.id
Error: incompatible types? ;-)

Als online.id overeenkomt met leden.id kan dat een verklaring zijn waarom online.id niet auto-increment is; dat zou dan zelfs ongewenst zijn. Je zou je dan wel af kunnen vragen of je die tabel dan niet beter kunt mergen met de leden-tabel.
 
- Jim  -

- Jim -

02/01/2007 18:05:00
Quote Anchor link
je mist een accolade-sluiten ('}') ???
 
Ron -

Ron -

02/01/2007 18:24:00
Quote Anchor link
Jan Koehoorn schreef op 02.01.2007 17:44:
SELECT l.userid
FROM leden AS l, online AS o
WHERE l.userid = o.id

Nog wel een paar vraagtekens:
- Je hebt geen auto_increment veld in je tabel online
- Waarom gebruik je zo vaak het type TEXT voor je velden? In de meeste gevallen is dat overkill en kun je volstaan met een type VARCHAR(255).


nouw, ik gebruik geen auto_increment in de tabel online, omdat die id's in de tabel online, de id's van de gebruikers zijn, ik heb een id met auto_increment nergens voor nodig

ik gebruik text, omdat ik niet weet wat de rest inhoud:P (van weinige maar)

nu krijg ik dus alle userid's waarvan de id's overeen komen ofniet?
maar ik moet ook de andere userid's hebben, moet alle leden weergeven

http://www.de-menner.nl/index.php?p=memberslist

kun je dit ook doen voor een bepaald id?
dus die query uitvoeren
Gewijzigd op 01/01/1970 01:00:00 door Ron -
 
Ron -

Ron -

02/01/2007 18:49:00
Quote Anchor link
ik dacht aan zoiets, maar dit werkt niet :(
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php $on_off_select = mysql_query("SELECT l.id FROM leden AS l, online AS o WHERE o.id = '".$row['id']."'") or die(mysql_error());
            $result = mysql_result($on_off_select);
            $on_off = mysql_fetch_assoc($on_off_select);
            if(!empty($result))
            {

                $image = "images/design/online.gif";
            }

            else
            {
                $image = "images/design/offline.gif";
            }

?>
 
Ron -

Ron -

02/01/2007 18:52:00
Quote Anchor link
Jim schreef op 02.01.2007 18:05:
je mist een accolade-sluiten ('}') ???


klopt, hier in t voorbeeld wel, maar ik heb hem op de site wel ;)
 
Jan Koehoorn

Jan Koehoorn

02/01/2007 18:53:00
Quote Anchor link
Willem vp schreef op 02.01.2007 17:55:
Quote:
WHERE l.userid = o.id
Error: incompatible types? ;-)

Als online.id overeenkomt met leden.id kan dat een verklaring zijn waarom online.id niet auto-increment is; dat zou dan zelfs ongewenst zijn. Je zou je dan wel af kunnen vragen of je die tabel dan niet beter kunt mergen met de leden-tabel.

Ja klopt, die l.userid was een foutje. En de noodzaak voor twee verschillende tabellen ontgaat me hier ook enigszins ;-)
 
Ron -

Ron -

02/01/2007 18:56:00
Quote Anchor link
Jan Koehoorn schreef op 02.01.2007 18:53:
Ja klopt, die l.userid was een foutje. En de noodzaak voor twee verschillende tabellen ontgaat me hier ook enigszins ;-)


nouw die zijn wel nodig(volgens mij), want de gasten worden ook geregistreerd in de online tabel, maar jan, hoe kan ik jouw voorbeeld verwerken, heb al iets gepost hierboven..
 
- Jim  -

- Jim -

02/01/2007 18:57:00
Quote Anchor link
is het misschien niet eenvoudiger om in je leden-tabel uit te breiden met een veldje 'online' of 'actief' int(1) of set (als boolean)?

Int -> Integer (n) --> Een getal met n als maximaal aantal tekens,
Bool -> Boolean --> is een (Y/N). Een boolean bestaat als type niet in MySQL, dan kan je een Set gebruiken met 1 en 0 en 0 als default.

Succes.
 
Joren de Wit

Joren de Wit

02/01/2007 19:02:00
Quote Anchor link
Het lijkt me nog eenvoudiger om je leden tabel uit te breiden met een kolom waarin je opslaat wanneer een lid voor het laatst actief was. Op die manier kun je bepalen of een lid in de laatste 5 minuten bijvoorbeeld nog actief en dus online was.

Het nadeel namelijk van het neerzetten of een gebruiker online is of niet, is het bepalen van het feit of een gebruiker online is of niet. Gebruiker zullen namelijk 9 van de 10 keer niet uitloggen alsze je website verlaten, dus hoe weet jij dan welke gebruiker nog online is en welke niet...
 
Ron -

Ron -

02/01/2007 19:02:00
Quote Anchor link
Jim, ik dacht precies hetzelfde, was al bezig ;)
waar ik eerst keek of ze al online waren, en dit update, zet ik het nu ook in de leden tabel!
alleen moet ik nu nog iets maken, dat als je langer dan 10 minuten bijv niet actief bent, dit weer op 0 wordt gezet
 
Joren de Wit

Joren de Wit

02/01/2007 19:05:00
Quote Anchor link
Ron schreef op 02.01.2007 19:02:
alleen moet ik nu nog iets maken, dat als je langer dan 10 minuten bijv niet actief bent, dit weer op 0 wordt gezet
Oplossing: de tijd wanneer ze voor het laatst actief waren opslaan in je database. Zie ook mijn vorige reactie ;)
 
Jan Koehoorn

Jan Koehoorn

02/01/2007 19:07:00
Quote Anchor link
Aanvulling: let er op dat je dus niet alleen je tabel update wanneer men inlogt. Elke keer als een user een pagina opvraagt moet je tabel geupdate worden!
 
Ron -

Ron -

02/01/2007 19:09:00
Quote Anchor link
precies:P ik had jullie reacties al gecombineerd:P tis idd nogal onzin om aan te geven of iemand online of niet is, als je de laatst actieve tijd toch opslaat:P nu elke keer als een gebruiker een pagina opent, gebeurd er dit:

$sql = "UPDATE leden SET online=1, lastactive=NOW() WHERE id=".$_SESSION['je_id']."'";

$sql = "UPDATE leden SET online=0 WHERE NOW()-lastactive > 600";

en niet te vergeten, op mijn ledenlijst pagina:
if(!empty($row['online']))
{
$image = "images/design/online.gif";
}
else
{
$image = "images/design/offline.gif";
}

@jan, daar had ik al aangedacht ;)
Gewijzigd op 01/01/1970 01:00:00 door Ron -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.