Verwijderen van Advertentie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Farid Khadafi

Farid Khadafi

13/09/2014 15:24:43
Quote Anchor link
Hallo,

Als ik een advertentie verwijder, wordt ie verwijderd uit de database maar is nog wel zichtbaar op mijn php pagina. Het controleren welke verwijderknop is geklikt en het laten zien van de advertenties deed ik in één while loop. Nu doe ik dat in een aparte while loop en wordt wel alles verwijderd.


Alleen om het te laten werken moet ik voor beide while loops dezelfde query uitvoeren. Is dat normaal ?

Toevoeging op 13/09/2014 15:27:45:

Dit is mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
define("DBASE","sqlite:../sqlite/Polderlaan_Db.sqlite");
$style = '../.common/default.css';
$table = 'AanbodSpul';
try {
    $db = new PDO(DBASE);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    echo $e->getMessage();
    die();
}

function
Delete($id) {
    global $db, $table;
    $test = $db->query("DELETE FROM $table WHERE id = $id");
    if($test) echo "ID: $id deleted";
    if (is_file("../fotoos/$id.jpg"))
    unlink("../fotoos/$id.jpg");
    
}


?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<meta http-equiv="pragma" content="no-cache" />
<html>
<head>
<title>Test</title>
<link rel='stylesheet' type='text/css' href='$style'>
</head>

<body>

<table id = 'table'><tr>
<form action='indexbody.php' method='post'>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
31
32
33
34
35
36
<?
$query
= $db->query("SELECT * FROM $table ORDER BY id DESC");
$i = -1;

while($object = $query->fetch(PDO::FETCH_OBJ)) {
    $i++;
    
    $id = $object->id;
    if(isset($_POST['delete'.$i])) {
        Delete($id);
    }
}


$query = $db->query("SELECT * FROM $table ORDER BY id DESC");
$i = -1;

while($object = $query->fetch(PDO::FETCH_OBJ)) {
        
    $id = $object->id;
    $lidnr = $object->lidnr;
    $datum = $object->datum;
    $omschrijving = $object->tekst;
    
    $i++;
    
    
    $plaatje="../fotoos/".$id.".jpg";
    $ext = "jpg";
        
    if (!is_file($plaatje))
        {
$plaatje='../fotoos/blanco.gif'; $ext = "gif";}
        
        $src="resizefoto.php?plaatje=$plaatje&ext=$ext";
        $info = "Spullen:$id <small>$datum</small>";
                                    
?>

<td class='table-cell'><div id = 'ad'><a href='nwspul_big.php?id=$id' target= '_top'><img id='foto' src='
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $src; ?>
';></a><div id = 'infoblok'>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $info;?>
</div><div id = 'localtekstblok'>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $omschrijving;?>
</div></div>

<input type='submit' id='delete' name='delete
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $i; ?>
' value='Delete' title='wis advertentie'></td>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
    
}
    
?>

</tr></table></form>

</body>
</html>
 
PHP hulp

PHP hulp

08/05/2024 23:49:57
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/09/2014 15:29:51
Quote Anchor link
Zonder code is het een beetje koffiedik kijken...

Ik neem aan dat je een select query gebruikt om de advertentie gegevens uit de database te halen. Het lijkt er op dat je eerst de advertenties inleest en in een array plaatst (ze staan dan dus in het geheugen van de server) en daarna de bewuste advertentie uit de database verwijderd?

Zou je dat andersom doen namelijk eerst de advertentie verwijderen en dan pas de select query uitvoeren dan komt ie niet meer op je pagina te staan.
 
Farid Khadafi

Farid Khadafi

13/09/2014 15:35:19
Quote Anchor link
De code heb ik toegevoegd. Maar waarom moet ik twee keer de query uitvoeren?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/09/2014 15:40:13
Quote Anchor link
Een paar tips:

Hou je PHP code bovenaan in je script en begin de output pas helemaal onder in.
Je kunt met één query meerdere (ook alle!) records verwijderen uit een tabel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
DELETE FROM table WHERE id IN (1, 4, 6, 7)


gebruik geen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? ?>
maar gebruik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php ?>


gebruik bij HTML tags double quotes: "

in een table of td hoort geen <div> thuis
Gewijzigd op 13/09/2014 15:49:02 door Frank Nietbelangrijk
 
Farid Khadafi

Farid Khadafi

13/09/2014 15:50:07
Quote Anchor link
ik weet dat je meerdere records kan verwijderen. Maar waarom moet ik 2 maal dezelfde select query uitvoeren, 1 per while loop ?
Gewijzigd op 13/09/2014 16:00:47 door Farid Khadafi
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/09/2014 16:08:03
Quote Anchor link
Dat hoeft niet. Die $i tellertjes kunnen er volledig uit. je hebt immers het id vanuit de database.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="submit" id="delete" name="delete<?php echo $object->id; ?>" value="Delete" title="wis advertentie">


vervolgens krijg je het id uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
// Zoek een element in de $_POST array die de waarde 'Delete' heeft
$key = array_search('Delete', $_POST);

// haal het id uit de array-key (bijv. Delete26 wordt 26)
$id= intval(substr($key, 6));

// verwijder het record met het id dat we verkregen hebben
$db->query("DELETE FROM " . $table . " WHERE id = " . $id);
?>
Gewijzigd op 13/09/2014 16:23:59 door Frank Nietbelangrijk
 
Farid Khadafi

Farid Khadafi

13/09/2014 16:14:25
Quote Anchor link
Ik moet toch weten welke delete knop is ingedrukt vandaar het $i tellertje. Ik laat al meerdere advertenties zien met ieder zijn eigen delete knop.

Toevoeging op 13/09/2014 16:22:17:

Ik heb nu 1 while loop:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

$query
= $db->query("SELECT * FROM $table ORDER BY id DESC");


while($object = $query->fetch(PDO::FETCH_OBJ)) {
        
    $id = $object->id;
    $lidnr = $object->lidnr;
    $datum = $object->datum;
    $omschrijving = $object->tekst;
    
    if(isset($_POST['delete'.$id])) {
        Delete($id);
    }

    
    
    $plaatje="../fotoos/".$id.".jpg";
    $ext = "jpg";
        
    if (!is_file($plaatje))
        {
$plaatje='../fotoos/blanco.gif'; $ext = "gif";}
        
        $src="resizefoto.php?plaatje=$plaatje&ext=$ext";
        $info = "Spullen:$id <small>$datum</small>";
                                    
?>

<td class='table-cell'><div id = 'ad'><a href='nwspul_big.php?id=$id' target= '_top'><img id='foto' src='
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $src; ?>
';></a><div id = 'infoblok'>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $info;?>
</div><div id = 'localtekstblok'>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $omschrijving;?>
</div></div>

<input type='submit' id='delete' name='delete
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $id ?>
' value='Delete' title='wis advertentie'></td>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    
}
    
?>


Maar ik moet steeds 2 keer op de delete button klikken voor hij verwijderd wordt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/09/2014 16:24:30
Quote Anchor link
Dat hoeft niet. Die $i tellertjes kunnen er volledig uit. je hebt immers het id vanuit de database.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="submit" id="delete" name="delete<?php echo $object->id; ?>" value="Delete" title="wis advertentie">


vervolgens krijg je het id uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
// Zoek een element in de $_POST array die de waarde 'Delete' heeft
$key = array_search('Delete', $_POST);

// haal het id uit de array-key (bijv. Delete26 wordt 26)
$id= intval(substr($key, 6));

// verwijder het record met het id dat we verkregen hebben
$db->query("DELETE FROM " . $table . " WHERE id = " . $id);
?>



Toevoeging op 13/09/2014 16:27:30:

dit zit in $_POST
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Array
(
    [Delete26] => Delete
)
 
Farid Khadafi

Farid Khadafi

13/09/2014 16:31:57
Quote Anchor link
Ik doe het zo :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php function Delete($id) {
    global $db, $table;
    $test = $db->query("DELETE FROM $table WHERE id = $id");
    if($test) echo "ID: $id deleted";
    if (is_file("../fotoos/$id.jpg"))
    unlink("../fotoos/$id.jpg");
    
}


if(isset($_POST['delete'.$id])) {
        Delete($id);
    }

    
Alleen ik moet steeds 2 keer op de delete knop klikken voor de advertentie verwijderd wordt.
 
- SanThe -

- SanThe -

13/09/2014 16:35:33
Quote Anchor link
type="checkbox" name="delete[..id..]"

DELETE FROM ... WHERE id IN(implode(',',$_POST['delete']))
Gewijzigd op 13/09/2014 16:37:20 door - SanThe -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/09/2014 16:36:25
Quote Anchor link
Het is logischer om per advertentie een <form> te maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<form method="post" action="">
    <input type="hidden" name="id" value="<?php echo $object->id; ?>" />
    <input type="submit" name="delete" value="Delete" />
</form>


dit is de $_POST array na een submit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Array
(
    [id] => '26',
    [delete] => 'Delete'
)


De php code om een record te verwijderen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    if(isset($_POST['delete']))
    {

        // verwijder het record met het id dat we verkregen hebben
        $db->query("DELETE FROM " . $table . " WHERE id = " . $_POST['id']);
    }
}

?>

?>
 
Farid Khadafi

Farid Khadafi

13/09/2014 17:31:48
Quote Anchor link
Bedankt voor de hulp. Ik heb alleen nog 1 klein probleempje. Alleen bij de eerste advertentie moet ik 2 keer klikken voor hij verwijderd is. Hoe zou dat komen ?

Toevoeging op 13/09/2014 17:40:50:

Ik heb het al opgelost ik moest de :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php if(isset($_POST['delete'])) {
        Delete($_POST['id']);
}

?>

plaatsen voor de delete functie :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

function Delete($id) {
    global $db, $table;
    $test = $db->query("DELETE FROM $table WHERE id = $id");
    if($test) echo "ID: $id deleted";
    if (is_file("../fotoos/$id.jpg"))
    unlink("../fotoos/$id.jpg");
    
}

?>


Toevoeging op 13/09/2014 17:43:22:

Ik wil je hartelijk bedanken! Ik had dit probleem voorgelegd aan phphulp.com en die konden mij niet helpen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/09/2014 17:47:00
Quote Anchor link
Graag gedaan!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.