Door
cas wolters
op 03-02-2015 15:36
gewijzigd op 03-02-2015 15:37
2.872 views
Hallo,
Ik heb een form. gemaakt die (nieuws) berichten naar de database stuurt.
Nu is mijn vraag hoe kan ik een nieuwsbericht bewerken met behulp van het bericht ID? Ik heb op verschillende forums gelezen dat ik dan moet werken met "get id" nog wat...
Vergeet het hele OOP gedoe van Thomas. Het is goed bedoeld, maar behoorlijk een flinke pak voor een beginner.
Ikzelf werkte met switch() in mijn beheerpaneel. Elke switch is een actie binnen een module (nieuws, gebruikers, reviews etc..)
review.php
<?php
if(isset($_GET['action'])){
switch($_GET['action']) {
case "add":
echo "Wijzig hier je reviews";
break;
case "edit":
echo "Edit hier je review";
break;
case "delete":
echo "Delete hier je review";
break;
}
} else {
echo "Er is geen actie bekend.";
}
?>
De methode van Aar is een mogelijkheid maar je kunt het ook bij losse pagina's houden. Op een aantal kleine nadeeltjes na is er echt helemaal niets mis mee.
De news_new.php heb je al en is bedoeld om een nieuw nieuws artikel aan de database toe te voegen.
Begin nu gewoon met news_index.php waarbij je de titels ziet staan van alle nieuwsberichten. Dan moet je daarna op een titel kunnen klikken om deze te bewerken en wordt je dus doorgestuurd naar news_edit.php (zie mijn vorige post)
Vergeet het hele OOP gedoe van Thomas. Het is goed bedoeld, maar behoorlijk een flinke pak voor een beginner.
Om te weten hoe je een auto moet besturen hoef je toch ook niet de volledige werking van een verbrandingsmotor uiteen te kunnen zetten? Ik bied een raamwerk en leg stap voor stap uit hoe dit in grote lijnen werkt. Je hoeft verder niet te begrijpen hoe dit werkt, je kunt binnen je methoden je eigen ding doen (dit heb ik al uitgelegd in mijn reactie...).
Als je deze mate van abstractie niet eigen bent... dan kun je beter helemaal bij het begin beginnen (en probeer dan ook meteen dingen structureel aan te pakken).
Switch statement. Kan. Maar niet erg overzichtelijk wel? Verzandt snel in spaghetti-code (de if-elseif-else hel waar ik eerder op wees)
Losse bestanden. Kan. Maar maak dan op zijn minst een directory "news" aan om dingen enigszins te groeperen. Je wilt straks toch niet 550975235823592 bestanden in je webroot hebben staan? Daarnaast heb je dan evenveel "ingangen" in je applicatie als je bestanden hebt, ook niet erg handig uit oogpunt van veiligheid.
Maar goed, doe het maar zoals Aar en Frank beschrijven. Dan loop je misschien op een gegeven moment vanzelf tegen beperkingen aan en ga je je afvragen of het wellicht handiger of beter kan.
En als je dan "full circle" bent, lees dan mijn reacties nog een keer.
Gezien het om een beginner gaat, kan de uitleg van OOP wel interessant zijn, maar wel erg hoog gegrepen.
Verder is switch() daarentegen wel overzichtelijk. Als je tab's gebruikt dan valt het reuze mee.
Je kan je later, als je bekender bent in PHP, je meer verdiepen in OOP, en desnoods op een MVC-framework richten.
- Index.php (includes paginas uit de map inc)
- nieuws-add.php / index.php?page=nieuws-add
- nieuws-overzicht.php / index.php?page=nieuws-overzicht <-- Hier staat een hele overzicht met al mn posts.
- nieuws-edit.php Hier blijf ik dus haken...
Index.php
<?php include('../config.php'); ?>
<link href="../Styles/box.css" rel="stylesheet" type="text/css">
<link href="../Styles/style.css" rel="stylesheet" type="text/css">
<?php
$body_id = "news";
$body_class = "anymodus";
include('../layout/head.php');
?>
<div id="container">
<div id="content">
<div id="column1" class="column">
<?php include('menu.php'); ?>
</div>
<div id="column2" class="column">
<div class="toppie <?php $aTeksten = array( "blauw", "oranje", "groen", "rood"); echo $aTeksten[array_rand($aTeksten)]; ?>" style="padding-top:0px; width:530px; margin-left:10px;">
<?php
if (!isset($_GET['page'])) {
//url-variabele bestaat niet, geef beginpagina
include('inc/home.php');
}
else {
//url-variabele bestaat wel, definieer bestand
$page = 'inc/'.$_GET['page'].'.php';
if (file_exists($page)) {
//pagina bestaat, laat zien
include($page);
}
else {
//pagina bestaat niet
echo 'De opgevraagde pagina bestaat niet.';
}
}
?>
</div></div>
<div id="column3" class="column">
</div>
<?php
include('../layout/footer.php');
?>
Voorzetje, pakt enkel nog $id=1. Probeer hier met mijn eerste post eens te kijken of je het $_GET['id'] verhaal er zelf in kunt verwerken. Maar eerst even testen of dit goed werkt, zo niet nog even aanpassen en zorgen dat je dit zover begrijpt.
suc6.
php gedeelte van nieuws-edit.php:
<?php
// als de pagina in de post methode is aangeroepen is het edit-formulier dus verzonden en moeten we de nieuwe velden wegschrijven naar de database
if($_SERVER['REQUEST_METHOD'] == 'POST') {
mysql_query("UPDATE cms_news SET title = '".$title."', category = '".$category."', topstory = '".$topstory."', short_story = '".$short_story."', story = '".$story."' WHERE num = '".$num."' LIMIT 1") or die(mysql_error());
header('Location: index.php');
// anders gaan we het nieuwsartikel uit de database halen zodat we die kunnen gaan bewerken
} else {
$id = 1; // Dit moet later nog veranderen
$result = mysql_query('SELECT * FROM cms_news WHERE id=' . intval($id));
if(!result)
die('error: ' . mysql_error());
$article = mysql_fetch_assoc($result);
if(!$article) {
die('error: Geen rij gevonden voor id=' . intval($id));
}
}
?>
Nog even een heel simpel werkend voorbeeldje met $_GET omdat ik het gevoel heb dat het nog totaal onbekend is bij jou. Gewoon even opslaan als test.php:
<?php