Avatar billede the_edge Nybegynder
23. januar 2007 - 12:43 Der er 15 kommentarer og
2 løsninger

Henter kun et brugernavn op fra databasen.

hejsa jeg har lavet følgene kode. men den viser kun det første brugernavn fra databasen. jeg har prøvet at få det til at virke med en Mysql_fetch_array, men det fungere ikke

<?php

include_once("sql.php");

echo "<center><h3>Bruger</h3></center>";


    function visbruger ()
{   

    $hentet = sql("select * from brugenavn");
    $dbbrugernavn = $hentet["Brugernavn"];
   
    echo "</ br>". $dbbrugernavn;

}

visbruger();

?>


------------------sql.php-----------------------

<?php
           
function sql($sql)
        {
    $forbindelse = mysql_connect("localhost","root","");
       
        mysql_select_db("opgman",$forbindelse);
       
$result = mysql_query($sql,$forbindelse) or die (mysql_error());
       
        while ($row = mysql_fetch_array($result))
        {
        return $row;
        }
           
    }
Avatar billede zynzz Praktikant
23. januar 2007 - 12:53 #1
Nok fordi $forbindelse ikke er public..
Avatar billede zynzz Praktikant
23. januar 2007 - 12:57 #2
Min fejl, så ikke din function...


Men hvorfor lave en while ???
Avatar billede the_edge Nybegynder
23. januar 2007 - 12:59 #3
det er bare så den henter den alt ud fra en tabel.
Avatar billede pidgeot Nybegynder
23. januar 2007 - 13:03 #4
Men det gør den jo ikke når du returner - det afslutter funktionen, hvilket gør at du kun henter den første række, og ikke kommer til andet.

Du er nødt til at bruge en SEPERAT funktion til at hente rækkerne, eller hente alle rækker ud i et array og returnere dette - men den sidstnævnte løsning er ikke holdbar, da det kræver rimelig meget hukommelse.
Avatar billede the_edge Nybegynder
23. januar 2007 - 13:04 #5
okay hvordan ville den se ud sådan en function for eks ?
Avatar billede pidgeot Nybegynder
23. januar 2007 - 13:13 #6
Det ville ganske enkelt være et kald til mysql_fetch_array med dit resultatsæt (dvs. det mysql_query returnerer) som parameter. Det kræver dog naturligvis at du gemmer dette et eller andet sted, og hvis du ikke kan blive færdig med at behandle data fra en query før du går i gang med en ny, så skal du sørge for at du har en måde at skelne mellem det på.

Af den grund vil jeg sådan set også foreslå dig at du dropper den sql()-funktion helt og går tilbage til den mere "manuelle" måde at gøre tingene på ved at skrive mysql_query m.v. direkte - det er måske lidt mere kode du skal skrive, men det andet kan ikke betale sig med mindre man har gjort sig seriøse tanker om databaseabstraktion, og vil gøre det let at skifte fra eks. MySQL til MSSQL - der bør man dog snarere lave en wrapper for hver funktion.

Bemærk også at det er spild af tid at kalde mysql_connect mere end en enkelt gang pr. script - kald den EN gang, og gem din reference så du kan genbruge den i resten af scriptet.
Avatar billede the_edge Nybegynder
23. januar 2007 - 13:30 #7
hmm okay det er meget at tænkte over. Men det du siger med en wrapper ? hvad mener du med det ?
Avatar billede zynzz Praktikant
23. januar 2007 - 13:36 #8
Altå du kan bare slette din while...

return mysql_fetch_array($result);

når du så gerne vil have udskrevet det på siden kunne jo

    while ($row = sql(forspørgelse her))
        {
echo $row[NOGET];
        }
Avatar billede zynzz Praktikant
23. januar 2007 - 13:38 #9
men som pidgeot siger er der jo ingen ting at spare da funktionen allerede er lavet i php, det vil kun koste ekstra tid at kalde din egen funktion også...
Avatar billede the_edge Nybegynder
23. januar 2007 - 13:47 #10
okay så hvordan ville du lave et eksemple som du syndes er smart ?
Avatar billede zynzz Praktikant
23. januar 2007 - 13:53 #11
Slet din funktion..., og lav det som som fx.:

$forbindelse = mysql_select_db("opgman", mysql_connect("localhost","root","ja"));
       
$result = mysql_query("FORSPØRGELSE HER") or die (mysql_error());
       
        while ($row = mysql_fetch_array($result))
        {
        echo $row[noget];
        }
Avatar billede pidgeot Nybegynder
23. januar 2007 - 14:06 #12
Præcist, dog skal mysql_connect og mysql_select_db kaldes hver for sig, da mysql_select_db ikke returnerer forbindelsen. (Alternativt kan man udnytte at PHP selv bruger den sidst oprettede forbindelse hvis man ikke angiver den i mysql_query, men det er ikke en specielt god ide, da dette eksempelvis ikke gælder for deres forbedrede MySQL-funktioner, mysqli.)
Avatar billede the_edge Nybegynder
23. januar 2007 - 14:27 #13
okay så gør jeg bare sådan... hvornår er det så smart at bruge sådan en function jeg started med at vise ? er det kun hvis man skal lave en rigtig stor side ?
Avatar billede pidgeot Nybegynder
23. januar 2007 - 14:45 #14
Det er smart hvis du enten:

1) Skal abstrahere fra hvilken database du bruger (fordi du ikke ved hvilken der skal bruges, eller hvis du vil have mulighed for at skifte uden at skulle rette i alle filer), eller
2) Sørger for ekstra funktionalitet der hjælper kraftigt med udvikling, eksempelvis parameterisering af queries (så du får dine funktioner til at håndtere indsættelse af variable i din SQL, dvs. alt lige fra at sætte apostroffer udenom strenge til at escape data så SQL injections umuliggøres)

Derudover skal sådanne funktioner naturligvis også laves med omhu, så de ikke laver mere end de rent faktisk skal - dvs. en funktion til at connecte, en funktion til at sende selve queryen afsted, og en til at hente den næste række i et resultatsæt.

Samtidigt er det en stor fordel at lave den slags i klasser, da dette blandt andet lader dig bestemme hvad man må og ikke må med den, og giver dig muligheden for at sikre at alle de databaseklasser du skriver rent faktisk indeholder de funktioner dit system skal bruge.
Avatar billede the_edge Nybegynder
24. januar 2007 - 12:56 #15
hmm ja det kan jeg godt se, men tak for svarene vil i dele point ?
Avatar billede zynzz Praktikant
24. januar 2007 - 13:58 #16
svar her
Avatar billede pidgeot Nybegynder
24. januar 2007 - 19:07 #17
Værsgo :)
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