31. juli 2006 - 21:50Der er
12 kommentarer og 1 løsning
Flere php actions på samme side
Hej
Jeg er ret ny i php og er ved at lave et lille nyheds cms.
I admin delen kan man vælge at få vist alle nyhederne samt muligheden for at "delete" eller "edit".
Jeg kan godt få det til at virke ved at have en delete_news.php og en edit_news.php side, men vil gerne samle de to i én. Således at jeg i linket sender en variabel med ex.
actions_news.php?go=delete&id=$id eller actions_news.php?go=edit&id=$id
Jeg kan godt få delete delen til at fungere, men jeg kan ikke få det til at fungere med edit da det jo indvolvere nogle textfiels osv.
nuværende news_actions.php:
<?php
include 'db.inc.php';
$go = $_GET['go'];
//IF DELETE if($go == "delete"){ $id = $_GET['id']; $ok = @mysql_query("DELETE FROM news_table WHERE id='$id'"); if ($ok) { echo '<p><h3>Deleted</h3></p>'; } else { echo '<p>Could not delete, sorry<br />'. 'Error: ' . mysql_error() . '</p>'; }
}
//IF EDIT if($go == "edit")
?>
Nuværende edit_news.php:
<?php
include 'db.inc.php';
if (isset($_POST['text'])):
$text = $_POST['text']; $id = $_POST['id']; $sql = "UPDATE news_table SET text='$text' WHERE id='$id'"; if (@mysql_query($sql)) { echo '<p>News updatet</p>'; } else { echo '<p>Sorry, could not update news: ' . mysql_error() . '</p>'; }
?>
<?php else: // Allow the user to edit the news
$id = $_GET['id']; $link = @mysql_query( "SELECT text FROM news_table WHERE id='$id'"); if (!$link) { exit('<p>Error fetching news details: ' . mysql_error() . '</p>'); }
Altså vil jeg gerne have "integreret" edit_news.php i news_actions.php Egentligt mest fordi jeg synes det er meget at have to sider til så lidt og selvfølgelig også for at lære noget:)
Jeg ville evt. starte med at dele GO op i en switch case f.eks.: switch($_GET['go']) { case 'edit': //her skal vi så redigere noget... break; case 'delete': //her skal vi så slette noget... break; default: //her gør vi noget, hvis noget kalder: side.php?go=nogetForkert }
Du kan rette: <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> til: <form action="<?php echo $_SERVER['PHP_SELF']; ?>?go=edit" method="post"> Så gemmer du din edit kode ved: //her skal vi så redigere noget... og så kører du videre! :o)
Du bør dog også tilføje noget sikkerhed. Bruger du et login system? Som det er nu, kan alle slette ved at kalde filen.php?go=delete&id=1 Ligesom sql injections er muligt. (jeg har dog tilføjet en smule ekstra sikkerhed)
Jeg bruger et simpelt login system, har bare ik tilføjet det endnu... Det er vist bare et der på hver side via et include script checker om man er logget ind...
Koden melder fejl i linje 38... unexpected '{', expecting ':' in ... line 38
Hvis jeg indsætter : istedet eller tilføjer : kommer der fejl længere nede og jeg ender med fejl i sidste linje.
Bliver nødt til at sove lidt, har kigget på de her koder alt alt for længe. Hvis du har tid til at se nærmere på det vil det være super ellers må jeg gå det hele igennem i morgen formiddag med friske øjne.
Hmm, kan sku ikke få det til at fungere eller finde fejlen... Hvis jeg følger de fejl den melder ender jeg ligegyldigt hvad jeg gør op med en unexpected $end i sidste linje...
Det eneste som er lidt underligt er at den skriver "could not delete" og "could not update" selvom den både kan slette og opdatere, ellers meget smukt:O)
Så hvis du har en idé til det vil det være fantastisk, ellers må du meget gerne smide et svar...
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.