Classes maken
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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());
}
?>
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?
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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
?>
#
# 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.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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!'];
}
?>
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?
De functie wordt aangeroepen in een PHP script. Zelfde manier als news.php in mijn vorige post.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if(@mysql_query($delete_item)){
print $this->Errors['item verwijderd'];
}
else
print $this->Errors['Kon item niet verwijderen. Something is wrong!'];
}
?>
if(@mysql_query($delete_item)){
print $this->Errors['item verwijderd'];
}
else
print $this->Errors['Kon item niet verwijderen. Something is wrong!'];
}
?>
of $Errors['Kon item niet verwijderen. Something is wrong'] printen.
Waarschijnlijk hebben die geen waarde.
zet zoiets in je class:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
var Errors = Array (
'verwijderd' => "item verwijderd",
'fout' => "Kon item niet verwijderen. Something is wrong!"
)
?>
var Errors = Array (
'verwijderd' => "item verwijderd",
'fout' => "Kon item niet verwijderen. Something is wrong!"
)
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if(@mysql_query($delete_item)) {
print $this->Errors['verwijderd'];
}
else {
print $this->Errors['fout'];
}
?>
if(@mysql_query($delete_item)) {
print $this->Errors['verwijderd'];
}
else {
print $this->Errors['fout'];
}
?>
BTW.. er miste een '{' na de else...
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?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());
}
?>
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.
Gewijzigd op 01/01/1970 01:00:00 door Jan geen
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$class = $_GET['class'];
$function = $_GET['action'];
$id = $_GET['id'];
call_user_func( array( $class, $function ), $id );
?>
$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.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
if(@mysql_query($delete_item)){
print $this->Errors['item verwijderd'];
}
else
print $this->Errors['Kon item niet verwijderen. Something is wrong!'];
}
?>
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.