Avatar billede dragonbook Nybegynder
27. august 2006 - 16:30 Der er 19 kommentarer og
1 løsning

Behandling af data fra MySQL

Jeg bruger følgende til at hente en liste ud med brugernavne og oplysninger om brugerne i et forum.

<?php
// Make a MySQL Connection
mysql_connect("db", "brugernavn", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

// Get all the data from the "users" table
$result = mysql_query("SELECT * FROM users")
or die(mysql_error()); 

echo "<table border='1'>";
echo "<tr> <th>Brugernavn</th> <th>Navn</th> </tr>";

// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
    // Print out the contents of each row into a table
    echo "<tr><td>";
    echo $row['username'];
    echo "</td><td>";
    echo $row['user_data'];
    echo "</td></tr>";
}

echo "</table>";
?>

Mit problem er at dataen i kolonnen "user_data" indeholder en del forskellige data, og nogle gange er den helt tom.

Eks.:

a:3:{s:9:"navn";s:15:"Mads Hansen";s:7:"post_nr";s:2:"7000";s:7:"hus_nr";s:2:"51";}

teksten (her ;s:15:) mellem f.eks. "navn" og "Mads Hansen" er ikke altid den samme.

Kan man på en eller anden måde omskrive alt dette så det kommer ud som en tabel ligende den her:


Brugernavn    Navn        Post nr.    Hus nr.
Mads        Mads Hansen    7000        51

osv.

Således at hvis der mangler en oplysning skal der bare stå "Mangler data".
Avatar billede coderdk Praktikant
27. august 2006 - 16:43 #1
Et lille eksempel som du evt. kan udbygge:

while($row = mysql_fetch_array( $result )) {
    // Print out the contents of each row into a table
    echo "<tr><td>";
    echo $row['username'];
    echo "</td><td>";
    if ( !empty( $row['user_data'] ) )
    {
      $ud = unserialize( $row['user_data'] );
      foreach( $ud as $key => $val )
      {
          echo "$key: $val";
      }
    }
    echo "</td></tr>";
}
Avatar billede dragonbook Nybegynder
27. august 2006 - 16:50 #2
Okay det siger mig så ikke så meget, hvordan kan jeg lige udbygge den ?
Avatar billede coderdk Praktikant
27. august 2006 - 17:32 #3
Prøv:

<?php
// Make a MySQL Connection
mysql_connect("db", "brugernavn", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

// Get all the data from the "users" table
$result = mysql_query("SELECT * FROM users")
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Brugernavn</th> <th>Navn</th> <th>Postnr.</th> <th>Husnr.</th> </tr>";

// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
    // Print out the contents of each row into a table
    echo "<tr><td>";
    echo $row['username'];
    echo "</td><td>";
    if ( !empty( $row['user_data'] ) )
    {
      $ud = unserialize( $row['user_data'] );
      foreach( $ud as $key => $val )
      {
          echo "<td>$val</td>";
      }
    }
    else
    {
        echo "<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>"
    }
    echo "</td></tr>";
}
echo "</table>";
?>
Avatar billede dragonbook Nybegynder
27. august 2006 - 18:14 #4
Det er ikke helt skævt, bort set fra der ikke står noget i kolonne Navn og navnene står under post nr. Yderligere ser det ud til der bliver taget flere informationer ud end
"navn", "post_nr" og "hus_nr"
Avatar billede coderdk Praktikant
27. august 2006 - 18:48 #5
Varierer antallet af felter i user_data ? Hvordan ser det ud?

echo "</td><td>";

før if (!empty skal være:

echo "</td>";
Avatar billede dragonbook Nybegynder
27. august 2006 - 18:56 #6
Ja som nævnt var:
a:3:{s:9:"navn";s:15:"Mads Hansen";s:7:"post_nr";s:2:"7000";s:7:"hus_nr";s:2:"51";}
et eksempel.

Det kommer lidt an på hvad brugeren ønsker at udfylde, det ku f.eks. også være e-mail osv. som jeg ikke ønsker skal optræde i denne liste....
Avatar billede dragonbook Nybegynder
27. august 2006 - 19:02 #7
Yderliger kan jeg se at, hvis de ikke har opgivet et navn så rykker post nummeret hen som navn og hus nummert hen som post nr.
Avatar billede dragonbook Nybegynder
27. august 2006 - 19:04 #8
Kunne man på en eller anden måde få fange ordet f.eks. "navn" og derefter tage det første ord der kommer efter "navn" og som er omgivet af "" og benytte det som værdien. Og således gøre det samme med post nr og hus nr ?
Avatar billede coderdk Praktikant
27. august 2006 - 19:14 #9
Jeg ville gøre sådan:

<?php
// Make a MySQL Connection
mysql_connect("db", "brugernavn", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

// Get all the data from the "users" table
$result = mysql_query("SELECT * FROM users")
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Brugernavn</th> <th>Data</th> </tr>";

// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
    // Print out the contents of each row into a table
    echo "<tr><td>";
    echo $row['username'];
    echo "</td><td>";
    if ( !empty( $row['user_data'] ) )
    {
      $ud = unserialize( $row['user_data'] );
      foreach( $ud as $key => $val )
      {
          echo "$key: $val<br>";
      }
    }
    else
    {
        echo "&nbsp;"
    }
    echo "</td></tr>";
}
echo "</table>";
?>
Avatar billede dragonbook Nybegynder
27. august 2006 - 19:24 #10
Øhh ja, men så får jeg jo lige netop alle de informationer med som jeg ikke ønsker.. email adr. osv.
Avatar billede dragonbook Nybegynder
27. august 2006 - 19:30 #11
Men ideen med at samle det hele i en kolonne er nu god nok, hvis man så bare kunne "plukke" de ting ud der skal vises....
Avatar billede coderdk Praktikant
27. august 2006 - 20:14 #12
Ja du kan jo bare checke om $key er en du gerne vil vise...
Avatar billede dragonbook Nybegynder
27. august 2006 - 20:48 #13
Ja, men der er jo i princippet et uendelig stort antal ting jeg ikke vil vise f.eks. alle emails, adr., webside osv. bruger kan havde angivet.
Avatar billede coderdk Praktikant
27. august 2006 - 21:38 #14
Så hvidlist det, check om $key er et felt du vil vise.
Avatar billede dragonbook Nybegynder
28. august 2006 - 07:35 #15
Jamen så skal jeg vel hvidliste samtlige navne som er mulige, eller har jeg totalt misforstået det? Kan du give et eksempel?
Avatar billede coderdk Praktikant
28. august 2006 - 11:44 #16
Nej du skal blot hvidliste dem som du vil vise. Du har to muligheder sortliste dem du IKKE vil vise eller hvidliste dem du VIL vise ;)
Avatar billede dragonbook Nybegynder
28. august 2006 - 15:39 #17
Jo tak jeg ved godt hvad du mener med at sort og hvidliste! Men ved at hvidliste, kan jeg så gøre det uden at skrive f.eks. Mads Hansen og alle andre mulige navne?

Dvs. kan jeg nøjes at hvid liste ordet "navn", "post_nr" og "hus_nr" for at hvidliste alle mulige navne/tal der kan komme til at stå i disse udtryk. Og kan du som sagt give et eksempel på hvorledes dette gøres?

En anden ting, når jeg benytter scriptet kommer user_data på denne form:

name: Mads Hansen
post_nr: 7000
hus_nr: 51

Hvilket jo ikke er så pænt, kunne man omskrive det så der står:

Navn: Mads Hansen
Post nr.: 7000
Hus nr.: 51
Avatar billede coderdk Praktikant
28. august 2006 - 16:06 #18
Jeg mener hvidliste feltnavnene, altså "navn", "post_nr" og "hus_nr", ikke indholdet af dem...
Avatar billede dragonbook Nybegynder
29. august 2006 - 18:33 #19
Ok. Du får mange tak for hjælpen, jeg forsøger at klare den her fra.

Smid lige et svar så er der point.
Avatar billede coderdk Praktikant
29. august 2006 - 22:45 #20
Aight :)
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Digitaliseringsstyrelsen

IT-arkitekt hos Digitaliseringsstyrelsen

Netcompany A/S

IT Consultant