Hallo,

Ik ben bezig OOP te gaan programmeren. Nu wil ik een class schrijven die nieuwsberichten leest, add, delete en edit.

Ik heb nu het volgende


<?php

class News {
var $subject;
var $publishdate;
var $intro;
var $story;

function News() {
$this->subject = 'hier komt de titel';
$this->publishdate = date("j F Y G:i");
$this->intro = 'hier komt de intro';
$this->story = 'hier komt het verhaal';
}

function GetSubject(){
print($this->subject);
}

function AddNews($place, $title, $description){
$sql = "INSERT into content_sections($id, $place, $title, $description) VALUES ('','$place','$title','$description',)";
$result = mysql_query($sql) or die (mysql_error());
}

function DelNews($id){
$sql = "DELETE from content_sections WHERE id=".$id."";
$result = mysql_query($sql) or die (mysql_error());
}

?>

Mijn vraag is: Hoe kan ik een knopje aanmaken die het gewenste item delete met de delete functie?

In dat bestand krijg je dan zoiets?

<?php

$news = new News;
$news->DelNews($id);

?>
Stel je hebt dit script "news.php"

Dit script moet een aantal dingen kunnen doen nieuws laten zien, nieuws toevoegen en nieuws verwijderen. Al deze dingen kun je zien als actie.
Wat je nu zou kunnen doen is:

news.php:
<?php

#
# Grijp actie en eventueel nieuws ID
#
$sAction = ( isset($_GET['action']) ? $_GET['action']) : '' );

# Ook nog ff controleren of het wel een nummer is!
$iNewsID = ( isset($_GET['id']) ? $_GET['id']) : '' );

$news = new News;

switch( $sAction )
{
case 'get':
break;

case 'add':
break;

case 'del':
$news->DelNews($iNewsID);
break;

default:
# Doe hier iets standaards!

} # end switch
?>

Nu kun je een nieuws item verwijderen met dit URL:
news.php?action=del&id=10

Maar je zou b.v. ook voor iedere actie een appart script kunnen maken. Maar deze manier vind ik beter omdat je dan alles mooi bijelkaar hebt in 1 script.
Ik heb nu dit in mijn class:

<?php

function delete_item($id=""){
if(empty($id) || !is_numeric($id)){
print $this->Errors['no_valid_id'];
exit();
}
//als pollid bestaat verwijderen (ook van ips)
$delete_item = "DELETE FROM content_sections WHERE id = '".$id."'";

if(@mysql_query($delete_item)){
print $this->Errors['item verwijderd'];
}
else
print $this->Errors['Kon item niet verwijderen. Something is wrong!'];
}

?>

Maar hoe roep ik deze aan met een <a href> in news.php?
Je kunt geen PHP functie aanroepen in en hyperlink.

De functie wordt aangeroepen in een PHP script. Zelfde manier als news.php in mijn vorige post.
Ok...weer stukje verder hiermee :D

Ik heb nu inderdaad een stukje met switch functie erin zitten die werkt. Het item wordt verwijderd, maar ik wil graag output terug hebben zoals hierboven in de code staat. Er moet een output terug komen van "item verwijderd" of "Kon item niet verwijderen". Deze zie ik nog niet.

<?php

if(@mysql_query($delete_item)){
print $this->Errors['item verwijderd'];
}
else
print $this->Errors['Kon item niet verwijderen. Something is wrong!'];
}

?>

<?php

case "delete";

$news = new News;
$news->delete_item($id);
break;


?>

Wat je nu doet is de variabele $Errors['item verwijderd']
of $Errors['Kon item niet verwijderen. Something is wrong'] printen.
Waarschijnlijk hebben die geen waarde.

zet zoiets in je class:


<?php

var Errors = Array (
    'verwijderd' => "item verwijderd",
    'fout' => "Kon item niet verwijderen. Something is wrong!"
)

?>



<?php

if(@mysql_query($delete_item)) {           
            print $this->Errors['verwijderd'];
        }
        else {
            print $this->Errors['fout'];
    }

?>


BTW.. er miste een '{' na de else...

<?php
function AddNews($place, $title, $description){
        $sql = "INSERT into content_sections($id, $place, $title, $description) VALUES ('','$place','$title','$description',)";
        $result = mysql_query($sql) or die (mysql_error());
   }
?>


ik zou bij het maken van een nieuw artikel in de constructor de waarden(titel story enz) meegeven en wanneer je $news->AddNews() (of save() ) aanroept het verhaaltje opslaan in de database.
Wat jij bedoeld is dit:

<?php

$class = $_GET['class'];
$function = $_GET['action'];
$id = $_GET['id'];

call_user_func( array( $class, $function ), $id );

?>

Maar ik zou het inderdaad niet op deze manier doen, want het is niet echt veilig.
Offtopic: Met
<?
if(@mysql_query($delete_item)){
print $this->Errors['item verwijderd'];
}
else
print $this->Errors['Kon item niet verwijderen. Something is wrong!'];
}
?>
kun je onmogelijk controleren of een item is verwijderd of niet. Je controleert hiermee uitsluitend of de query is gelukt. Dat zegt verder dus nog helemaal niets, het kan best zijn dat er helemaal geen records in de database staan of dat er geen records zijn die aan de voorwaarde(-n) voldoen. De query lukt dan wel, maar er wordt echt niets verwijderd.

Gebruik mysql_affected_rows() om het aantal rijen op te vragen dat is beinvloed door een INSERT, UPDATE of DELETE-query. Zodra dit aantal groter is dan 0, zijn er dus 1 of meerdere records verwijderd.

Reageren