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...

Wie kan mij helpen? Of een start maken?

<?php

$pagetitle = "Maak nieuw artikel";

include ("../config.php");


if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) 
  { 
    $aFouten = array(); 
    if($_POST['title'] == '') 
      { 
        $aFouten[] = 'Je hebt geen titel ingevuld!'; 
      } 
    if($_POST['category'] == '') 
      { 
        $aFouten[] = 'Je hebt geen categorie gekozen!'; 
      } 
    if($_POST['story'] == '') 
      { 
        $aFouten[] = 'Je hebt geen bericht ingevuld'; 
      } 
       
        if(count($aFouten) != 0) 
          { 
            echo 'De volgende fouten zijn opgetreden: <br /><br />'; 
            for($Fi = 0; $Fi < count($aFouten); $Fi++) 
              { 
                echo $aFouten[$Fi].'<br />'; 
              } 
            echo '<br />Klik <a href="javascript:history.go(-1);">hier</a> om terug te keren'; 
          } 
        else 
          { 
          mysql_query("INSERT INTO cms_news (title,category,topstory,short_story,story,author,date) VALUES ('".addslashes($_POST['title'])."','".addslashes($_POST['category'])."','".addslashes($_POST['story'])."','".addslashes($_POST['author'])."','".$_POST['date']."')") or die (mysql_error()); 
           
          echo '<h2 class="title">Jou bericht is gepubliceerd!</h2>'; 
          } 
       
  } 
else 
  { 
?>
		
			
<h2 class="title">Schrijf een e-mail bericht</h2>
<form method="post" action="index.php?page=add-nieuws">
				<p><label for="titel">Titel:</label><br>

				<input type="text" name="title" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Jou naam':this.value;" value="titel" /></p>

  
  <p><label for="author">Categorie:</label><br>

    <label>
      <input type="checkbox" name="category" value="Onderwijs" id="category_1">
      Onderwijs</label>
    <br>
    <label>
      <input type="checkbox" name="category" value="Nieuws" id="category_2">
      Nieuws</label>
    <br>
  </p>


<p><label for="bericht">Bericht:</label><br>
<textarea name="story" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Typ hier jou bericht....':this.value;" class="your-message">Typ hier jou bericht...</textarea></p>
				
<p><label for="author">Schrijver:</label><br>
<input type="text" name="author" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Onderwerp':this.value;" value="author" /></p>
      
<p><label for="date">Date:</label><br>
<input type="date" name="date" value="
" id="date"></p>
<input type="submit" value="Verstuur e-mail" class="send-message">
				
</form>
<?
}
?>
		</div>
			
			

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.

Zo kun je deze php bestanden in het leven roepen:


news_index.php
news_edit.php
news_show.php
news_new.php


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.
Zucht, het is me te moeilijk :S!

Ik heb nu t volgende:

- 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');

?>


nieuws-add.php

<?php

$pagetitle = "Maak nieuw artikel";



if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) 
  { 
    $aFouten = array(); 
    if($_POST['title'] == '') 
      { 
        $aFouten[] = 'Je hebt geen titel ingevuld!'; 
      } 
    if($_POST['category'] == '') 
      { 
        $aFouten[] = 'Je hebt geen categorie gekozen!'; 
      } 
    if($_POST['story'] == '') 
      { 
        $aFouten[] = 'Je hebt geen bericht ingevuld'; 
      } 
       
        if(count($aFouten) != 0) 
          { 
            echo 'De volgende fouten zijn opgetreden: <br /><br />'; 
            for($Fi = 0; $Fi < count($aFouten); $Fi++) 
              { 
                echo $aFouten[$Fi].'<br />'; 
              } 
            echo '<br />Klik <a href="javascript:history.go(-1);">hier</a> om terug te keren'; 
          } 
        else 
          { 
          mysql_query("INSERT INTO cms_news (title,category,topstory,short_story,story,author,date) VALUES ('".addslashes($_POST['title'])."','".addslashes($_POST['category'])."','".addslashes($_POST['topstory'])."','".addslashes($_POST['short_story'])."','".addslashes($_POST['story'])."','".addslashes($_POST['author'])."','".$_POST['date']."')") or die (mysql_error()); 
           
          echo '<h2 class="title">Jou bericht is gepubliceerd!</h2>'; 
          } 
       
  } 
else 
  { 
?>
        
            
<h2 class="title">Schrijf een e-mail bericht</h2>
<form method="post" action="index.php?page=add-nieuws">
                <p><label for="titel">Titel:</label><br>

                <input type="text" name="title" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Jou naam':this.value;" value="titel" /></p>
 <p><label for="titel">Topstory:</label><br>

                <input type="text" name="topstory" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Jou naam':this.value;" value="topstory" /></p>

  
  <p><label for="author">Categorie:</label><br>

    <label>
      <input type="checkbox" name="category" value="Onderwijs" id="category_1">
      Onderwijs</label>
    <br>
    <label>
      <input type="checkbox" name="category" value="Nieuws" id="category_2">
      Nieuws</label>
    <br>
  </p>
<p><label for="bericht">K Bericht:</label><br>
<textarea name="short_story" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Typ hier jou bericht....':this.value;" class="your-message">Typ hier jou bericht...</textarea></p>

<p><label for="bericht">Bericht:</label><br>
<textarea name="story" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Typ hier jou bericht....':this.value;" class="your-message">Typ hier jou bericht...</textarea></p>
                
<p><label for="author">Schrijver:</label><br>
<input type="text" name="author" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'Onderwerp':this.value;" value="author" /></p>
      
<p><label for="date">Date:</label><br>
<input type="date" name="date" value="
" id="date"></p>
<input type="submit" value="Verstuur e-mail" class="send-message">
                
</form>
<?
}
?>
        </div>
            
            


nieuws-overzicht.php

<table cellpadding='4' cellspacing='0' width='100%'>
 <tr>
  <td class='tablesubheader' width='1%' align='center'>ID</td>
  <td class='tablesubheader' width='28%'>Title</td>
  <td class='tablesubheader' width='10%' align='center'>Date</td>
  <td class='tablesubheader' width='10%' align='center'>Author</td>
  <td class='tablesubheader' width='10%' align='center'>Edit</td>
  <td class='tablesubheader' width='12%' align='center'>Delete</td>
 </tr>
<?php
$get_articles = mysql_query("SELECT num,title,short_story,date,author FROM cms_news ORDER BY num DESC") or die(mysql_error());

while($row = mysql_fetch_assoc($get_articles)){
	printf(" <tr>
  <td class='tablerow1' align='center'>%s</td>
  <td class='tablerow2'><strong>%s</strong><div class='desctext'>%s</div></td>
  <td class='tablerow2' align='center'>%s</td>
  <td class='tablerow2' align='center'>%s</td>
  <td class='tablerow2' align='center'><a href='link met id %s'>bewerk</a></td>
  <td class='tablerow2' align='center'><a href='link met id %s'>delete</a></td>															
</tr>", $row['num'], $row['title'], $row['short_story'], $row['date'], $row['author'], $row['num'], $row['num']);
}
?>
 
 </table>


Nu weet ik t ff niet meer :S,
Vanuit dit bestand moet ik de berichten kunnen bewerken..

nieuws-edit.php


<?php
$num = $key;
		$title = $_POST['title'];
		$category = $_POST['category'];
		$topstory = $_POST['topstory'];
		$short_story = $_POST['short_story'];
		$story = $_POST['story'];
		$num = $_POST['id'];

		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());


?>
<form action='index.php?page=nieuws-edit' method='post'>
<div class='tableborder'>
<div class='tableheaderalt'>Bewerk: (<?php echo $article['title']; ?>)</div>

<table width='100%' cellspacing='0' cellpadding='5' align='center' border='0'>
<tr>
<td class='tablerow1'  width='40%'  valign='middle'><b>Title</b><div class='graytext'>The full title of your article.</div></td>
<td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='title' value="<?php echo $article['title']; ?>" size='30' class='textinput'></td>
</tr>

<tr>
<td class='tablerow1'  width='40%'  valign='middle'><b>News Category</b></td>
<td class='tablerow2'  width='60%'  valign='middle'><select name='category' class='dropdown'><option value='Onderwijs' <?php if($article['category'] == "Onderwijs"){ echo 'selected'; } ?>>Onderwijs</option>  </select> 
</td>
</tr>

<tr>
<td class='tablerow1'  width='40%'  valign='middle'><b>Topstory</b><div class='gray text'>topstory.</div></td>
<td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='topstory' value="<?php echo $article['topstory']; ?>" size='30' class='textinput'></td>
</tr>

<tr>
<td class='tablerow1'  width='40%'  valign='middle'><b>Short Story</b><div class='graytext'>A small introduction to the article.<br />HTML is not allowed here.</div></td>
<td class='tablerow2'  width='60%'  valign='middle'><textarea name='short_story' cols='60' rows='5' wrap='soft' id='sub_desc'   class='multitext'><?php echo $article['short_story']; ?></textarea></td>
</tr>

<tr>
<td class='tablerow1'  width='40%'  valign='middle'><b>Story</b><div class='graytext'>The actual news message.<br />HTML is allowed here.</div></td>
<td class='tablerow2'  width='60%'  valign='middle'><textarea name='story' cols='60' rows='5' wrap='soft' id='sub_desc'   class='multitext'><?php echo $article['story']; ?></textarea></td>
</tr>

<tr>
<tr><td align='center' class='tablesubheader' colspan='2' ><input type='submit' value='Update Article' class='realbutton' accesskey='s'></td></tr>
</form></table>


Op een of andere manier krijg ik mn berichten niet te zien, en ik weet niet hoe ik kan aangeven welk bericht id hij moet gaan bewerken.
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') {

$num = $key;
$title = $_POST['title'];
$category = $_POST['category'];
$topstory = $_POST['topstory'];
$short_story = $_POST['short_story'];
$story = $_POST['story'];
$num = $_POST['id'];

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));
}
}
?>
Zet dit bovenin je script;

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest
?>
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

$name = 'onbekend';
$age = 'onbekend';

if(isset($_GET['name']))
$name = $_GET['name'];

if(isset($_GET['age']))
$age = $_GET['age'];

echo 'Naam: ' . $name . '<br>';
echo 'Leeftijd: ' . $age . '<br>';

?>
Dan in de browser het volgende proberen:

http://localhost/test.php?name=frank
http://localhost/test.php?age=99
http://localhost/test.php?name=Cas&age=88
http://localhost/test.php?name=Cas&age=88&city=Leiden

Lekker spelen er mee :-)

Reageren