Avatar billede halte Nybegynder
03. august 2012 - 13:20 Der er 8 kommentarer

$string = while() - kan man det?

Hej, jeg er ret ny til php, men er dog lykkedes for mig at lave et succesfuldt loop. Mit problem er nu hvordan jeg får dette dette loop gemt som en vektor ($string).

Mit script ser nogenlunde sådan her ud.

<?php

$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
mysql_select_db($db) or die ("Unable to select database!");
$query = "SELECT * FROM ...";
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());

while($row = mysql_fetch_row($result)) {
    $url = utf8_encode($row[1]);
    $name = ucwords($url);
    $href = "href=\"$url.html\"";
    $link = "<li><a $href>$name</a></li>";
    echo $link;
    echo "\n";
}

mysql_free_result($result);
mysql_close($connection);

?>

Åbner man php-filen i en browser, får man nu en lang liste med links der virker helt fint. Det jeg ønsker er nu at gemme denne liste af links på en vektor, $string, som jeg kan bruge i fwrite($fh, $string), så jeg kan smide listen ind hvor jeg har lyst til i andre som ikke understøtter php - er det muligt?

Jeg prøvede $string = while(....), men det virkede ikke :)

Håber mit spørgsmål giver mening, og at der er en der har lyst til at hjælpe.
Avatar billede michael_stim Ekspert
03. august 2012 - 14:06 #1
Ved ikke om jeg er med, men tænker du på at lægge din variabel ind i et array?

$string=array();

Og så inde i din while:

$string[]=$dinVariabel;
Avatar billede halte Nybegynder
03. august 2012 - 14:36 #2
jeg er ret ny til php, så tror ikke helt jeg forstår dit spørgsmål :(

hvis jeg åbner min php-fil i en browser nu, køres loop'et korrekt, og jeg for noget i stil med;

<li><a href="name1.html">Name1</a></li>
<li><a href="name2.html">Name2</a></li>
<li><a href="name3.html">Name3</a></li>

Men i stedet for at det vises i browseren, vil jeg hellere have det til at blive 'gemt' i min $string, så jeg kan bruge det i fwrite($fh, $string);
Man skal altså få ovenstående resultat ved at bruge

echo $string;

giver det mening?
Avatar billede michael_stim Ekspert
03. august 2012 - 14:44 #3
Næh, jeg forstår ikke. Du har jo allerede gemt din data i en database, så jeg forstår ikke hvor filen kommer ind i det hele???
Avatar billede halte Nybegynder
03. august 2012 - 14:59 #4
Altså jeg har jo lavet det der loop script som vist i første post, og det har jeg gemt i en php-fil (loop.php). Åbnes loop.php i en browser, køres scriptet/loop'et igennem, og man får vist 3 hyperlinks

Name1
Name2
Name3

som i kildekoden ser sådan her ud

<li><a href="name1.html">Name1</a></li>
<li><a href="name2.html">Name2</a></li>
<li><a href="name3.html">Name3</a></li>

Det beviser altså at mit loop virker. Jeg er dog ikke interesseret i at få det vist i min browser, men er interesseret i af få denne kildekode kopieret over i et .html dokument (index.html) som ikke er afhængig af at skulle bruge en browser.

Det jeg skal bruge det til er, at hver gang jeg indfører nu data i min MySQL database, så kører jeg scriptet igennem, hvilket resulterer i at min index.html vil er up-to-date med alt informationen i databasen

Det virker måske lidt gammeldags at lave det på den måde, men jeg er ret afhængig af at min index.html ikke indeholder noget PHP, og derfor er et script som dette eneste løsning jeg lige umiddelbart kan se.
Avatar billede olebole Juniormester
03. august 2012 - 15:02 #5
<ole>

Forstår du ikke Michael, skal du nok læse om helt grundlæggende PHP, før du roder dig ud i databaser og skrive filer. Begynd f.eks. med Arrays - og Array funktioner.

<?php
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
mysql_select_db($db) or die ("Unable to select database!");
$query = "SELECT * FROM ...";
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());

$aResult = array();
while($row = mysql_fetch_row($result)) {
    $url = utf8_encode($row[1]);
    $name = ucwords($url);
    $href = "href=\"$url.html\"";
    $aResult[] = "<li><a $href>$name</a></li>";
}

mysql_free_result($result);
mysql_close($connection);

// Så kan du udskrive indholdet af array'et på siden:
echo implode('', $aResult);

// - eller du kan udskrive det i en fil:
$fp = fopen('w', 'minfil.txt');
fwrite($fp, implode('', $aResult));
fclose();
?>

Derudover bør du få opdateret din databasekode, som er dybt forældet. I dag bruger man prepared statements under MySQLI eller PDO. Begynd evt. med denne guide.

Til slut forstår jeg ikke begrundelsen for denne linje:

$url = utf8_encode($row[1]);

Den bør der ikke være brug for, hvis du har styr på dit tegnsæt.

/mvh
</bole>
Avatar billede olebole Juniormester
03. august 2012 - 15:05 #6
Umiddelbart synes jeg nu også, det lyder lidt risikabelt at lade rodmappen/indexfilen være skrivbar
Avatar billede halte Nybegynder
03. august 2012 - 15:17 #7
tak for jeres begges svar. Dette er mit første php-projekt, og har arbejdet med det i to dage nu - Jeg satte mig selv for at lære PHP, og stillede mig derfor en opgave, og den er jeg meget tæt på at løse nu, så jeg forventer ikke at jeg leverer et helt optimalt produkt når jeg engang er færdig. Jeg vil nødig lyde utaknemlig, men det er derfor ikke så vigtigt for mig om min databasekode er forældet, da der kun er tale om et projekt der vil blive på en local server - altså en ren træningsopgave.

Det være sagt, vil jeg da selvfølgelig alligevel tage mig tid til at læse din guide igennem, for det må da alt andet lige være smartere at lære det nye med det samme, end at skulle til at indstille på det bagefter.

$url = utf8_encode($row[1]);  - brugte jeg til at slippe for underlige tegn ved æøå, der findes sikkert en smartere løsning, men den virkede for mig :)

men I har ingen løsning på mit problem, selvom det måske virker en smule tosset og gammeldags?
Avatar billede olebole Juniormester
03. august 2012 - 15:42 #8
"$url = utf8_encode($row[1]);  - brugte jeg til at slippe for underlige tegn ved æøå, der findes sikkert en smartere løsning, men den virkede for mig"

Så er der noget galt med din håndtering af tegnsæt. I din editor skal du sørge for, at filerne bliver gemt som utf-8 (uden BOM). Det gøres på forskellig måde i forskellige editors, så jeg kan ikke umiddelbart fortælle dig, hvordan du skal gøre det  =)

Dernæst skal du bruge en utf-8 meta i alle dine dokumenter med HTML i.

Desuden skal du sørge for, at din database er sat op til utf-8 - samt at dine databasetabeller har fået sat deres kollationer til utf8_danish_ci.

Disse ting skal være på plads! De vil skabe masser af problemer, hvis de ikke bliver adresseret.

Hvis tidsspilde ikke betyder noget for dig, betyder det ikke noget, din databasekode er forældet. Men da du naturligvis ikke har lyst til at spilde din ungdom på ubrugeligheder, kaster du dig selvfølgelig over prepared statements right away  *o)
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