Avatar billede grise_bassen Nybegynder
30. marts 2005 - 13:42 Der 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)) {
?>

Brugernavn: <? echo $vis[brugernavn]; ?><br>
Navn: <? echo $vis[navn]; ?><br>
Email: <a href="mailto:<? echo $vis[email]; ?>"><? echo $vis[email]; ?></a><br>
Hjemmeside: <a href="<? echo $vis[hjemmeside]; ?>"><? echo $vis[hjemmeside]; ?></a><br>
Fritekst: <br><? echo $vis[fritekst]; ?><br>



<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 */

while($visb = mysql_fetch_array($hent_beskeder)) {

print "Brugernavn: ";
print "$visb[brugernavn]";

print "  -  ";

print "Dato: ";
print "$visb[dato]";

print "  -  ";

if($_GET[id] == "$_SESSION[brugernavn]")  {
print "<a href='profil.php?mode=slet&id=$visb[id]'>Slet indlæg</a><br>";
}

print "<br>Tekst: ";
print "$visb[tekst]<br>";

print "<br>";
?>
<?
}

?>
<?

echo "<hr />";

/* 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]") {

$dato = date('h:i:s');
mysql_query("INSERT INTO profil_gb (ejer, brugernavn, tekst, dato) VALUES ('$_GET[id]', '$_SESSION[brugernavn]', '$_POST[tekst]', '$dato')")or die(mysql_error());
print "<script language=\"javascript\">parent.location.replace('profil.php?id=$_GET[id]');</script>";
}
}
}

?>
<form action ="profil.php?id=<? echo $_GET[id]; ?>" method="POST">
<input type="hidden" name="mode" value="skriv">

<textarea name="tekst" rows="8" cols="30"></textarea><br>
<input type="submit" name="submit" value="Skriv">
</form>


<?
}else{
print "Du er ikke logget ind!";
}
?>
Avatar billede bromer Nybegynder
30. marts 2005 - 13:47 #1
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.
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 13:55 #2
det var nu også jeg ikke kan få til at virke

if($_GET[id] == "$_SESSION[brugernavn]")  {
print "<a href='profil.php?mode=slet&id=$visb[id]'>Slet indlæg</a><br>";
}



jeg er ikke så god til php så er ikke med hvad du mener med

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.
Avatar billede bromer Nybegynder
30. marts 2005 - 13:58 #3
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"?
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:01 #4
det virker stadig ikke med det kunne være jeg lige skal forklare hvad der ikkr virker =)

men kan ikke se slet linket selvom jeg er logget ind
Avatar billede bromer Nybegynder
30. marts 2005 - 14:02 #5
okay.. indsæt følgende:

var_dump($_SESSION);
var_dump($_GET);

og skriv så tilbage hvad output du får.
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:03 #6
NULL array(1) { ["id"]=> string(1) "1" }
Avatar billede bromer Nybegynder
30. marts 2005 - 14:07 #7
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.
Avatar billede bromer Nybegynder
30. marts 2005 - 14:09 #8
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.
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:11 #9
altså jeg ved ikke hvad jeg vil have det skal være sådan at det kun er ejeren af gæstebogen der kan slette indlæg

har ikke forstand på det
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:12 #10
før
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:13 #11
nåt jeg sætter det i midten af min fil

array(3) { ["brugernavn"]=> &string(7) "bossibo" ["kodeord"]=> &string(6) "mitpassword =)" ["logintid"]=> &int(1112182142) } array(1) { ["id"]=> string(1) "1" }
Avatar billede bromer Nybegynder
30. marts 2005 - 14:13 #12
Jeg har lige set lidt mere på din kode. Tror du ikke at denne if:

if($_GET[id] == "$_SESSION[brugernavn]")  {
print "<a href='profil.php?mode=slet&id=$visb[id]'>Slet indlæg</a><br>";
}


burde være

if($visb['brugernavn'] == $_SESSION['brugernavn'])  {
print "<a href='profil.php?mode=slet&id=$visb[id]'>Slet indlæg</a><br>";
}

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.
Avatar billede bromer Nybegynder
30. marts 2005 - 14:15 #13
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.
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:16 #14
nu viser den slet linket men når jeg vil slette
for jeg fejlen


Fatal error: Call to undefined function: mnysql_erorr() in /usr/export/www/hosting/4boys/test/profil.php on line 186
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:17 #15
linje 186 er

mysql_query("DELETE * FROM profil_gb WHERE ejer = '$_SESSION[brugernavn]' AND ID = '$_GET[id]'") or die(mnysql_erorr());
Avatar billede bromer Nybegynder
30. marts 2005 - 14:17 #16
ja, det er fordi du har stavet forkert. Du skal bytte "mnysql_erorr()" ud med "mysql_error()"
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:21 #17
nu for jeg fejlen

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
Avatar billede bromer Nybegynder
30. marts 2005 - 14:24 #18
mysql_query(sprintf("DELETE * FROM profil_gb WHERE ejer = '%s' AND id = %d",$_SESSION[brugernavn],$_GET['id'])) or die(mnysql_erorr());

lav den om til:

mysql_query(sprintf("DELETE FROM profil_gb WHERE ejer = '%s' AND id = %d",$_SESSION[brugernavn],$_GET['id'])) or die(mysql_error());
Avatar billede bromer Nybegynder
30. marts 2005 - 14:27 #19
Det der er rettet skyldes at DELETE [1] fjerner hele rækker og derfor skal du ikke angive nogle kolonner.

[1] http://dev.mysql.com/doc/mysql/en/delete.html
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:27 #20
den kommer ikke med nogle fejl nu men indlæget bliver ikke slettet
Avatar billede bromer Nybegynder
30. marts 2005 - 14:29 #21
hvad mener du? Du ser linket til at slette men indlæget bliver ikke slettet fra databasen eller hvad?
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:31 #22
slet linket er der og når man trykker slet står der indlæget er sletter
men når man så går ind i ens profil igen så er det ikke slettet
Avatar billede bromer Nybegynder
30. marts 2005 - 14:33 #23
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());
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:43 #24
ja det gør så vil du ikke smide et svar?
Avatar billede grise_bassen Nybegynder
30. marts 2005 - 14:43 #25
mange tak for hjælpen!!!
Avatar billede bromer Nybegynder
30. marts 2005 - 14:44 #26
det var så lidt
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester