Du raderar posten innan du sätter dina variabler.
Flytta delete frågan till efter du satt variablerna.
18 svar · 1 312 visningar · startad av maweer
Jag har en kod som raderar den aktuella posten där den får det aktuella id:et via en länk.
Jag har fått till att den skickar ett mail varje gång man raderar en post men jag får inte med variablerna i mailet i $message
<?
include("conn.php");
if(isset($_GET['id'])) {
$sql = "DELETE FROM tabell WHERE id = {$_GET['id']}";
mysql_query($sql);
}
if(isset($_GET['id'])) {
$sql = mysql_query("SELECT * FROM tabell WHERE id = {$_GET['id']}");
mysql_query($sql);
}
while ($rad = mysql_fetch_array($sql))
{
$tid = $rad['tid'];
$datum = $rad['datum'];
$plats = $rad['plats'];
$beskrivning = $rad['beskrivning'];
$karta = $rad['karta'];
$Smilies = Smilies($rad['beskrivning']);
}
$to = "mail@exempel.com ,mail2@exempel.com, mail3@exempel.com";
$subject="Spelning inställd och raderad";
$message="En spelning har blivit raderad från listan: $plats, $datum";
$from = "svaraej@exempel.com";
$headers .= "Reply-To: $visitor_email \r\n";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
header('Location: form.php');
?>
Du raderar posten innan du sätter dina variabler.
Flytta delete frågan till efter du satt variablerna.
Hehehe var det så enkelt :)
Jag gjorde så här
if(isset($_GET['id'])) {
$sql = mysql_query("SELECT * FROM tabell WHERE id = {$_GET['id']}");
mysql_query($sql);
}
while ($rad = mysql_fetch_array($sql))
{
$tid = $rad['tid'];
$datum = $rad['datum'];
$plats = $rad['plats'];
$beskrivning = $rad['beskrivning'];
$karta = $rad['karta'];
$Smilies = Smilies($rad['beskrivning']);
}
if(isset($_GET['id'])) {
$sql = "DELETE FROM tabell WHERE id = {$_GET['id']}";
mysql_query($sql);
}
$to = "mail@exempel.com ,mail2@exempel.com, mail3@exempel.com";
Nu när jag raderar så får jag Serverfel.
Har jag gjort något konstigt?
Nu kan jag inte PHP men vad gör mysql_query() och vad gör mysql_fetch_array ? om jag fattar det hela rätt så måste du väl ändå ha ett recordset i din mysql_fetch_array och inte en sträng?
EDITnu ser jag att du har en mysql_query... men då behöver du knappast göra det igen direkt efter.
while ($rad = mysql_fetch_array(mysql_query($sql)))
.. du måste också se över dina if frågor... du säger bara om id är satt så kommer du sätta variablen $sql till något... men längre ner så försöker du hämta något med $sql som i vissa fall kommer vara tomma...
om något:
<?
include("conn.php");
if(isset($_GET['id'])) {
$sql = mysql_query("SELECT * FROM tabell WHERE id = {$_GET['id']}");
while ($rad = mysql_fetch_array($sql)) {
$datum = $rad['datum'];
$plats = $rad['plats'];
}
mysql_query("DELETE FROM tabell WHERE id = {$_GET['id']}");
$to = "mail@exempel.com ,mail2@exempel.com, [email]mail3@exempel.com[/email]";
$subject="Spelning inställd och raderad";
$message="En spelning har blivit raderad från listan: $plats, $datum";
$from = "svaraej@exempel.com";
$headers .= "Reply-To: $visitor_email \r\n";
$headers = "From:" . $from;
mail($to, $subject, $message, $headers);
}
header('Location: form.php');
?>
fast du vill ju inte skicka mail eller försöka ta bort något som inte finns i databasen (gissar jag på):
<?
include("conn.php");
if(isset($_GET['id'])) {
$sql = mysql_query("SELECT * FROM tabell WHERE id = {$_GET['id']}");
while ($rad = mysql_fetch_array($sql)) {
$to = "mail@exempel.com ,mail2@exempel.com, [email]mail3@exempel.com[/email]";
$subject="Spelning inställd och raderad";
$message="En spelning har blivit raderad från listan: $rad['plats'], $rad['datum']";
$from = "svaraej@exempel.com";
$headers .= "Reply-To: $visitor_email \r\n";
$headers = "From:" . $from;
mysql_query("DELETE FROM tabell WHERE id = {$rad['id']}");
mail($to, $subject, $message, $headers);
}
}
header('Location: form.php');
?>
kanske?
vad är felmeddelandet?
kanske:
mysql_query("DELETE FROM tabell WHERE id = $rad['id']");
? felmeddelanden i PHP brukar ge en rätt bra information vad felet är...
Nja, det bara står Chromes egna felmeddelade "Serverfel"
aktivera det (borde ju alltid vara när man utveckla tycker jag). http://motoma.io/turning-on-php-debugging-and-error-messages/
Har jag lagt det fel
<?php
error_reporting(E_ALL);
include("conn.php");
if(isset($_GET['id'])) {
Sitter på jobb och kör endast IE8 här
och får upp
Webbplatsen kan inte visa sidan
Detta fel (HTTP 500 - Internt serverfel) innebär att webbplatsen du besöker har ett serverproblem som gör att webbsidan inte kan visas.
EDIT
Men din förra kod funkade ju jätte bra :)
vilken webbserver kör du?
<?
include("conn.php");
if(isset($_GET['id'])) {
$sql = mysql_query("SELECT * FROM tabell WHERE id = {$_GET['id']}");
while ($rad = mysql_fetch_array($sql)) {
$datum = $rad['datum'];
$plats = $rad['plats'];
mysql_query("DELETE FROM tabell WHERE id = {$_GET['id']}");
$to = "mail@exempel.com ,mail2@exempel.com, [email]mail3@exempel.com[/email]";
$subject="Spelning inställd och raderad";
$message="En spelning har blivit raderad från listan: $plats, $datum";
$from = "svaraej@exempel.com";
$headers .= "Reply-To: $visitor_email \r\n";
$headers = "From:" . $from;
mail($to, $subject, $message, $headers);
}
}
header('Location: form.php');
?>
känns som borde fungera.
Här på jobbet sitter jag på en IE 8
IE8 är en webbläsare, inte en webbserver.
Men förlåt! Jag läser som en kratta :)
Linux web07-00 3.0.9-vs2.3.1
Och vad är det? Är det ett webbhotell du utvecklar mot?
Ja jag kör sidan på b-one webbhotell
Ja jag kör sidan på b-one webbhotell
Jo, Det är bara på vilken webbserver maskin du är på, inte vilket system den är på. Jag hade installerat PHP på din maskin när du utveckla istället för att jobba på något som ligger skarpt ute som kanske används. På en skarp sajt (som ligger på b-one) vill du ju inte visa felmeddelande på det sättet, men hade varit betydligt enklare om du utvecklar på en egen maskin för debug.
Jag kan inte hjälpa mer med vad som kan vara fel, förmodligen är det kanske för att (nu pratar jag ASP) att du har recordsetet aktivt på den post du försöker ta bort inne i while loopen som kan spöka finns säkert något bättre sätt att kontrollera att posten finns innan..
Jo jag, hade det innan men slutade använda det lokalt av ren lathet att jag inte orkade installera om det på min dator igen vid en ominstallation av mitt OS.
Sen upptäckte jag vid flera tillfällen att vissa saker i koden funkade när jag körde lokalt men inte skarpt, då webbhotellet jag körde med då använde en gammal version.
Det var iof en massa år sedan, så det kan ju ha blivit bättre med åren, men det gjorde att jag istället började köra "skarpt" direkt istället för att testa lokalt först.
Jag har heller inte kodat på en massa år, och försöker nu ta upp det igen lite smått
Jag kollade lite nu också. Webbservern som jag har på mitt webbhotell är: Apache/2.2.16 som körs på något system som heter Linux web07 så jag skrev fel igår
Jag tackar ännu en gång för din hjälp och din tid!