Avatar billede Claus Mester
22. juli 2012 - 10:32 Der er 13 kommentarer og
1 løsning

Grupper mysql udtræk med overskrifter

Jeg har en mysql database: "budget" og en tabel: "udgifter". Tabellen er udstyret med "ID", "Navn", "Beløb" og "Gruppe" indtil videre.

Min udfordring er, at få vist indholdet vha php, under overskrifter. Overskrifterne defineres ud fra udgiftens gruppe, så alle udgifter i gruppen "Bolig" står under "Bolig" osv. Altså:

-----------
BOLIG
Udgift Beløb
Udgift Beløb
...

TRANSPORT
Udgift Beløb
Udgift Beløb
...
-----------

Jeg har forsøgt med utallige kodekombinationer, søgt overalt på google, men må konstatere at jeg ikke er skrap nok endnu til at få det til at virke.

Nogen der kan hjælpe?
Avatar billede Klaphattens Novice
22. juli 2012 - 13:25 #1
Dette virker hos mig, det er dog tilrettet til dit, men ikke efterfølgende testet:

Jeg har lavet det med MySQLI, så hvis du ikke køre det i forvejen så lav en database forbindelse først.


$mysqli = new mysqli("server", "brugernavn", "kodeord", "databasenavn");

if (mysqli_connect_errno()) {
    echo 'Der opstod en fejl ved forbindelsen: ' . mysqli_connect_error();
    exit();
}


Mere om MySQLi: http://www.eksperten.dk/guide/1480

Og nu til det der udskriver dine lister:


<?php
$kat_sql ='SELECT Gruppe from udgifter GROUP BY Gruppe';
$kat = $mysqli->prepare($kat_sql);

$liste_sql = 'SELECT Navn, Beløb from udgifter WHERE Gruppe=? ORDER BY Navn';
$liste = $mysqli->prepare($liste_sql);

    $kat->execute();
    $kat->store_result();
    $kat->bind_result($gruppe);

    while ($kat->fetch()) {
        echo '<h2>'.$gruppe.'</h2>';

        $liste->bind_param('s', $gruppe);
        $liste->execute();
        $liste->bind_result($navn, $belob);
        while ($liste->fetch()){
        echo $navn.' - '.$belob.'<br />'; 
        }
        echo '<br />';     

    }
  $kat->free_result();


$liste->close();
$kat->close();

?>
Avatar billede Claus Mester
22. juli 2012 - 15:11 #2
Det fan... service! Tak ska du ha.

Men er det muligt du kan lave det i MySql også. Jeg kender intet til MySqli, andet end at det er morgendagens måde at kommunikere med db på. Men jeg er ikke nået til det endnu og forsøger stadig at forstå og bruge mysql.
Avatar billede olebole Juniormester
22. juli 2012 - 15:49 #3
<ole>

Det er *meget* længe siden, MySQLI tilhørte morgendagen. MySQL er dybt forældet - har alle dage været fejlkonstrueret - og burde være udfaset for længst  =)

/mvh
</bole>
Avatar billede Klaphattens Novice
22. juli 2012 - 16:08 #4
Som ole siger bør du sætte dig ind i MySQLi. det er også ham der har lavet den guide. så derfor vil jeg heller ikke skrive det, da du bør holde dig til mysqli.

Det tog mig ikke lang tid at lære det, det er dejligt nemt når man først forstår det.
Avatar billede Claus Mester
22. juli 2012 - 16:09 #5
Ok :).

Men situationen for mig er, at jeg ikke kan finde nogle rigtig gode tutorials og guides på nettet, der kommer "hele vejen rundt" - på dansk. Jeg har det fint med "almindeligt" engelsk, men jeg finder det meget sværere at forstå kodeteknologier på engelsk, når det tekniske aspekt kommer ind i billedet.

Kender i mon nogle gode danske tuts?
Avatar billede Claus Mester
22. juli 2012 - 16:15 #6
@klaphattens: Nu har jeg forsøgt din kode, men modtager følgende fejl:

Fatal error: Call to a member function bind_param() on a non-object in [adresse] on line 26

På linjen står det her: $liste->bind_param('s', $gruppe);
Avatar billede olebole Juniormester
22. juli 2012 - 17:45 #7
Jeg tvivler på, MySQL er glad for et felt med navnet 'Beløb'. Undgå skandinaviske tegn - og brug i øvrigt altid navne lowercase
Avatar billede olebole Juniormester
22. juli 2012 - 17:48 #8
- og hvad tutorials angår, så er du nødt til at lære at læse engelsk. Der findes bunker af artikler og tutorials om webkode på dansk, men langt de fleste er ikke værd at læse. De mest populære er endda de værste!
Avatar billede Claus Mester
22. juli 2012 - 18:17 #9
Jeg har ikke oplevet problemer med skandinaviske tegn endnu. Men dit forslag er skrevet bag øret.

Jeg syntes ikke jeg kan finde *bunker* af tutorials om mysqli på dansk på nettet. På engelsk, ja, men ikke på dansk.

Indtil dato har jeg lært Visual Basic, en del C++, CSS, HTML og noget PHP fra engelske sites. Så engelsk kan jeg nu sagtens læse :). Finder bare de engelske sites om mysql(i), sprogligt meget knudrede og har derfor sprunget dem over hvor jeg kunne finde noget på dansk i stedet.
Avatar billede Klaphattens Novice
22. juli 2012 - 21:39 #10
Altså lige præcis den del jeg har givet dig, er en del jeg selv fundet på nettet. men ellers er alt hvad man behøver faktisk i ole's guide. jeg haft oprettet 2 spørgsmål ang MySQLi. Begge gange har svarende været så logiske, at jeg faktisk har følt mig som en klaphat fordi jeg overhovedet spurgte :0)

Men det er jo helt op til dig, jeg synes personligt det er dumt ikke at sætte sig ind i det, selvom der er så mange danske sider.
Avatar billede olebole Juniormester
22. juli 2012 - 21:50 #11
Jeg skrev bare, at der generelt findes en bunke på dansk om webkode, men enorme mængder af det, der skrives, er vrøvl. Det gølder såvel på dansk som engelsk - men i særdeleshed på dansk.

Jeg er ikke vidende om andre MySQLI-tutorials på dansk end den, Klaphatten linker til - hvad der oprindelig var min motivation til at skrive den
Avatar billede Claus Mester
23. juli 2012 - 08:46 #12
@klaphattens: Jeg vil gerne give dig 20 p for dit forslag (#1), men da jeg ikke kan få det til at fungere, vil jeg ikke give mere. Men hvis du kan hjælpe mig med det sidste (#6), uddeler jeg med glæde de sidste 20.

Derudover er jeg blevet overbevist :) dels af jeres forklaringer og dels af din guide olebole, som i øvrigt er meget letlæst og giver et rigtig godt overblik. Jeg må videre med MySQli.

Forslag til yderligere læsning, til inspiration for andre der falder over spørgsmålet her:

PHP for absolute beginners (uddrag fra bogen)
http://books.google.dk/books?id=Ze7euYaSKj0C&pg=PA113&lpg=PA113&dq=mysqli+for+beginners&source=bl&ots=5ED3rnUUhD&sig=fJEz8-5eTkRHtnaYPs61IgCoE4o&hl=da&sa=X&ei=06AMUMGYIZSp0AXgi53MCg&ved=0CFAQ6AEwAA#v=onepage&q=mysqli%20for%20beginners&f=true

PHP 101 (part8): Databases ...
http://devzone.zend.com/12/php-101-part-8-databases-and-other-animals_part-1/
Avatar billede Klaphattens Novice
23. juli 2012 - 14:23 #13
De sidste point må næste tilfalde ole. han har fortalt dig hvad problemet er.

Først vil jeg lige citere ole i en af mine tråde. det er en forklaring på den fejl du får:


Kik på fejlens ordlyd, så kan du huske, hvad den betyder næste gang, du møder den. Den siger:

"Du har kaldt en funktion (bind_param), som ligger på et ikke-objekt"

Funktionen bind_param ligger jo normalt som metode på objektet, der udgør vores statement ($stmt->bind_param).  Altså har vi ikke noget statement objekt - altså må vores prepare være gået galt. Det er jo den, der skulle oprette vores statement objekt.

Måske, man kunne forestille sig, det kunne skyldes, at linjen (som du ikke viser):

$db = new mysqli(... ... ...);

- var gået galt. Men, så havde du tidligere fået samme fejl - bare med ordlyden:

"Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\fun\test.php on line ???"
Funktionen query ligger nemlig som metode på $db, der jo er din objekt instans af klassen mysqli. Kan du se logikken?

Jeg har lige testet, og koden virker fint hos mig. Hvad sker der, hvis du skriver:

$sql = 'SELECT name FROM test LIMIT ?, 1';
$stmt = $db->prepare($sql);
echo $db->error;
exit();

Kilde: http://www.eksperten.dk/spm/965543#reply_7960164  #7

Så hvis du indsætter:
echo $mysqli->error;
exit();

Får du følgende fejl:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '&#65533;b FROM udgifter WHERE gruppe=? ORDER BY


Som du kan se er der et tegn og ikke et ø. hvis du i koden og i tabellen skifter ø ud med et o, så virker det.

Så som ole sagde er ø ikke anvendelig i denne situation, og generelt skal man holde sig fra æøå.
Jeg er ikke ekspert, men jeg kan forstille mig at det skyldes at databasen er engelsk sproget, hvis man skal bruge ikke engelske tegn, så skal man nok ud og finde adgang via omveje, og omveje er jo sjældent det bedste at bruge.
Avatar billede olebole Juniormester
23. juli 2012 - 16:31 #14
Jeg er ikke hjemme i disse dage, så det bliver *meget* korte svar - og jeg kan heller ikke teste her  =)

Reserverede ord som 'by' kan ikke bruges som feltnavn i en MySQL database. Og så alligevel! Man kan nemlig 'backticke' navnet i SQL'en:

SELECT `by` FROM ´locations´

Måske, det også virker med 'beløb'(?) Generelt er det dog bedre at undgå specialtegn og reserverede ord - og så sikre sig helt ved altid at bruge backticks  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester