[PHP]output mysql query in secties verdelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Namu
  • Registratie: Juni 2002
  • Laatst online: 18-09 15:12

Namu

Silver Wings Of Morning

Topicstarter
Goedenavond. Ik ben bezig een script om een table uit m'n mysql database laat zien en mooi in te delen in verschillende delen met een verdeel tekstje er tussen.

Dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
a
___________


Ai Yori Aoshi
Ai Yori Aoshi ~Enishi~ 
Aishiteru ze Baby
Azumanga Daioh

b
___________

enz.


Ik heb zitten leren over o.a. arrays en zoeken in objecten en heb dit in elkaar gezet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
include ("config.php");
include ("functions.inc.php");

$query = "SELECT anime_series.id, anime_series.seriesname FROM anime_series ORDER BY anime_series.seriesname";
$result = mysql_query($query) or die ("error: $query");
$alfabet = array("0","1","2","3","4","5","6","7","8","9","\.","a", "b", "c", "d", "e", "f",
 "g", "h", "i", "j", "k", "l", "m", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"); 
$print_header = "true";

while ($row = mysql_fetch_object($result)) {

    for($i = 0; $i < count($alfabet); $i++) { 
        $search_pattern = "^$alfabet[$i]";
        $result1 = eregi($search_pattern,$row->seriesname);
        
        if ($result1) {
            if($print_header = "true"){
                echo "$alfabet[$i]<br/>___________<br/><p/>";
                $print_header = "false";
            }
            
            echo "$row->seriesname<br/><p/>"; 
        } 
        else{
            $print_header = "true";
        }
    }
}
?> 


Ik het zover geschopt dat ik kan laten zien wat ik wil MAAR dat ik blijf de verdeel tekst zien bij elke serie naam zoals dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
\.
___________


.hack//Legend of Twilight Bracelet


\.
___________


.hack//Liminality


\.
___________


.hack//SIGN


a
___________


Ai Yori Aoshi


a
___________


Ai Yori Aoshi ~Enishi~ 


a
___________


Aishiteru ze Baby


a
___________


Azumanga Daioh


b
___________


Bakuretsu Tenshi


b
___________


Battle Programmer SHIRASE


Ik ben al sinds vanmiddag 4 uur bezig hieraan omdat ik erg graag wou dit probleem zelf op te lossen maar het is nu 11 uur en morgen weer school.

Zouden jullie mischien een kijkje willen nemen en wat tips achter kunnen laten?

Ik wil het niet op een bordje aangerijkt krijgen maar een paar hints van wat ik fout doe of wat ik just moet doen zouden welkom zijn.

[ Voor 16% gewijzigd door Namu op 20-03-2005 23:10 ]


Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

PHP:
1
if($print_header = "true")

Dit is een assignment. Oftewel je zet $print_header altijd op true.
Je moet == gebruiken

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022

tombo_inc

uhuh

klein foutje idd, maar je moet een vergelijkings operator gebruiken in je if statement en geen toewijzings operator ( = word == )

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
wat jij wilt doen in deze lus is elke keer dat de voorletter van de zin verandert een header neerpleuren:
daarvoor heb je 2 waardes nodig, de voorletter van het huidige record en de voorletter van het vorige record.

Zo kan je detecteren of er een andere hoofdletter gebruikt wordt en een nieuwe op het scherm printen

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik zou van
PHP:
1
2
3
$search_pattern = "^$alfabet[$i]";
$result1 = eregi($search_pattern,$row->seriesname);
if ( $result1 ) {

dit maken
PHP:
1
if ( substr($row->seriesname, 0, 1) == $alfabet[$i] ) {

of
PHP:
1
if ( $row->seriesname[0] == $alfabet[$i] ) {

of
PHP:
1
if ( strpos($row->seriesname, $alfabet[$i]) === 0 ) {


Maar is dit allemaal wel nodig als je al een order op de naam doet? Volgens mij hoef je zelf toch niet meer te sorteren dan?

En waarom gebruik je een string als boolean. Volstaat het werkelijke boolean data type niet?

[ Voor 16% gewijzigd door Michali op 21-03-2005 13:33 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Namu
  • Registratie: Juni 2002
  • Laatst online: 18-09 15:12

Namu

Silver Wings Of Morning

Topicstarter
bedankt voor de tip twiekert. Door even na te denken en wat zitten klooien mag ik u nu presenteren aan mijn nieuwste function!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function totale_serie_query ()
{
$query = "SELECT anime_series.id, anime_series.seriesname FROM anime_series ORDER BY anime_series.seriesname";
$result = mysql_query($query) or die ("error: $query");

echo"$info";
$alfabet = array("0","1","2","3","4","5","6","7","8","9","\.","a", "b", "c", "d", "e",
 "f", "g", "h", "i", "j", "k", "l", "m", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"); 
while ($row = mysql_fetch_object($result)) {

    for($i = 0; $i < count($alfabet); $i++) { 
        $search_pattern = "^$alfabet[$i]";
        $result1 = eregi($search_pattern,$row->seriesname);
        
        if ($result1) {
                $result2 = eregi("$search_pattern",$vorige);
                if ($result2){
                }
                else{
                    if ($alfabet[$i] == "\."){
                        echo "<dl><dd class=\"header\">.</dd></dl><p/>";
                    }
                    else{
                        echo "<dl><dd class=\"header\">$alfabet[$i]</dd></dl><p/>";
                    }
            } 
            echo "<a href='$mainscript?task=show-series&amp;id=$row->id'>$row->seriesname</a><br/><p/>"; 
            $vorige = $row->seriesname;
        } 
        else{
        }
    }
}
}


En het werkt nu precies zoals ik in wou.

Bedankt iedereen voor jullie tips.

[ Voor 85% gewijzigd door Namu op 21-03-2005 10:01 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Waarom doe je het zo moeilijk? Zo kan het toch veel gemakkelijker:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?

function totale_serie_query()
{
    $query = "
        SELECT
            anime_series.id,
            anime_series.seriesname
        FROM
            anime_series
        ORDER BY
            anime_series.seriesname
    ";
    
    $result = mysql_query($query) or die (mysql_error());
    
    $alfabet = array("0","1","2","3","4","5","6","7","8","9","\.","a", "b", "c", "d", "e",
    "f", "g", "h", "i", "j", "k", "l", "m", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"); 
    
    $vorigeEersteLetter = "";
    
    while ( $row = mysql_fetch_assoc($result) )
    {
        $eersteLetter = $row['seriesname'][0];
        
        if ( !in_array($eersteLetter, $alfabet) ) continue;
        
        if ( $vorigeEersteLetter != $eersteLetter )
        {
            echo '<dl><dd class="header">',
                $eersteLetter == "\." ? '.' : $eersteLetter,
                '</dd></dl><p/>';
        }
        
        echo '<a href="',
            $mainscript,
            '?task=show-series&amp;id=$row->id">',
            $row['seriesname'],
            '</a><br/><p/>';
        
        $vorigeEersteLetter = $eersteLetter;
    }
}

?>

Ik heb het niet getest overigens, maar het lijkt wel te kloppen.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je doet het veel te lastig. :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function totale_serie_query() {
  $query = "SELECT anime_series.id, anime_series.seriesname FROM anime_series ORDER BY anime_series.seriesname";
  $result = mysql_query($query) or die (mysql_error() . ": " . $query);

  $letter = 'blaat'; // meer dan één karakter, gaat altijd goed

  while ($row = mysql_fetch_object($query)) {
    if ($letter != strtolower(substr($row->seriesname))) {
      $letter = strtolower(substr($row->seriesname, 0, 1));
      echo "<h4>" . $letter . "</h4>";
    }
    echo "<a href='$mainscript?task=show-series&amp;id=$row->id'>$row->seriesname</a><br />";
  }
}

Zo moet ie net zo goed werken, maar dan met veel minder lussen, geheugengebruik, en zonder regular expressions. Waarom gebruik je trouwens een definition list van maar één element, terwijl je alleen maar een header wil?

[ Voor 10% gewijzigd door NMe op 21-03-2005 10:40 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Namu
  • Registratie: Juni 2002
  • Laatst online: 18-09 15:12

Namu

Silver Wings Of Morning

Topicstarter
omdat ik me op onbekend terein waag. Ik kan de simpele dingen wel met php en een script/function in elkaar knutselen. Maar de dingen die jullie nu schrijven dat is helemaal gestroomlijnt. dingen die ik gewoon nog niet zie, doe of kan... Ik was al blij dat ik het uberhoud aan de praat kreeg.

[ Voor 14% gewijzigd door Namu op 21-03-2005 12:41 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je kunt toch wel snel zien dat iets niet klopt. Je hebt bijvoorbeeld mogelijkheid om de uitkomst in een if() statement te negatieveren.
PHP:
1
2
3
4
5
6
if ( $a == 1 ){
}
else
{
  // doe wat
}

Hiervan kun je dus gemakkelijk
PHP:
1
2
3
4
if ( $a != 1 ) // of eventueeel if ( !( $a == 1 ) )
{
  // doe wat
}

van maken. Een leeg blok is altijd verkeerd. Maar dat is toch wel basis programmeer les imo.

En een regular expression gebruiken voor een niet dynamisch patroon is ook zware overhead die je gemakkelijk kunt vervangen door een betere optie. Kijk op zo'n moment gewoon rustig de php manual door. PHP heeft een giga lib wat functies betreft en er zit bijna altijd wel wat tussen wat bruikbaar is. Zo leer je nog eens wat.

Noushka's Magnificent Dream | Unity

Pagina: 1