30. marts 2005 - 13:42Der er
25 kommentarer og 1 løsning
slet funktion? virker ikke
i mit burgersystem er det sådan at hver bruger har en gæstebog jeg kunne godt tænke mig at brugeren også kunne slette inglæg i deres gæstebog. jeg har selv prøvet men kan ikke få det til at virke
koden:
<? session_start(); if (session_is_registered("brugernavn") && session_is_registered("kodeord") && session_is_registered("logintid")) {
?> <? include "mysql/mysql.php"; if($_GET[id] == "") { print "Du mangler et id!"; }else{
$hent_bruger = mysql_query("SELECT * FROM brugere WHERE id = '$_GET[id]'") or die(mysql_error()); while($vis = mysql_fetch_array($hent_bruger)) { ?>
<bR><br> <b> <? echo $vis[brugernavn]; ?>´s gæstebog!</b> <br> <? } } if($_GET[mode] == "slet" AND $_GET[id] != "") { mysql_query("DELETE * FROM profil_gb WHERE ejer = '$_SESSION[brugernavn]' AND ID = '$_GET[id]'") or die(mnysql_erorr()); print "Indlæget er nu slettet!"; }
/* Antallet af poster vi ønsker vist på hver side */ $pr_side = 10;
/* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */ $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM profil_gb WHERE ejer=$_GET[id]"),0) or die(mysql_error());
/* Hvis visfra-variablen ikke findes i URL-feltet og den ikke er et nummer og den er større end antallet i databasen, så sættes den til 0, ellers sættes den til værdien fra URL feltet */ $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;
/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */ $hent_beskeder = mysql_query("SELECT * FROM profil_gb WHERE ejer = '$_GET[id]' ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error()); /* Vi kører en while og udskriver data, det jeg har sat på er blot et eksempel */
/* Der undersøges om der skal udskrives et ”forrige side”-link, er dette tilfældet udskrives linket */ if ($vis_fra > 0) { $back= $vis_fra - $pr_side; echo "<a href='$_SERVER[PHP_SELF]?id=$_GET[id]&visfra=$back'>Forrige</a> "; } $page = 1;
/* Alle siderne udskrives så man med et klik kan få resultaterne fra fx 90-100 */ for ($start = 0; $antal > $start; $start = $start + $pr_side) { if($vis_fra != $page * $pr_side - $pr_side) { echo "<a href='$_SERVER[PHP_SELF]?id=$_GET[id]&visfra=$start'>$page</a> "; } else { echo $page." "; } $page++; }
/* Der undersøges om der skal udskrives et ”næste side”-link, er dette tilfældet udskrives linket */ if ($vis_fra < $antal - $pr_side) { $next = $vis_fra + $pr_side; echo " <a href='$_SERVER[PHP_SELF]?id=$_GET[id]&visfra=$next'>Næste</a>"; } ?> <? if($_POST[mode] == "skriv") { if($_POST[tekst] != "") { if($_GET[id] != "$_SESSION[brugernavn]") {
Jeg går ud fra at det er følgende kode du ikke kan få til at virke:
if($_GET[mode] == "slet" AND $_GET[id] != "") { mysql_query("DELETE * FROM profil_gb WHERE ejer = '$_SESSION[brugernavn]' AND ID = '$_GET[id]'") or die(mnysql_erorr()); print "Indlæget er nu slettet!"; }
efter en lille makeover ser den nu sådan ud:
f($_GET['mode'] == "slet" AND !empty($_GET['id'])) { mysql_query(sprintf("DELETE * FROM profil_gb WHERE ejer = '%s' AND id = %d",$_SESSION[brugernavn],$_GET['id'])) or die(mnysql_erorr()); print "Indlæget er nu slettet!"; }
Her har jeg antaget at id er et heltal. Hvis dette ikke virker så print
var_dump($_SESSION); var_dump($_GET);
i toppen af dit dokument når du prøver at slette, for så vil vi gerne se outputtet.
hvad sker der hvis du retter det til: if($_GET['id'] == $_SESSION['brugernavn']) { print "<a href='profil.php?mode=slet&id=" . $visb['id'] . "'>Slet indlæg</a><br>"; }
Hvis dette ikke virker så indsat
<? var_dump($_SESSION); ?>
i toppen af dit dokument.
Med hensyn til det jeg skrev før ville jeg gerne vide hvad du gemmer i database-kolonnen "id". Er det et tal såsom 1,2.3 eller kan det være en tekst såsom "første id"?
jamen se så.. der har vi jo så forklaringen. Du kræver i din if sætning at $_SESSION['brugernavn'] er det samme som $_GET['id'] (er det overhoved hvad du vil eller vil du bare undersøge om de begge findes). Under alle omstændigheder er $_SESSION['brugernavn'] ikke sat.
har du indsat de to kald til var_dump før eller efter du kører session_start(). Det skal være efter for at den første får nogen effekt, så hvis det var før så lav det lige om og giv mig det nye output.
Det synes jeg giver mere mening. Den første if undersøger hvorvidt et brugernavn (jeg antager at der bør ligge et brugernavn i $_SESSION['brugernavn']) er det samme som et indlæg. Den anden undersøger hvorvidt et indlæg har samme ejer som den der er logget på. Det betyder vel implicit at vedkommende må slette indlæget.
okay, så virker din session fint. Prøv at ændre din ifsætning til det jeg skrev i mit tidligere indlæg, så tror jeg det virker på den måde du vil have.
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM profil_gb WHERE ejer = 'bossibo' AND ID = '68'' at line
jeg kan se at du ikke manuelt angiver et id når du indsætter ting i tabellen, hvilket normalt betyder at der er en auto_increment på? Er det også en primær nøgle? Virker det hvis du ændrer det til:
mysql_query(sprintf("DELETE FROM profil_gb WHERE id = %d",$_GET['id'])) or die(mysql_error());
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.