login  Naam:   Wachtwoord: 
Registreer je!
 Forum

order by value (Opgelost)

Offline anton - 05/08/2009 02:42 (laatste wijziging 05/08/2009 02:43)
Avatar van antonLid 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?

code:
  1. <?
  2. $plaats = "Mijn spullen";
  3. $url = "spullen.php";
  4. include("dbconnect.php");
  5. include("head.php");
  6. if($_COOKIE['ingelogd'] == FALSE)
  7. {
  8.  
  9. ?>
  10. <table align="center" border="1" bordercolor="#00CC66" cellpadding="0" cellspacing="0">
  11. <tr>
  12. <td bgcolor="#00CC66"><p align="center"><b>Foutmelding</b></p></td>
  13. </tr>
  14. <tr>
  15. <td><p align="center">Sorry , u moet ingelogd zijn om deze pagina te bezoeken!<br><br>
  16. MVG,<br>
  17. De Crew
  18. </p></td>
  19. </tr>
  20. </table>
  21. <?
  22.  
  23. }
  24. else
  25. {
  26.  
  27. $s = "SELECT * FROM spullen WHERE rijder = '".$_COOKIE['logname']."'";
  28. $q = mysql_query($s)
  29. while($l = mysql_fetch_assoc($q))
  30. {

(de code is in ontwikkelingsstadium)

MVG
Anton Vandeghinste

15 antwoorden

Gesponsorde links
Offline djb - 05/08/2009 05:52
Avatar van djb PHP beginner
  1. $sql_spullen = "SELECT * FROM spullen WHERE rijder = '".$_COOKIE['logname']."'";
  2. $query_spullen = mysql_query($sql_spullen)
  3. $list_spullen = mysql_fetch_assoc($query_spullen);
  4. $a_spullen = array();
  5. foreach ($list_spullen as $s_key => $s_value) {
  6. if ($s_value=="ja") {
  7. $a_spullen[] = $s_key;
  8. }
  9. }
  10.  
  11. 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  

Naja, ik den dat je het wel snapt  

Greets, Jeroen
Offline ArieMedia - 05/08/2009 09:58 (laatste wijziging 05/08/2009 10:06)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Woow. Ik kan je vertellen dat jou systeem verre weg van veilig is.

Cookies zijn te veranderen. Dus als ik mijn cookie verander naar japie, krijg ik dan te zien wat japie allemaal besteld heeft?

Verder is het absoluut niet netjes om aan de hand van de naam sub-data op te halen. Doe dit op een id. Deze manier is veel veiliger.

  1. <?php
  2. session_start(); // Bovenaan de pagina!! Anders krijg je header fout
  3. /** Eerst een klein stukje inlogscript, aangezien namen zuigen om daarmee waardes op te halen **/
  4. <?php
  5. $sql = 'SELECT id FROM gebruikers WHERE naam = "[naam]" AND pass = "[password]"';
  6. $res = mysql_query($sql);
  7. if(mysql_num_rows($res) == 1) {
  8. $rij = mysql_fetch_assoc($res);
  9. $_SESSION['id'] = $rij['id'];
  10. /**
  11. * Als je met cookies WIL werken setcookie('id', md5($row['id']));
  12. * Ik MD5 het id zodat het zowizo niet in 1x uitgelezen kan worden
  13. * Ook het aapassen word moeilijker, om het NOG veiliger te maken (Wat ik je aanraad)
  14. * is het te combineren.. Dus zo:
  15. * $hID = md5($row['id']).sha1($row['id']);
  16. * setcookie('id', $hID);
  17. **/
  18. $sql = 'SELECT * FROM spullen WHERE user_id = '.$_SESSION['id'];
  19. // rest van de zooi
  20.  
  21. /** Bij gebruik van cookie
  22. * $sHash = addslashes($_COOKIE['id']);
  23. * $sql = 'SELECT * FROM spullen WHERE user_id_hash = "'.$sHash.'"';
  24. **/
  25. } else {
  26. // inloggen mislukt, gebruiker/wachtwoord kwam niet overeen.
  27. }
  28. ?>


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.
Offline anton - 05/08/2009 10:15
Avatar van anton Lid ok, bedankt voor de hulp allebei,

@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
Offline ArieMedia - 05/08/2009 10:33 (laatste wijziging 05/08/2009 10:38)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
anton schreef:
ok, bedankt voor de hulp allebei,

@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.

  1. $sText = 'Ik ben een string';
  2. $iID = 'ik ben een integer';
  3. $bBestaat = 'Ik ben een boolean, ik bevat dus true of false';
  4. $aUsers = array('ik', 'ben', 'een', 'array');


Het gaat dus om de eerste letter.
die key en value is heel simpel
als je een array hebt
  1. Array( [0] => 'henk' [1] => 'Jaap' [2] 'Piet')


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.

  1. $aUser = array('naam' => 'Arie', 'leeftijd' => 19, 'website' => 'www.ArieMedia.nl');
  2.  
  3. echo 'Hallo ik ben '.$aUser['naam'].' ik ben '.$aUser['leeftijd].' jaar oud en je kan meer over me vinden op '.$aUser['website'];

Als je meerdere users hebt kan je dus om iedereen te echo-en een foreach doen.

  1. <?php
  2. $aUsers = array(array( 'naam' => 'Arie', 'leeftijd' => 19, 'website' => 'www.ArieMedia.nl'),
  3. array( 'naam' => 'Henk', 'leeftijd' => 120, 'website' => 'www.deoudsteman.nl'),
  4. array( 'naam' => 'Anton', 'leeftijd' => 14, 'website' => 'http://yaweonline.funpic.de/FDproductions')
  5. );
  6.  
  7. foreach($aUsers as $iKey => $sValue) {
  8. echo 'Lid '.$iKey.': Hallo ik ben '.$sValue['naam'].' ik ben '.$sValue['leeftijd'].' jaar oud
  9. en je kan meer over me vinden op '.$sValue['website'].'<br>';
  10. }
  11. ?>


---
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
Offline anton - 05/08/2009 10:41 (laatste wijziging 05/08/2009 11:19)
Avatar van anton 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
  1. <?
  2. $plaats = "Mijn spullen";
  3. $url = "spullen.php";
  4. include("dbconnect.php");
  5. include("head.php");
  6. if($_COOKIE['ingelogd'] == FALSE)
  7. {
  8.  
  9. ?>
  10. <table align="center" border="1" bordercolor="#00CC66" cellpadding="0" cellspacing="0">
  11. <tr>
  12. <td bgcolor="#00CC66"><p align="center"><b>Foutmelding</b></p></td>
  13. </tr>
  14. <tr>
  15. <td><p align="center">Sorry , u moet ingelogd zijn om deze pagina te bezoeken!<br><br>
  16. MVG,<br>
  17. De Crew
  18. </p></td>
  19. </tr>
  20. </table>
  21. <?
  22.  
  23. }
  24. else
  25. {
  26. ?>
  27. <table width="500" align="center" border="1" bordercolor="#00CC66" cellpadding="0"
  28. cellspacing="0">
  29. <tr>
  30. <td bgcolor="#00CC66"><p align="center"><b>Mijn spullen</b></p></td>
  31. </tr>
  32. <?
  33. $sql_spullen = "SELECT * FROM spullen WHERE rijder = '".$_COOKIE['logname']."'";
  34. $query_spullen = mysql_query($sql_spullen) or die(mysql_error());
  35. $list_spullen = mysql_fetch_array($query_spullen);
  36. foreach($list_spullen as $sKey => $sValue)
  37. {
  38.  
  39. if($sValue == 'ja')
  40. {
  41.  
  42. echo "<tr><td><p align=\"center\">".$sKey."</p></td></tr>";
  43.  
  44. }
  45.  
  46. }
  47. ?>
  48. </table>
  49. <?
  50.  
  51. }
  52. include("foot.php");
  53. ?>


MVG

Offline ArieMedia - 05/08/2009 11:34 (laatste wijziging 05/08/2009 11:48)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Edit: Ik snap je vorige reactie niet 
wat is je huidige output en hoe wil jij je output hebben?
Offline anton - 05/08/2009 12:56 (laatste wijziging 05/08/2009 12:56)
Avatar van anton 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...
Offline ArieMedia - 05/08/2009 13:23
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
anton schreef:
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...
$sKey niet echo-en.
Offline anton - 05/08/2009 14:33
Avatar van anton Lid wat dan wel?
Offline djb - 05/08/2009 15:05 (laatste wijziging 05/08/2009 15:06)
Avatar van djb PHP beginner Heel simpel 

niet "mysql_fetch_array" gebruiken maar "mysql_fetch_assoc"

Met "mysql_fetch_array" krijg je de waardes 2 keer, als getal, en als text.

Wat Arie2Zero zegt hoef je niet te doen (die $sKey weghalen)

Wel heeft hij gelijk dat je met id's moet werken, en zo min mogelijk met cookies  

Greets Jeroen
Offline ArieMedia - 05/08/2009 15:05
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
anton schreef:
wat dan wel?
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?)

*[int/varchar] = type, [prim] = primary key [ai] = Auto Incresement

Met 1 SQL Kan ik nu ALLE producten ophalen die meneer of mevrouw heeft.
  1. $sql = 'SELECT p.titel AS product, gp.aantal as aantal FROM gebr_prod AS gp
  2. WHERE gebr_id = [eenID]
  3. INNER JOIN producten as p ON gp.id = p.id';
  4. $res = mysql_query($sql);
  5. if(mysql_num_rows($res) > 0) {
  6. while($row = mysql_fetch_assoc($res)) {
  7. echo 'Je bezit '.$row['aantal'].' keer het product "'.$row['product'].'"<br>';
  8. }
  9. } else {
  10. echo 'geen producten gevonden van deze gebruiker';
  11. }
Offline djb - 05/08/2009 15:13
Avatar van djb PHP beginner @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
Offline ArieMedia - 05/08/2009 15:22
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
djb schreef:
@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.
Offline anton - 05/08/2009 16:05
Avatar van anton Lid 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 

MVG
Anton Vandeghinste
Offline djb - 05/08/2009 16:48
Avatar van djb PHP beginner heey Anton,

Misschien kan je je code weer posten,

Andere mensen kunnen er weer van leren, en ik ben ook wel benieuwd hoe je het als resultaat hebt.

Greets,
Jeroen
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.296s