Verwijderen van post

Status
Niet open voor verdere reacties.

MrAndy

Gebruiker
Lid geworden
13 jan 2011
Berichten
45
Hallo,

Ik heb een lastig probleem
Ik heb een website gemaakt waarin iemand een post kan plaatsen op de hoofdpagina (hoeft niet ingelogd te zijn om te plaatsen, zit geen inlogsysteem in)
Nu werkt het toevoegen en het weergeven wel, maar ik wil ook dat als men op de knop duwt, dat die verwijderd wordt.
Dit is de code:

De vetgedrukte code zou moeten worden opgelost. Wie helpt mij?
DBnaam: udt
tabelnaam: hp_post




<?php
$verbinding=mysql_connect("localhost","root","") or die("Verbinding niet mogelijk");
mysql_select_db("udt");
$sql="select * FROM hp_post";
$resultaat=mysql_query($sql);

while($gegevens=mysql_fetch_array($resultaat))
{
echo "<div class='post_box'>";
echo "<div class='post_box_right'>";
echo "<h2>".$gegevens['titel']."</h2>";
echo "<div class='post_meta'><strong>Date:</strong> ".$gegevens['datum']."| <strong>Author:</strong> ".$gegevens['auteur']."| ".$gegevens['subtitel']."</div>";
echo " <p>".$gegevens['uitleg']."</p>";
echo "<div class='cleaner'></div>";
echo "<input type='button' class='submit_btn float_l' name='delete' id='submit' value='Delete' />";
echo "</div>";
echo " <div class='cleaner'></div>";

echo " </div> ";

}
if(isset($_POST['delete']))
{
mysql_query("DELETE FROM udt.hp_post.ID WHERE ID='".$gegevens['ID']."'");
}

mysql_close($verbinding);
?>
 
Laatst bewerkt:
PHP:
<?php
$con=mysql_connect("localhost","root","") or die("Verbinding niet mogelijk");
mysql_select_db("udt");
$sql="select * FROM hp_post";
$resultaat=mysql_query($sql);

while($gegevens=mysql_fetch_array($resultaat))
{
echo "<div class='post_box'>"; 
echo "<div class='post_box_right'>";
echo "<h2>".$gegevens['titel']."</h2>";
echo "<div class='post_meta'><strong>Date:</strong> ".$gegevens['datum']."| <strong>Author:</strong> ".$gegevens['auteur']."| ".$gegevens['subtitel']."</div>";
echo " <p>".$gegevens['uitleg']."</p>";
echo "<div class='cleaner'></div>";
echo "<form name="delete" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?> />";
echo "<input type='button' class='submit_btn float_l' name='delete' id='submit' value='Delete' />";
echo "</div>";
echo " <div class='cleaner'></div>";

echo " </div> ";	

}
if(isset($_POST['delete']))
{
$query = mysql_query ("DELETE FROM udt.hp_post.ID WHERE ID=".$gegevens['ID']");

if (!mysql_query($query,con)){
echo 'verwijderen mislukt '.mysql_error().;
}else{ echo 'verwijderen gelukt'; 
}

mysql_close($con);
?>

Probeer dit eens
 
Laatst bewerkt:
Deze was helaas niet de juiste oplossing, ik krijg een error aan :
echo "<form name="delete" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >;
 
Er zijn een paar problemen met je code. De eerste is dat je het input type "button" gebruikt. Zo'n knop doet niets. Je kan er een Javascript-functie aanhangen o.i.d. maar tenzij je met AJAX wilt werken heb je daar nu niks aan. Het beste is om deze knop te veranderen in input type "submit". Dan moet je ook een formulier om de while-lus zetten.
Een tweede probleem is dat je de post met id $gegevens['ID'] verwijdert. Dit zal altijd de laatste post zijn en niet de post waarbij op de knop is geklikt. Je zal dus dit id mee moeten geven (bijv. via een hidden input).
Een derde probleem (al heeft dit geen invloed op de werking) is dat je de button in de while-lus een id meegeeft. Een id mag maar een keer voorkomen op de pagina. Omdat deze button in de while-lus staat komt dit id meerdere keren voor. Als je die id niet gebruikt kan je hem beter weglaten.

Het zou zoiets moeten worden (toegevoegde/veranderde regels hebben commentaar met uitleg):
PHP:
<?php
$verbinding=mysql_connect("localhost","root","") or die("Verbinding niet mogelijk");
mysql_select_db("udt");
$sql="select * FROM hp_post";
$resultaat=mysql_query($sql);

echo '<form name="posts" method="post" action="">'; // form-tag toegevoegd
while($gegevens=mysql_fetch_array($resultaat))
{
echo "<div class='post_box'>";
echo "<div class='post_box_right'>";
echo "<h2>".$gegevens['titel']."</h2>";
echo "<div class='post_meta'><strong>Date:</strong> ".$gegevens['datum']."| <strong>Author:</strong> ".$gegevens['auteur']."| ".$gegevens['subtitel']."</div>";
echo " <p>".$gegevens['uitleg']."</p>";
echo '<input type="hidden" name="postID" value="' . $gegevens['ID'] . '">'; // id van de huidige post toegevoegd als hidden input
echo "<div class='cleaner'></div>";
echo "<input type='submit' class='submit_btn float_l' name='delete' value='Delete' />"; // button veranderd in submit
echo "</div>";
echo " <div class='cleaner'></div>";

echo " </div> ";

}
echo '</form>'; // form afsluiten
if(isset($_POST['postID'])) // controleren op postID (id van de te verwijderen post)
{
mysql_query("DELETE FROM udt.hp_post.ID WHERE ID='".intval($_POST['postID'])."'");
}
mysql_close($verbinding);
?>

Ik heb ook nog intval om de te verwijderen ID gezet (ik neem aan dat het een getal is) om SQL-injectie te voorkomen.
 
Laatst bewerkt:
Dit hiel helaas nogaltijd niet, toch bedankt dat je je tijd heb gespendeerd om mij proberen te helpen!
 
Bij deze is er toch verandering in gekomen, het werkt wel, hij verwijderd, maar hij verwijderd verkeerd. Hij verwijderd de laatst toegevoegde post, terwijl hij de geselecteerde post moest verwijderen, je zit dus op het goede spoor!

Ik heb wel 1 ding gewijzigd en dat is op het laatste:

PHP:
if(isset($_POST['postID'])) // controleren op postID (id van de te verwijderen post)
{
mysql_query("DELETE FROM udt.hp_post WHERE ID='".intval($_POST['postID'])."'");
}
mysql_close($verbinding);
?>

PHP:
mysql_query("DELETE FROM udt.hp_post.ID WHERE ID='".intval($_POST['postID'])."'");
-->
PHP:
mysql_query("DELETE FROM udt.hp_post WHERE ID='".intval($_POST['postID'])."'");
 
Laatst bewerkt:
je zit dus op het goede spoor!
Als of het een prijs vraag is waar iets te winnen valt! :)

Als hij wel verwijderd is, is de query dus wel goed. Alleen klopt de WHERE clause niet.

echo je query eens.

dus niet
PHP:
mysql_query("DELETE FROM udt.hp_post WHERE ID='".intval($_POST['postID'])."'");
maar
PHP:
echo "DELETE FROM udt.hp_post WHERE ID='".intval($_POST['postID'])."'";

Wat krijg je nu als query? staat daar de goede ID in?
 
Neen, hij neemt altijd de laatst toegevoegde (in mijn geval ID=20), als er 1 bij komt (ID=21)
 
Ik denk wel dat ik het probleem kan omschrijven
Ik laat eerste en lijst afdrukken met alle posts. Bij elke post, wordt er een knop gegenereerd (submit), om de post te verwijderen. Die knoppen hebben allemaal dezelfde naam.

daarna met de code
PHP:
echo "DELETE FROM udt.hp_post WHERE ID='".intval($_POST['postID'])."'";
selecteerd hij toch niet de juiste, omdat de laatste $_POST['postID'], het id van de laatst toegevoegde / uitgelezen waarde krijgt. Ik denk dat dat het probleem is, maar de oplossing heb ik niet direct :(
 
Laatst bewerkt:
welke waarde selecteert hij dan wel? in plaats van wat?

ik ga het morgen zelf even proberen.
 
Hij selecteerd altijd het ID van de laatste post (in mijn geval ID=20, als er een bij komt, wordt dat 21)
Indien u wenst, kan ik mijn hele sitepakket doorsturen met DB en alles?
 
Het bestand is te groot om het hier te kunnen zetten, en via privéberichten gaat het ook al niet, zou je email even moeten hebben, en dat je daarna je bericht met je email verwijderd?
 
--weg gehaald--
Je hoeft alleen de pagina's te sturen die direct met het probleem te maken hebben...
 
Laatst bewerkt:
Ik snap al wat het probleem is. Het probleem is dat alle postIDs in het formulier staan en dus meegegeven worden. Omdat $_POST['postID'] maar een waarde kan hebben is dat dus de laatste. Als je de form tags binnen de while-lus zet, zodat elke post een eigen formulier is, zou het probleem opgelost moeten zijn.

Dus verander
PHP:
echo '<form name="posts" method="post" action="">'; // form-tag toegevoegd
while($gegevens=mysql_fetch_array($resultaat))
{
echo "<div class='post_box'>";
echo "<div class='post_box_right'>";
echo "<h2>".$gegevens['titel']."</h2>";
echo "<div class='post_meta'><strong>Date:</strong> ".$gegevens['datum']."| <strong>Author:</strong> ".$gegevens['auteur']."| ".$gegevens['subtitel']."</div>";
echo " <p>".$gegevens['uitleg']."</p>";
echo '<input type="hidden" name="postID" value="' . $gegevens['ID'] . '">'; // id van de huidige post toegevoegd als hidden input
echo "<div class='cleaner'></div>";
echo "<input type='submit' class='submit_btn float_l' name='delete' value='Delete' />"; // button veranderd in submit
echo "</div>";
echo " <div class='cleaner'></div>";
 
echo " </div> ";
 
}
echo '</form>'; // form afsluiten
eens in
PHP:
while($gegevens=mysql_fetch_array($resultaat))
{
echo '<form name="posts" method="post" action="">'; // form-tag toegevoegd
echo "<div class='post_box'>";
echo "<div class='post_box_right'>";
echo "<h2>".$gegevens['titel']."</h2>";
echo "<div class='post_meta'><strong>Date:</strong> ".$gegevens['datum']."| <strong>Author:</strong> ".$gegevens['auteur']."| ".$gegevens['subtitel']."</div>";
echo " <p>".$gegevens['uitleg']."</p>";
echo '<input type="hidden" name="postID" value="' . $gegevens['ID'] . '">'; // id van de huidige post toegevoegd als hidden input
echo "<div class='cleaner'></div>";
echo "<input type='submit' class='submit_btn float_l' name='delete' value='Delete' />"; // button veranderd in submit
echo "</div>";
echo " <div class='cleaner'></div>";
 
echo " </div> ";
echo '</form>'; // form afsluiten 
}

Het is niet de netste methode, maar wel de makkelijkste.
 
Laatst bewerkt:
@supersnail
Bedankt voor de juiste oplossing. Ik heb jou oplossing een beetje aangepast zodat het wel zou werken. Voor de geïnteresseerden die de juiste oplossing willen zien (dankzij supersnail!!!):


PHP:
while($gegevens=mysql_fetch_array($resultaat))
{
echo '<form name="posts" method="post" action="">'; // form-tag toegevoegd
echo "<div class='post_box'>";
echo "<div class='post_box_right'>";
echo "<h2>".$gegevens['titel']."</h2>";
echo "<div class='post_meta'><strong>Date:</strong> ".$gegevens['datum']."| <strong>Author:</strong> ".$gegevens['auteur']."| ".$gegevens['subtitel']."</div>";
echo " <p>".$gegevens['uitleg']."</p>";
echo "<input type='hidden' name='postID' value='" . $gegevens['ID'] . "'>"; // id van de huidige post toegevoegd als hidden input
echo "<div class='cleaner'></div>";
echo "<input type='submit' class='submit_btn float_l' name='delete' value='Delete' />"; // button veranderd in submit
echo "</div>";
echo " <div class='cleaner'></div>";

echo " </div> ";
 echo "</form>"; // form afsluiten 

}



/*CODE VOOR VERWIJDEREN VAN DE POST + REFRESH VAN DE PAGINA*/

if(isset($_POST['postID']))
{
mysql_query("DELETE FROM udt.hp_post WHERE ID='".intval($_POST['postID'])."'");
header('location:postoverzicht.php');
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan