login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Link disablen

Offline Ultimatum - 18/02/2007 02:24
Avatar van UltimatumPHP expert Ey vraagje 

Ik ben bezig met een membersysteempje voor mezelf en daar heb ik ook a t/m z en dan als je op t klikt krijg je alle users die met de t beginnen (test in dit geval ). Maar nu kan je op elke letter klikken maar bij de meeste (24) is er geen username met die beginletter. Hoe kan ik kijken of er een username in de database begint met een bepaalde letter en dat die letter "unlocken"?

Zeg maar zo (klein voorbeeldje)

a [geen link] | b [geen link] | c [link] | d [geen link]

tussen[] staat er normaal niet maar is voor duidelijkheid 

22 antwoorden

Gesponsorde links
Offline SomaQan - 18/02/2007 02:30
Avatar van SomaQan PHP beginner hoe bedoel je geen username ?
Offline Ultimatum - 18/02/2007 02:31
Avatar van Ultimatum PHP expert Geen account die met een bepaalde letter begint
Offline Godlord - 18/02/2007 03:10 (laatste wijziging 18/02/2007 03:15)
Avatar van Godlord PHP gevorderde lol, ik begrijp wat je wilt.
  1. $resa = mysql_query("SELECT username FROM leden");
  2. while ($obja = mysql_fetch_object($resa)) {
  3. if (substr(strtolower($obja->username), 0, 1) = "a") {
  4. $link[1] = 1;
  5. elseif (substr(strtolower($obja->username), 0, 1) = "b") {
  6. $link[2] = 1;
  7. elseif (substr(strtolower($obja->username), 0, 1) = "c") {
  8. $link[3] = 1;
  9. elseif (substr(strtolower($obja->username), 0, 1) = "d") {
  10. $link[4] = 1;
  11. elseif (substr(strtolower($obja->username), 0, 1) = "e") {
  12. $link[5] = 1;
  13. elseif (substr(strtolower($obja->username), 0, 1) = "f") {
  14. $link[6] = 1;
  15. elseif (substr(strtolower($obja->username), 0, 1) = "g") {
  16. $link[7] = 1;
  17. elseif (substr(strtolower($obja->username), 0, 1) = "h") {
  18. $link[8] = 1;
  19. elseif (substr(strtolower($obja->username), 0, 1) = "i") {
  20. $link[9] = 1;
  21. elseif (substr(strtolower($obja->username), 0, 1) = "j") {
  22. $link[10] = 1;
  23. elseif (substr(strtolower($obja->username), 0, 1) = "k") {
  24. $link[11] = 1;
  25. elseif (substr(strtolower($obja->username), 0, 1) = "l") {
  26. $link[12] = 1;
  27. elseif (substr(strtolower($obja->username), 0, 1) = "m") {
  28. $link[13] = 1;
  29. elseif (substr(strtolower($obja->username), 0, 1) = "n") {
  30. $link[14] = 1;
  31. elseif (substr(strtolower($obja->username), 0, 1) = "o") {
  32. $link[15] = 1;
  33. elseif (substr(strtolower($obja->username), 0, 1) = "p") {
  34. $link[16] = 1;
  35. elseif (substr(strtolower($obja->username), 0, 1) = "q") {
  36. $link[17] = 1;
  37. elseif (substr(strtolower($obja->username), 0, 1) = "r") {
  38. $link[18] = 1;
  39. elseif (substr(strtolower($obja->username), 0, 1) = "s") {
  40. $link[19] = 1;
  41. elseif (substr(strtolower($obja->username), 0, 1) = "t") {
  42. $link[20] = 1;
  43. elseif (substr(strtolower($obja->username), 0, 1) = "u") {
  44. $link[21] = 1;
  45. elseif (substr(strtolower($obja->username), 0, 1) = "v") {
  46. $link[22] = 1;
  47. elseif (substr(strtolower($obja->username), 0, 1) = "w") {
  48. $link[23] = 1;
  49. elseif (substr(strtolower($obja->username), 0, 1) = "x") {
  50. $link[24] = 1;
  51. elseif (substr(strtolower($obja->username), 0, 1) = "y") {
  52. $link[25] = 1;
  53. elseif (substr(strtolower($obja->username), 0, 1) = "z") {
  54. $link[26] = 1;
  55. }
  56. }
  57. $i = 1;
  58. $ii = 26;
  59. while ($i <= $ii) {
  60. if ($link[$i] == 1) {
  61. $display = $i + 64;
  62. echo '<a href="delink">'."[".chr($display)."]".'</a>';
  63. } else {
  64. $display = $i + 64;
  65. echo "[".chr($display)."]";
  66. }
  67. echo " ";
  68. $i++;
  69. }


Ik denk tot dat zou werken moet je wel nog even aanpassen en hier wordt verwacht tot je al connected bent met je mySQL database.

Wil je kleine tekens dan verandere: $display = $i + 64; in: $display = $i + 96;
Offline Rens - 18/02/2007 03:21
Avatar van Rens Gouden medaille

Crew algemeen
Ik denk dat PHP.net: range net iets makkelijker is dan die onnodig lange if/elseif/else van je Godlord... 
Offline Godlord - 18/02/2007 03:26
Avatar van Godlord PHP gevorderde nouja dat betekend nog niet dat dat van mij niet werkt. . Maar ik zal eens kijken, ik ken die functie nog niet (net zoals tientallen andere functies ).
Offline avdg - 18/02/2007 09:25 (laatste wijziging 18/02/2007 09:25)
Avatar van avdg PHP gevorderde tientallen? Er zijn er boven de 2500 functie in php?????????:o :o
Offline AgentX - 18/02/2007 09:26
Avatar van AgentX HTML beginner hele goeie neterlants jij gespreken hebt 
Offline Rik - 18/02/2007 10:09
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
De while van Godlord kan idd veel korter:
  1. <?php // Kleur
  2. $letters = array_combine(range('a', 'z'), array_fill(0, 26, false));
  3. $result = mysql_query('SELECT username FROM leden');
  4. while ($row = mysql_fetch_row($result)) {
  5. if (array_key_exist(substr($row[0], 0, 1), $letters) {
  6. $letters[substr($row[0], 0, 1)] = true;
  7. }
  8. }

De array letters krijgt zo steeds als key een letter van het alfabet en als value een boolean of die letter voorkomt in de eerste letters van de namen van de leden.

Je hebt voor array_combine() wel php5 nodig, maar op php.net staat ook een functie om array_combine na te maken voor php4.
Offline Ultimatum - 18/02/2007 10:12 (laatste wijziging 18/02/2007 10:18)
Avatar van Ultimatum PHP expert @agentx, lol in jouw kleine zin zitten 2 spellingsfouten in 1 woord en je zinsopbouw is bagger

@godlord, ik had zoiets ook al geprobeerd maar uiteraard werkte die zooi bij mij niet..
Er zaten wel 2 grote fouten in je script.
1. In elke if/ifelse kende je @obja->username toe aan een letter ipv te controleren
2. je sloot geen elke if/ifelse

Met heel veel aanpassingen werkt het nu..

@heirboven, je was een s bij array_key_exists vergeten en op regel 7 een ). En ik krijg nu ook niet meer alle letters te zien dus ik zal ff verkloten 
Offline Godlord - 18/02/2007 13:33
Avatar van Godlord PHP gevorderde Sorry Ultimatum dus die van mij werkt(achter een hoop foutjes). Eerst vergat ik vaker de ; als ik PHP schrijf en nu schrijf ik het altijd en nu vergeet ik opeens de }, lol volgens mij heb ik elke week iets anders dat ik altijd vergeet en die range snap ik voor geen meter. Weer iets dat ik niet snap op de sockets na lol.
Offline Ultimatum - 18/02/2007 14:20 (laatste wijziging 18/02/2007 15:44)
Avatar van Ultimatum PHP expert range is niet moeilijk hoor, het is een soort for loop, hij geeft alle letters terug tussen de 2 die jij opgeeft dus range('a', 't'); geef a t/m t weer 

Krijg het alleen niet werkent in samenwerking met range 

Heb het nu zo, maar het werkt neit helemaal 
  1. <?php
  2. $AllChars = range('a', 'z');
  3. $select = $db->Query("SELECT username
  4. FROM members");
  5. foreach($AllChars as $value)
  6. {
  7. while($arr = $db->Fetch_Array($select))
  8. {
  9. if($value == substr($arr['username'], 0, 1))
  10. {
  11. $links .= '<a href="'. $config['url'] .'/members/memberlist">'. $value .'</a>';
  12. }
  13. else
  14. {
  15. $links .= $value;
  16. }
  17. }
  18.  
  19. echo $links .' | ';
  20. }
  21. ?>


want dit krijg ik als uitkomst 
Citaat:
a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a |
Offline Godlord - 18/02/2007 16:26
Avatar van Godlord PHP gevorderde Ik ben niet echt goed met foreach dus ik kan je niet echt helpen maar value gaat niet verder en blijft dus op a staan en die range maakt dus een array?
Offline Dark_Paul - 18/02/2007 16:29
Avatar van Dark_Paul PHP ver gevorderde Draai je While en Foreach eens om..
Offline Ibrahim - 18/02/2007 16:38
Avatar van Ibrahim PHP expert misschien ook een idee om de usernames te verkleinen, want als iemand nou Siliecom14 heette in plaats van siliecom14, dan zou hij niet door deze script worden herkend.

strtolower($username);
Offline Rik - 18/02/2007 16:39
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik had net ff een ingeving: haal in je query alle beginletters op!
  1. SELECT DISTINCT LOWER(SUBSTR(naam, 1, 1)) FROM leden ORDER BY naam ASC
 
Offline Ultimatum - 18/02/2007 16:52
Avatar van Ultimatum PHP expert Als ik alle aanwijzingen goed heb opgevolgt moet ik zoiets krijgen:
  1. <?php
  2. $AllChars = range('a', 'z');
  3. $select = $db->Query("SELECT DISTINCT LOWER(SUBSTR(username, 1, 1)) FROM members ORDER BY username ASC");
  4.  
  5. while($arr = $db->Fetch_Array($select))
  6. {
  7. foreach($AllChars as $value)
  8. {
  9. if($value == strtolower($arr['username']))
  10. {
  11. $links .= '<a href="'. $config['url'] .'/members/memberlist">'. $value .'</a>';
  12. }
  13. else
  14. {
  15. $links .= $value;
  16. }
  17. }
  18.  
  19. echo $links .' | ';
  20. }
  21. ?>


Maar nu krijg ik dit te zien:
Citaat:
abcdefghijklmnopqrstuvwxyz | abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz |
Offline Rik - 18/02/2007 16:58
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Het hoort veel simpeler te moeten werken:
  1. <?php
  2. $select = $db->Query("SELECT DISTINCT LOWER(SUBSTR(username, 1, 1)) as letter FROM members ORDER BY username ASC");
  3. $links = array();
  4. while ($arr = $db->Fetch_Array($select))
  5. {
  6. $links[] = '<a href="'. $config['url'] .'/members/memberlist">'. $arr['letter'] .'</a>';
  7. }
  8. echo implode(' | ', $links);
  9. ?>
Offline Ultimatum - 18/02/2007 17:08
Avatar van Ultimatum PHP expert Oke, maar nu krijg ik maar 2 letters, ik wil ze alle 26 hebben maar alleen degene waarvan een username met die letter begint moet hij een link zijn. Dus in dit geval moet je op de T of U kunnen klikken maar op de rest niet. Ik zie nu dus alleen de T en U
Offline Rik - 18/02/2007 17:20
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
  1. <?php
  2. $select = $db->Query("SELECT DISTINCT LOWER(SUBSTR(username, 1, 1)) as letter FROM members ORDER BY username ASC");
  3. $letters = array_flip(range('a', 'z'));
  4. while ($arr = $db->Fetch_Array($select))
  5. {
  6. $letters[$arr['letter']] = true;
  7. }
  8. $links = array();
  9. foreach ($letters as $letter => $show) {
  10. $links[] = $show === true ? ('<a href="' . $config['url'] . '/members/memberlist">' . $letter . '</a>') : $letter;
  11. }
  12. echo implode(' | ', $links);
  13. ?>
Offline Ibrahim - 18/02/2007 17:53
Avatar van Ibrahim PHP expert SUBSTR bestaat helemaal niet 

het is SUBSTRING
Offline Rik - 18/02/2007 21:19 (laatste wijziging 18/02/2007 21:19)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Toch wel:
Citaat:
SUBSTR() is a synonym for SUBSTRING().
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring
Offline AgentX - 22/02/2007 21:28 (laatste wijziging 22/02/2007 21:29)
Avatar van AgentX HTML beginner @Ulti: dûh... ik kan wel Nederlands, maar ik vond het wel leuk om die spellingsfouten ff te maken, omdat de reactie daarboven ook vol foute. zat.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.272s