Avatar billede backside Nybegynder
28. april 2004 - 23:02 Der er 12 kommentarer og
2 løsninger

Omvendt visning af "nyhed"

Jeg sidder lige og leger lidt, men har et problem jeg ikke kan løse.
Jeg har et simpelt system der skriver noget tekst til en fil.

<?php   
$message = $_POST['message'];
$headline = $_POST['headline'];
$fp = fopen("newswrite.php" , "a+");
fputs($fp ,"
<div align=\"center\">
  <center>
<table border=\"0\" width=\"100%\" style=\"border: 1 solid #000000\"><tr>
    <td class=\"content\" width=\"100%\" style=\"border: 1 solid #000000\" bgcolor=\"#f3f3f3\"><b>$headline</b></td>
  </tr>
<tr><td class=\"content\">$message</td></tr></table></center>
</div><br>

");
fclose($fp);
?>

Virker også fint med at skrive til filen, men jeg vil gerne ha' det vist omvendt. Det vises sådan her nu:
www.backside.dk/030/newswrite.php

Jeg vil gerne ha' det sidst tilføjet tekst til at stå øverst.

Hvordan kringler jeg den?
Avatar billede jakoba Nybegynder
28. april 2004 - 23:11 #1
når filen skal skrives:

$filarray = file( "newswrite.php" );
$omvendt = array_reverse($filarray);  // vend så det er bagfra.
echo inplode( "", $omvendt );

bemærk at $filarray får een celle for hvert linieskift, så vhis du fx har et linieskift imellem nyhedsoverkrift og nyhedstekst, så bliver overskriften skrevet nederst. der skal kun være eet linieskift til allersidst i hver nyhed.

mvh JakobA
Avatar billede dennismp Nybegynder
28. april 2004 - 23:12 #2
Må jeg foreslog en anden måde at gribe det an? Well. Here goes :-)

Ændre dit script til
<?php
$message = $_POST['message'];
$headline = $_POST['headline'];
$fp = fopen("news.php" , "a+");
fputs($fp, '$news[] = array('headline' => "' . $headline . '", 'message' => "' . $message . "\");\n");
fclose($fp);
?>

det skulle gerne give rækker i filen som
$news[] = array('headline' => 'test1', 'message' => 'jeg tester');
...

i dit newswrite.php skriver du så
<?php
eval(file_get_contents('news.php')); // dette gør, at vi får udført php-koden, nu kan vi bruge $news som vi har lyst til

  for($i=count($news);$i>=0;$i--) {
    print <<<EOF;
<div align="center">
  <center>
<table border="0" width="100%" style="border: 1 solid #000000"><tr>
    <td class="content" width="100%" style="border: 1 solid #000000" bgcolor="#f3f3f3"><b>{$news[$i]['headline']}</b></td>
  </tr>
<tr><td class="content">{$news[$i]['message']}</td></tr></table></center>
</div><br>
EOF;
  }
Avatar billede dennismp Nybegynder
28. april 2004 - 23:14 #3
Min løsning kræver dog, at folk som du har tillid tilføjer nyheder - i tilfælde at jeg har lavet et hul.

Fx ret
fputs($fp, '$news[] = array('headline' => "' . $headline . '", 'message' => "' . $message . "\");\n");
til
fputs($fp, '$news[] = array('headline' => "' . addslashes($headline) . '", 'message' => "' . addslashes($message) . "\");\n");
Avatar billede dennismp Nybegynder
28. april 2004 - 23:15 #4
Det er nok bedst du bruger jacoba's måde - han digter ikke (videre på opgaven)  ligesom jeg gør til tider :)
Avatar billede backside Nybegynder
28. april 2004 - 23:15 #5
Jeg har en login funktion til at tilføje.

Ser lige på jeres forslag.
Avatar billede Slettet bruger
28. april 2004 - 23:22 #6
Jeg ville nok vælge at skrive "nyhederne" til tekstfilen uden nogen som helst form for formattering, da du så senere kan bruge dem selvom du skifter layout på siden.

$nyhed = ($headline."¤".$message."\r\n")
fputs($fp, $nyhed)

På den måde får du hver "nyhed" på sin egen linje, og med headline og message adskilt af ¤.

Du kan så hente nyhederne ind på følgende måde:

    $nyheder = file("nyhed.txt");
    $nyheder_reversed = array_reverse($nyheder);
    $nyhedscount = count($nyheder);

    if($nyhedscount === 0)
      {
        // Der er ingen nyheder.
      }
      else
      {
        foreach ($nyheder as $value =>$key)
          {
            $nyheds_array = explode("¤",$nyheder[$value]);

              $indhold = ("
                <div align=\"center\">
                  <center>
                    <table border=\"0\" width=\"100%\" style=\"border: 1 solid #000000\">
                      <tr>
                        <td class=\"content\" width=\"100%\" style=\"border: 1 solid #000000\" bgcolor=\"#f3f3f3\"><b>$nyheds_array[0]</b></td>
                      </tr>
                      <tr>
                        <td class=\"content\">$nyheds_array[1]</td>
                      </tr>
                    </table>
                  </center>
                </div>
                <br>
              ");
          }
      }
Avatar billede dennismp Nybegynder
28. april 2004 - 23:22 #7
backside, brug jacobas måde. Jeg kan ikke lide de risiko elementer der kan være, hvis en gut får smidt noget php ind..  Jeg har ikke tænkt mig om - beklager roderiet.

Men her er en der er bedre. Den burde ikke have de samme problemer.
<?php
$message = $_POST['message'];
$headline = $_POST['headline'];
$fp = fopen("news.data" , "a+");
fputs($fp, $headline . "\1" . $message . "\n");
fclose($fp);
?>


i dit newswrite.php skriver du så
<?php
$news = file('news.data');

for($i=count($news);$i>=0;$i--) {
  list($headline,$message) = explode("\1",$count[$i]);
  print <<<EOF;
<div align="center">
  <center>
<table border="0" width="100%" style="border: 1 solid #000000"><tr>
    <td class="content" width="100%" style="border: 1 solid #000000" bgcolor="#f3f3f3"><b>$headline</b></td>
  </tr>
<tr><td class="content">$message</td></tr></table></center>
</div><br>
EOF;
  }
?>

Forskellen fra denne og din/jakobas måde er, at designet holdes væk fra din nyhedsfil .. og bliver først tilføjet når det vises. Så hvis du ændre design, så skal du kun ændre det een gang i newswrite.php .. og ikke en gang pr. nyhed..
Avatar billede Slettet bruger
28. april 2004 - 23:22 #8
He, da jeg begyndte at skrive, var der ikke andre der havde skrevet noget *g*
Avatar billede backside Nybegynder
28. april 2004 - 23:51 #9
Kan ikke få noget af det til at virke.
Vender tilbage når jeg opgiver. Foreløbig tak.
Avatar billede backside Nybegynder
29. april 2004 - 00:38 #10
Jeg opgiver, min malerhjerne koger over. :(
Har lige smidt en test her med jakoba's forslag:
http://www.backside.dk/030/tmp/rediger.php
Login: test/test

Og koderne her:
http://www.backside.dk/030/tmp/rediger.txt
http://www.backside.dk/030/tmp/newsform.txt
Avatar billede d-u-k Praktikant
29. april 2004 - 20:41 #11
til ==(kfisker) du skal have nogle point af mig, lig et svar på

http://www.eksperten.dk/spm/466820#rid4448609
Avatar billede backside Nybegynder
29. april 2004 - 20:49 #12
d-u-k>> Måske det ville være bedre for alle parter hvis du smed den slags i brugerens EGNE spørgsmål.
Avatar billede backside Nybegynder
04. maj 2004 - 12:58 #13
Er der en der kan hjælpe lidt mere?
Avatar billede backside Nybegynder
08. maj 2004 - 22:25 #14
Jeg opgav det helt. Lukker igen.
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