anton - 05/08/2009 02:42 (laatste wijziging 05/08/2009 02:43)
Lid
halloowkes,
ik zat laatst te werken aan een marktsysteem, en moest daarbij ook een pagina ontwerpen waar je kon zien welke spullen je al gekocht had, nu heb ik een tabel in de database: "spullen" die bevat 46 velden met de namen van spullen en 1 veld: "rijder" rijder bevat de naam. Voor elke gebruiker die zich aanmeld word er meteen een record bijgemaakt in "spullen". De velden met de namen van de spullen hebben de values ja of nee
Mijn probleem:
ik wil enkel de rijen waarvan de value ja is en de gebruikersnaam overeenkomt met de rij "rijder" uit de database halen, en dan gewoon de titels van de rijen weergeven.
Als iemand weet hoe, of een simpelere manier kent, help mij alstublieft?
print_r($spullen);// bevat de velden waarin "ja" stond.
Ik denk dat je in die richting moet zoeken.
Ook kan ik je aanraden om logische namen voor je variabele te verzinnen, zodat als iemand anders kijk meteen weet wat het is.
Als er $s, $q, $l staat moeten we eerst ff zoeken wat het ook alweer was, en het is overzichtelijker voor jezelf als er $sql_spullen staat.
Ook kan je bijvoorbeeld overal $a_ mee beginnen als het een array is,, $s_ voor een string, $i_ voor integer en $b_ voor boolean
<?php
session_start(); // Bovenaan de pagina!! Anders krijg je header fout
/** Eerst een klein stukje inlogscript, aangezien namen zuigen om daarmee waardes op te halen **/
<?php
$sql = 'SELECT id FROM gebruikers WHERE naam = "[naam]" AND pass = "[password]"';
$res = mysql_query($sql);
if(mysql_num_rows($res) == 1) {
$rij = mysql_fetch_assoc($res);
$_SESSION['id'] = $rij['id'];
/**
* Als je met cookies WIL werken setcookie('id', md5($row['id']));
* Ik MD5 het id zodat het zowizo niet in 1x uitgelezen kan worden
* Ook het aapassen word moeilijker, om het NOG veiliger te maken (Wat ik je aanraad)
* is het te combineren.. Dus zo:
* $hID = md5($row['id']).sha1($row['id']);
* setcookie('id', $hID);
**/
$sql = 'SELECT * FROM spullen WHERE user_id = '.$_SESSION['id'];
// rest van de zooi
/** Bij gebruik van cookie
* $sHash = addslashes($_COOKIE['id']);
* $sql = 'SELECT * FROM spullen WHERE user_id_hash = "'.$sHash.'"';
**/
} else {
// inloggen mislukt, gebruiker/wachtwoord kwam niet overeen.
}
?>
<?php
session_start();// Bovenaan de pagina!! Anders krijg je header fout
/** Eerst een klein stukje inlogscript, aangezien namen zuigen om daarmee waardes op te halen **/
<?php
$sql='SELECT id FROM gebruikers WHERE naam = "[naam]" AND pass = "[password]"';
* Als je met cookies WIL werken setcookie('id', md5($row['id']));
* Ik MD5 het id zodat het zowizo niet in 1x uitgelezen kan worden
* Ook het aapassen word moeilijker, om het NOG veiliger te maken (Wat ik je aanraad)
* is het te combineren.. Dus zo:
* $hID = md5($row['id']).sha1($row['id']);
* setcookie('id', $hID);
**/
$sql='SELECT * FROM spullen WHERE user_id = '.$_SESSION['id'];
// rest van de zooi
/** Bij gebruik van cookie
* $sHash = addslashes($_COOKIE['id']);
* $sql = 'SELECT * FROM spullen WHERE user_id_hash = "'.$sHash.'"';
**/
}else{
// inloggen mislukt, gebruiker/wachtwoord kwam niet overeen.
}
?>
Even ter informatie. Als je alsnog met mijn gehasede cookie gaat werken garrandeer ik je nog geen 100% zekerheid dat je script veilig is, je kan namelijk nergens controleren of de cookie geldig is.
@jeroen: ik snap het niet echt van die as $s_key enzo, maar ik vertrouw erop dat jij het wel kent...ik zoek het wel op op php.net THX
@Arie2Zero: Ze hebben me altijd al gezegd dat ik beter met sessies werkte, maar ik had daar niet echt veel info over, in een boek dat ik had stonden er vooral cookies. Mijn plan was om voor V2 van de site nog sessies te leren zodat ik die kan gebruiken, maar toch bedankt voor de info
THX
@jeroen: ik snap het niet echt van die as $s_key enzo, maar ik vertrouw erop dat jij het wel kent...ik zoek het wel op op php.net THX
@Arie2Zero: Ze hebben me altijd al gezegd dat ik beter met sessies werkte, maar ik had daar niet echt veel info over, in een boek dat ik had stonden er vooral cookies. Mijn plan was om voor V2 van de site nog sessies te leren zodat ik die kan gebruiken, maar toch bedankt voor de infoÂ
THX
MVG
Anton Vandeghinste
s_key ect. is gewoon qua overzichtelijkheid. persoonlijk vind ik het zo nog netter, vind djb iets overdrijven maargoed, is maar wat je fijn vind.
$sText = 'Ik ben een string';
$iID = 'ik ben een integer';
$bBestaat = 'Ik ben een boolean, ik bevat dus true of false';
$aUsers = array('ik', 'ben', 'een', 'array');
$sText='Ik ben een string';
$iID='ik ben een integer';
$bBestaat='Ik ben een boolean, ik bevat dus true of false';
is de key 0,1,2 en de value henk, jaap, piet.
Je kan echter ook je eigen keys geven. net zoals je met PHP.net: mysql_fetch_assoc het veldnaam als key hebt.
$aUser = array('naam' => 'Arie', 'leeftijd' => 19, 'website' => 'www.ArieMedia.nl');
echo 'Hallo ik ben '.$aUser['naam'].' ik ben '.$aUser['leeftijd].' jaar oud en je kan meer over me vinden op '.$aUser['website'];
<?php
$aUsers = array(array( 'naam' => 'Arie', 'leeftijd' => 19, 'website' => 'www.ArieMedia.nl'),
array( 'naam' => 'Henk', 'leeftijd' => 120, 'website' => 'www.deoudsteman.nl'),
array( 'naam' => 'Anton', 'leeftijd' => 14, 'website' => 'http://yaweonline.funpic.de/FDproductions')
);
foreach($aUsers as $iKey => $sValue) {
echo 'Lid '.$iKey.': Hallo ik ben '.$sValue['naam'].' ik ben '.$sValue['leeftijd'].' jaar oud
en je kan meer over me vinden op '.$sValue['website'].'<br>';
}
?>
echo'Lid '.$iKey.': Hallo ik ben '.$sValue['naam'].' ik ben '.$sValue['leeftijd'].' jaar oud
en je kan meer over me vinden op '.$sValue['website'].'<br>';
}
?>
---
Edit
---
Vandaag of morgen schrijf ik op mijn eigen site een tutorial over array's wellicht heb je hier iets aan.. Ook staan er wat andere kleine tutorials op www.ArieMedia.nl
anton - 05/08/2009 10:41 (laatste wijziging 05/08/2009 11:19)
Lid
Ok tHanx allemaal
edit:
Jeroen, nu is er nog een probleem, hij geeft nummers weer bij mij, voordat de naam zelf komt...hoe doe ik dit weg??:$ ik voel me egt zo dom he maarja:p
Edit: Ik snap je vorige reactie niet
wat is je huidige output en hoe wil jij je output hebben?
anton - 05/08/2009 12:56 (laatste wijziging 05/08/2009 12:56)
Lid
ik kom nu alles in een tabel uit (zoals het moet) enkel staan er telkens de nummers van de plaats binnen de array bij en die moeten weg, ik heb nu dit:
+--------------------------------------+
| Spullen |
+--------------------------------------+
| 1 |
+--------------------------------------+
| Handboek der talen voor beginners |
+--------------------------------------+
| 2 |
+--------------------------------------+
| Verzorging der draken |
+--------------------------------------+
enzoverder, maar dan in een echte tabel, dus dat gaat al goed , want voor alles word en nieuwe table row aangemaakt, enkel die nummers storen mijn medewerker nogal, enig idee hoe ik die weg krijg..??
MVG
edit: sorry, de tabel word anders weergegeven dan dat ik ze typte in het textvlak...
ik kom nu alles in een tabel uit (zoals het moet) enkel staan er telkens de nummers van de plaats binnen de array bij en die moeten weg, ik heb nu dit:
+--------------------------------------+
| Spullen |
+--------------------------------------+
| 1 |
+--------------------------------------+
| Handboek der talen voor beginners |
+--------------------------------------+
| 2 |
+--------------------------------------+
| Verzorging der draken |
+--------------------------------------+
enzoverder, maar dan in een echte tabel, dus dat gaat al goed , want voor alles word en nieuwe table row aangemaakt, enkel die nummers storen mijn medewerker nogal, enig idee hoe ik die weg krijg..??
MVG
edit: sorry, de tabel word anders weergegeven dan dat ik ze typte in het textvlak...
Pfff..
Ik snap dat dit verwarrend voor je is . Maar ik zal zelf ook even moeten knutselen. $sKey bevat denk ik die 1 EN hoe het veld heet. misschien moet je mysql_fetch_array veranderen naar mysql_fetch_assoc();
Daarnaast als al die 45 velden verschillende producten zijn, dan kan ik je vertellen dat je het helemaal verkeerd aanpakt.
Je kan beter de tabellen gebruikers, producten en gebr_product hebben
Met deze structuur MINIMAAL:
Gebruikers:
id [int] [prim] [ai]
naam [varchar]
Producten
id [int] [prim] [ai]
titel [varchar]
omschrijving [text]
gebr_prod
id [int] [prim] [ai]
gebr_id [int] (hierin sla je het gebruiker-id op)
prod_id [int] (hierin sla je het product-id op)
aantal [int] (hoeveel hiervan heeft hij er?)
$sql = 'SELECT p.titel AS product, gp.aantal as aantal FROM gebr_prod AS gp
WHERE gebr_id = [eenID]
INNER JOIN producten as p ON gp.id = p.id';
$res = mysql_query($sql);
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
echo 'Je bezit '.$row['aantal'].' keer het product "'.$row['product'].'"<br>';
}
} else {
echo 'geen producten gevonden van deze gebruiker';
}
$sql='SELECT p.titel AS product, gp.aantal as aantal FROM gebr_prod AS gp
@Arie2Zero, dikke respect voor je dat je dit even zo typt Â
Maar `gebr_id` staat nergens in je tabellen, moet dat niet zijn `gebruikers`.`id`, en in je FROM nog even de tabel `gebruikers` erbij zetten?
Voor de rest klopt alles wat je zegt Â
Greets, Jeroen
Bedankt.. sinds dat ik tutorials schrijf over PHP ben ik iets behulpzamer geworden volgensmij
gebr_id staat wel in mijn tabel namelijk gebr_prod.
gebr_prod is een tabel die bijhoud welke producten je allemaal hebt. In de andere 2 tabellen staat enkel informatie apart over de gebruiker en het product. Via joins kan je deze 2 gegevens bij elkaar halen. omdat ik geleerd heb duidelijke veldnamen te maken is gebr_id het id waar je user_id in komt te staan (record 12 is bijv Jan), Alles wat in tabel gebr_prod in het veld gebr_id de waarde 12 heeft, is dus van Jan! daarnaast word het product_id opgehaald, die overeenkomt met het veld "id" in tabel producten. Via een join koppel ik deze velden en kan ik uit de tabel de titel halen van het product wat gebruiker 12 bezit.
Beste lap tekst, maar hopelijk snap je wat ik bedoel.
Bedankt allemaal voor alle uitleg! Ik heb er echt veel aan gehad, ik heb over 2 dingen al betere manieren voorgeschoteld gekregen hier, over hoe ik die spullen moet regelen en dat ik beter met id werk ipv cookies ik zet dit topic tussen mijn favorieten zodat ik ten alle tijden eens terug kan kijken!!
Echt heel erg bedankt...ik weet nu wel niet wie ik als oplosser moet aanduiden, maar ik gebruik dan wel de opgelost algemeen knop