Berichten in nieuwssysteem Wijzigen en Verwijderen

  • Onderwerp starter Onderwerp starter jseub
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

jseub

Gebruiker
Lid geworden
28 jun 2012
Berichten
10
Hallo Allemaal,

Voor mijn site ben ik bezig met een nieuwssysteem, wat ik nu kan is de berichten laten zien in blogopmaak, en nieuwe berichten toevoegen in de database.
Wat ik ook nog wil, is de berichten kunnen wijzigen en verwijderen.

Op de wijzig-pagina moet een formulier komen met alles van het desbereffende bericht al ingevuld, zodat ik eventuele typefoutjes, etc. kan wijzigen.

Ik ben een noob in php en probeer het te leren.

Mijn vraag is: Heeft iemand toevallig zo'n scriptje liggen of kan mij helpen?

Alvast Bedankt,
 
Dat is opzicht niet zo heel moeilijk.

Maak eerst een database verbinding, vraag de gewenste rij op door bijv deze query:
"SELECT * FROM nieuwsberichten WHERE id=2"

Deze query uitvoeren en de resultaten verwerken.

Heel simpel geschreven:
PHP:
<?php
// database connectie maken
mysql_connect(....)

$sql = "SELECT * FROM nieuwsberichten WHERE id=5";
$obj = mysql_query($sql);
if(mysql_num_rows($obj) == 0)
{
 //Geen resultaten
echo "het nieuwsbericht dat u zoekt bestaat niet";
}
else
{
$obj = mysql_fetch_assoc($obj);
print_r($obj);
}
?>

In de obj staan nu de velden van je tabel. Stel je hebt een veld die 'inhoud' heet, kan je die zo weergeven in een textvak:
PHP:
<textarea name="inhoud" rows="2" cols="20">
<?php
echo $obj['inhoud'];
?>
</textarea>

Voor het opslaan van de data moet je een query gebruiken die lijkt op:
PHP:
$sql = "UPDATE nieuwsberichten SET inhoud='".mysql_real_escape_string($_POST['inhoud'])."' WHERE id=5";

Ik hoop dat je hiermee wat verder komt, zo nee dan hoor ik het wel :).
 
Laatst bewerkt:
Alvast bedankt voor je hulp,

Alleen nog één vraagje; de pagina ziet er alsvolgd uit: www.sundaybreak.nl/nieuws
Nu zet ik per bericht dan een update-icoontje neer, met een link naar de bewerkpagina, alleen hoe geef ik dan de id van het bericht mee en voer dat in op de bewerk pagina?
 
Alvast bedankt voor je hulp,

Alleen nog één vraagje; de pagina ziet er alsvolgd uit: www.sundaybreak.nl/nieuws
Nu zet ik per bericht dan een update-icoontje neer, met een link naar de bewerkpagina, alleen hoe geef ik dan de id van het bericht mee en voer dat in op de bewerk pagina?

In de link kun je bijvoorbeeld dit doen: <a href="nieuwsbericht-updaten.php?id=HIER HET ID MEEGEVEN></a>
Bij de bewerk pagina gebruik je voor het opvragen en controleren $_GET['id'].
 
Het werkt niet, nouja het opvragen wel, maar niet als ik de id probeer op te halen met een variabele..

Code die neit werkt.

PHP:
<?php
	$id=$_GET['id'];
	
	$fetch_array=mysql_query("SELECT id, sortering, week, jaar, berichtnr, titel, bericht, UNIX_TIMESTAMP(date) FROM nieuws_berichten WHERE id ='$id' ");
	
	while($nieuws=mysql_fetch_array($fetch_array)){
	?>

Het volgende werkt wel:

PHP:
<?php
	$id=$_POST['id'];
	
	$fetch_array=mysql_query("SELECT id, sortering, week, jaar, berichtnr, titel, bericht, UNIX_TIMESTAMP(date) FROM nieuws_berichten WHERE id ='5'");
	
	while($nieuws=mysql_fetch_array($fetch_array)){
	?>
 
Laatst bewerkt:
Op jou manier zal die zoeken naar een record met die als id '$id' heeft (PHP vult dus niks in voor $id), wat je moet hebben is dit:

PHP:
$fetch_array=mysql_query("SELECT id, sortering, week, jaar, berichtnr, titel, bericht, UNIX_TIMESTAMP(date) FROM nieuws_berichten WHERE id ='".mysql_real_escape_string($id)."' ");
Je kan eventueel ook {$id} neerzetten, maar dan zou ik wel daarboven $id = mysql_real_escape_string($_GET['id']); neerzetten.
En het moet $_GET['id'] zijn als je het ID meegeeft als ?id=5, als je het als via het formulier als field meegeeft zal je wel idd $_POST moeten gebruiken.

Btw, een tip om dit soort dingen te testen is gewoon de query die je met PHP genereert te echoën en dan handmatig uit te voeren in phpmyadmin bijvoorbeeld. En je hoeft in dit geval ook niet while($obj.....) te doen, aangezien je (mag ik hopen) maar 1 nieuwsbericht hebt met dat ID nummer :), maar het maakt in principe niet uit.
 
Laatst bewerkt:
*Laat op de avond php scripten is niet altijd even handig*

Ik merkte al waarom t scriptje niet werkte, de id die ik probeerde op te vragen bestond helemaal niet....

Mijn fout, nu werkt het in ieder geval goed..

Misschien nog even een optie om te laten merken dat de id niet bestaat
 
Haha, mooi zo! Dat is inderdaad wel zo handig, in mijn eerste berichtje staat hoe je dat doet; namelijk met een if statement en mysql_num_rows().
Succes!
 
Alleen het updaten zelf lukt nog niet, t word niet gewijzigd in de db
 
PHP:
require_once('settings_nieuws.php');

$sql_update =  "

		UPDATE 
			nieuws_berichten 
		
		SET 
			week	='".mysql_real_escape_string($_POST['week'])."',
			jaar	='".mysql_real_escape_string($_POST['jaar'])."',
			titel	='".mysql_real_escape_string($_POST['titel'])."',
			bericht	='".mysql_real_escape_string($_POST['bericht'])."',
		
		WHERE 
			id		='".$_GET['id']."'
		
		";
#  Check of query is gelukt    
if (($result_update = mysql_query($sql_update)) === false) 
{
    # als de query fout is -> foutafhandeling
    echo showSQLError($sql_update,mysql_error(),'Fout bij het wijzigen van het bericht.');
}
else
{
    # De query is geluk! :)
    
    echo 'Bericht is gewijzigd!';
}
 
Klopt je query wel als je hem print ? (probeer hem handmatig uit te voeren in phpmyadmin) Dan kan je uitsluiten dat het je query is..

Sowieso moet de comma aan het eind van de SET bericht weg :P:
PHP:
$sql_update =  "
 
        UPDATE 
            nieuws_berichten 
        
        SET 
            week    ='".mysql_real_escape_string($_POST['week'])."',
            jaar    ='".mysql_real_escape_string($_POST['jaar'])."',
            titel   ='".mysql_real_escape_string($_POST['titel'])."',
            bericht ='".mysql_real_escape_string($_POST['bericht'])."'
        
        WHERE 
            id      ='".mysql_real_escape_string($_GET['id'])."'
        
        ";
 
Laatst bewerkt:
Ik krijg t volgende te zien:

Code:
Notice: Undefined index: id in /home/jelleps89/domains/sundaybreak.nl/public_html/admin/nieuws/insert_edit.php on line 39
Bericht is gewijzigd!
Warning: Cannot modify header information - headers already sent by (output started at /home/jelleps89/domains/sundaybreak.nl/public_html/admin/nieuws/insert_edit.php:39) in /home/jelleps89/domains/sundaybreak.nl/public_html/admin/nieuws/insert_edit.php on line 56
 
Ik weet niet wat lijn 39 en 56 zijn, maar zoals de error al zegt hij kan id op lijn 39 niet vinden. En op lijn 56 probeer jij een iets te doen waarbij de header verstuurd moet worden, maar je hebt al iets uitgeprint voor dat stukje code op lijn 56 waardoor de header dus al reeds verstuurd is en niet meer kan worden aangepast.
 
Dit is de hele code:

PHP:
<?php

# We zetten dit volledig bovenaan

    # errors weergeven
    ini_set('display_errors',1); // 1 == aan , 0 == uit
    error_reporting(E_ALL | E_STRICT);

    # sql debug
    define('DEBUG_MODE',false);  // true == aan, false == uit

    # functie voor sql debug
    function showSQLError($sql,$error,$text='Error')
    {
        if (DEBUG_MODE)
        {
            return  '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
        }
        else
        {
            return $text;
        }
    }

require_once('settings_nieuws.php');

$sql_update =  "

		UPDATE 
            nieuws_berichten 
        
        SET 
            week    ='".mysql_real_escape_string($_POST['week'])."',
            jaar    ='".mysql_real_escape_string($_POST['jaar'])."',
            titel   ='".mysql_real_escape_string($_POST['titel'])."',
            bericht ='".mysql_real_escape_string($_POST['bericht'])."'
        
        WHERE 
            id      ='".mysql_real_escape_string($_GET['id'])."'
        
        ";
#  Check of query is gelukt    
if (($result_update = mysql_query($sql_update)) === false) 
{
    # als de query fout is -> foutafhandeling
    echo showSQLError($sql_update,mysql_error(),'Fout bij het wijzigen van het bericht.');
}
else
{
    # De query is geluk! :)
    
    echo 'Bericht is gewijzigd!';
}


header('Location: ./');
exit;
?>
 
Okay er is iets mis met je $_GET['id']. Je geeft wel een ?id=x mee in de URL?

Wat krijg je als je neerzet:
PHP:
echo "<pre>";
print_r($_GET);
echo "</pre>";

En omdat je query is gelukt (?) print hij "Bericht is gewijzigd!", daarmee verstuur jij al een header :) En op regel 56 probeer je weer een header te sturen. Dus of die laatste header() weghalen of echo "bericht is gewijzigd!"; weghalen. (in dit geval print PHP een error; daarom zegt de error ook dat hij al gegevens print op regel 39 bij de ID probleem)
 
Laatst bewerkt:
het is in vele opzichten misschien beter om het volgende te gebruiken in plaats van update. deze methode kost vele malen minder code.
on duplicate key update.
google even en je ziet alles ervan. op die manier hou je je hele website beter onder controle. maak er bijvoorbeeld een class van die je dus vaker kunt aanroepen en geef dan de id mee aan de class.
hier even een linkje:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

ps. even iets wat misschien niet hiervoor van toepassing is maar als je ervoor kiest om je banner mee te laten schuiven kun je je navigatiebalk misschien ook beter zo doen. :p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan