Avatar billede fiil123 Nybegynder
16. marts 2005 - 22:38 Der er 24 kommentarer og
2 løsninger

Nyheds system laver selv nyheder

Jeg har "Lavet" et nyhedssytem ud fra et script jeg fandt herinde... men der er det problem at hvis man opdatere browseren mens man er på admin siden laver den selv en nyhed... hvordan kan man forhindre dette?
Avatar billede avminarm Juniormester
16. marts 2005 - 22:42 #1
man kan smide et hidden felt ind i selve formen som nyheden oprettes i og tjekke om dette er sat inden der indsættes i databasen
Avatar billede bromer Nybegynder
16. marts 2005 - 22:43 #2
du kan også indsætte et redirect lige efter du har tilføjet nyheden til databasen. På den måde bliver formen ikke gensendt når du reloader.
Avatar billede fiil123 Nybegynder
16. marts 2005 - 22:44 #3
Hov plus at id bare vokser og vokser selv om man sletter nyheden har dette nogen betydning for min database?
Avatar billede bromer Nybegynder
16. marts 2005 - 22:45 #4
Det er en okay måde databasen opfører sig på, det bør du ikke tænke videre over.
Avatar billede fiil123 Nybegynder
16. marts 2005 - 22:47 #5
jeg er totalt neeeewbi i det her men det men det bromer forslå lyder som en god ide: admin.php:
<FORM action="admin.php" method="POST">
<TABLE>

<tr>
<td><INPUT type="text" name="titel" value="Nyhedens titel"></td>
</tr>

<tr>
<td><TEXTAREA name="nyhed" rows="15" cols="30">Din nyhed her</TEXTAREA></td>
</tr>

<tr>
<td><INPUT type="text" name="forfatter" value="Skrevet af"></td>
</tr>

<tr>
<td><INPUT type="submit" name="indset" value="Opret Nyhed"></td>
</tr>

</TABLE>
</FORM>

<?PHP

//dbconnet indeholder login opl. til db
$dato = date("j, n, Y");
$titel = $_POST[titel];
$nyhed = $_POST[nyhed];
$forfatter = $_POST[forfatter];



if(isset($titel)) {
    include("dbconnect.php");
    mysql_query("INSERT INTO nyheder (titel, nyhed, forfatter, dato) VALUES ('$titel','$nyhed','$forfatter','$dato')") or die(mysql_error());
}
?>

<?PHP
if($_GET['function'] == "slet") {
    include("dbconnect.php");
    mysql_query("DELETE FROM nyheder WHERE id = '$_GET[id]'") or die(mysql_error());
}


include("dbconnect.php");
$res = mysql_query("SELECT * FROM nyheder") or die(mysql_error());

        while ($row = mysql_fetch_array($res)) {
            echo "$row[id] $row[titel]&nbsp;";
            echo "<a href='admin.php?function=slet&id=$row[id]'>Slet</a>";
            echo "<br>";
        }
?>

<A href="show_news.php">vis nyheder</a>
Avatar billede fiil123 Nybegynder
16. marts 2005 - 22:49 #6
omkring databasen så oki... så glemmer jeg det bare:0)
Avatar billede avminarm Juniormester
16. marts 2005 - 22:52 #7
er alt dette i samme fil?
Avatar billede fiil123 Nybegynder
16. marts 2005 - 22:55 #8
ja d r d!
Avatar billede avminarm Juniormester
16. marts 2005 - 22:56 #9
ok hvis det skal være som bromer foreslår:

<?PHP

//dbconnet indeholder login opl. til db
$dato = date("j, n, Y");
$titel = $_POST[titel];
$nyhed = $_POST[nyhed];
$forfatter = $_POST[forfatter];



if(isset($titel)) {
    include("dbconnect.php");
    mysql_query("INSERT INTO nyheder (titel, nyhed, forfatter, dato) VALUES ('$titel','$nyhed','$forfatter','$dato')") or die(mysql_error());
    header("location: ".$_SERVER['PHP_SELF']."");
}
?>

<FORM action="admin.php" method="POST">
<TABLE>

<tr>
<td><INPUT type="text" name="titel" value="Nyhedens titel"></td>
</tr>

<tr>
<td><TEXTAREA name="nyhed" rows="15" cols="30">Din nyhed her</TEXTAREA></td>
</tr>

<tr>
<td><INPUT type="text" name="forfatter" value="Skrevet af"></td>
</tr>

<tr>
<td><INPUT type="submit" name="indset" value="Opret Nyhed"></td>
</tr>

</TABLE>
</FORM>

<?PHP
if($_GET['function'] == "slet") {
    include("dbconnect.php");
    mysql_query("DELETE FROM nyheder WHERE id = '$_GET[id]'") or die(mysql_error());
}


include("dbconnect.php");
$res = mysql_query("SELECT * FROM nyheder") or die(mysql_error());

        while ($row = mysql_fetch_array($res)) {
            echo "$row[id] $row[titel]&nbsp;";
            echo "<a href='admin.php?function=slet&id=$row[id]'>Slet</a>";
            echo "<br>";
        }
?>

<A href="show_news.php">vis nyheder</a>
Avatar billede fiil123 Nybegynder
16. marts 2005 - 22:59 #10
hvad ændre det at han flytter rundt på rækkefølgen?
Avatar billede avminarm Juniormester
16. marts 2005 - 23:00 #11
det er fordi når man benytter header funktione i php til at redirecte med må der INTET output komme til skærmen før headerfunktionen aktiveres - så derfor ;o)
Avatar billede avminarm Juniormester
16. marts 2005 - 23:03 #12
faktisk ville dette være bedre:
<?PHP
//dbconnet indeholder login opl. til db
$dato = date("j, n, Y");
$titel = $_POST[titel];
$nyhed = $_POST[nyhed];
$forfatter = $_POST[forfatter];

if(isset($titel)) {
    include("dbconnect.php");
    mysql_query("INSERT INTO nyheder (titel, nyhed, forfatter, dato) VALUES ('$titel','$nyhed','$forfatter','$dato')") or die(mysql_error());
    header("location: ".$_SERVER['PHP_SELF']."");
}
if($_GET['function'] == "slet") {
    include("dbconnect.php");
    mysql_query("DELETE FROM nyheder WHERE id = '$_GET[id]'") or die(mysql_error());
    header("location: ".$_SERVER['PHP_SELF']."");
}
?>

<FORM action="admin.php" method="POST">
<TABLE>

<tr>
<td><INPUT type="text" name="titel" value="Nyhedens titel"></td>
</tr>

<tr>
<td><TEXTAREA name="nyhed" rows="15" cols="30">Din nyhed her</TEXTAREA></td>
</tr>

<tr>
<td><INPUT type="text" name="forfatter" value="Skrevet af"></td>
</tr>

<tr>
<td><INPUT type="submit" name="indset" value="Opret Nyhed"></td>
</tr>

</TABLE>
</FORM>

<?PHP
include("dbconnect.php");
$res = mysql_query("SELECT * FROM nyheder") or die(mysql_error());

        while ($row = mysql_fetch_array($res)) {
            echo "$row[id] $row[titel]&nbsp;";
            echo "<a href='admin.php?function=slet&id=$row[id]'>Slet</a>";
            echo "<br>";
        }
?>

<A href="show_news.php">vis nyheder</a>
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:04 #13
det forstod jeg ikke meget af... men hvad betyder det når nu det virker:0) Så kanont ved ikke om der er et hurtigt svar til dette eller om jeg skal lave endnu et sprøgsmål... men er det nemt at indsætte så der kun kan være f.eks 5 nyheder! og når man skriver nummer 6 så bliver den ældste slettet?
Avatar billede bromer Nybegynder
16. marts 2005 - 23:08 #14
Det kan du for min skyld godt have i denne tråd. Det er en dårlig løsning at slette de gamle, da du istedet kan nøjes bare med at vise de 5 nyeste. Det kan jo være at der kommer et tidspunkt, hvor du gerne vil se på de gamle nyheder.
Avatar billede bromer Nybegynder
16. marts 2005 - 23:10 #15
fiil123: Det med rækkefølen gør skyldes at HTTP protokollen kræver af headers bliver sendt som det første når en side loades. Hvis du derfor udskriver noget på sitet før du sender header'en bryder du denne regel og får en fejl.
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:11 #16
bare lige så det er på det rene så er pointene dine... skal man så smide de gamle i et arkiv? kunne det evt gøre sådanne at man kun f.eks viser 5 nyheder resten bliver smidt i et arkiv man kun kan få adgang til fra admin siden?
Avatar billede bromer Nybegynder
16. marts 2005 - 23:14 #17
Et eller andet sted viser du vel dine nyheder ikke? Der må du have en SQL streng der minder om denne:

SELECT * FROM nyheder ORDER BY dato DESC

hvis du ændrer den til

SELECT * FROM nyheder ORDER BY dato DESC LIMIT 5

er det kun de sidste 5 nyheder der bliver vist til brugerne. Men som admin kan du se dem alle sammen. Det handler altså ikke om at gamle nyheder rent faktisk bliver flyttet, idet du bare vælger ikke at vise dem.
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:16 #18
Jeg bruger dette
<?PHP
include("news/dbconnect.php");

$res = mysql_query("SELECT * FROM nyheder order by id desc") or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
    echo "Dato $row[dato]<br>";
    echo "Titel $row[titel]<br>";
    echo "Nyhed $row[nyhed]<br>";
    echo "Skrevet af.. $row[forfatter]";
    echo "<br>";
    echo "<br>";
   
}
?>
Avatar billede bromer Nybegynder
16. marts 2005 - 23:19 #19
Okay. hvis du sætter LIMIT 5 på din query viser du kun de 5 nyeste:

<?PHP
include("news/dbconnect.php");

$res = mysql_query("SELECT * FROM nyheder order by id desc limit 5") or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
    echo "Dato $row[dato]<br>";
    echo "Titel $row[titel]<br>";
    echo "Nyhed $row[nyhed]<br>";
    echo "Skrevet af.. $row[forfatter]";
    echo "<br>";
    echo "<br>";
 
}
?>
hvis du senere vil lave et side system kan du benytte offset:

<?PHP
include("news/dbconnect.php");

$res = mysql_query("SELECT * FROM nyheder order by id desc limit 5 offset 5") or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
    echo "Dato $row[dato]<br>";
    echo "Titel $row[titel]<br>";
    echo "Nyhed $row[nyhed]<br>";
    echo "Skrevet af.. $row[forfatter]";
    echo "<br>";
    echo "<br>";
 
}
?>

den viser nyhed nr 5 til 10
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:23 #20
go stil der virker jo intet mindre en perfekt... så tror jeg det var det for denne gang... smid et svar og få dinne meget velfortjente point
Avatar billede avminarm Juniormester
16. marts 2005 - 23:24 #21
smider lige et svar
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:26 #22
jamen der r jo faktisk 2 der har svaret på det her... hmm damn?
Avatar billede bromer Nybegynder
16. marts 2005 - 23:29 #23
og her.. så er det jo godt at man kan dele :)
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:33 #24
kanont og tak for hjælpen der sparede mig for mange mange timer...
Avatar billede bromer Nybegynder
16. marts 2005 - 23:36 #25
så lidt
Avatar billede fiil123 Nybegynder
16. marts 2005 - 23:40 #26
hov kom til at tænke på at på min admin side bliver nyhederne vist i en laaang liste ned af siden, er det svær at sætte det i sidder af max 10 nyheder?
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