webForumDet fria alternativet

hjälp med en gästbok.

Databaser & SQLur Databashanterare & SQL

26 svar · 855 visningar · startad av Rickard

RickardMedlem sedan maj 2001287 inlägg
#1

Tjenare.

Jag har en gästbok gjord i PHP som connectar till en MySQL databas.

Det är jag och en polare som har gjort den....
Han har stått för MySQL kodandet och jag för PHP/HTML.

Nu är problemet bara, att ingen av oss kommer ihåg hur man kodar in för att deleta ett inlägg.
Koden ser ut såhär:

<?
/*
PHP Gästbok 0.99
Skriven av Rickard Hill och Peter Ekdahl.

Connecta till databasen och skapa denna table innan du använder denna gästbok.

CREATE TABLE guests (
guest_id
int(4)
unsigned
zerofill
DEFAULT '0000'
NOT NULL
auto_increment,
guest_name varchar(50),
guest_email varchar(50),
guest_time timestamp(14),
guest_message text,
PRIMARY KEY (guest_id)
);

*/

////////////////////////////////
// Detta kollar om vi skall lägga till ett nytt inlägg.
////////////////////////////////
if (($REQUEST_METHOD=='POST')) {

////////////////////////////////
// Denna loop tar bort "farliga" tecken från inlägget och sätter
// en backslash före tecken som kan
// förorsaka problem för databasen.
////////////////////////////////
for(reset($HTTP_POST_VARS);
$key=key($HTTP_POST_VARS);
next($HTTP_POST_VARS)) {
$this = addslashes($HTTP_POST_VARS[$key]);
$this = strtr($this, ">", " ");
$this = strtr($this, "<", " ");
$this = strtr($this, "|", " ");
$$key = $this;
}
////////////////////////////////
// Detta fångar upp alla fälten och kollar
// om någon försöker skippa ett fält.
////////////////////////////////
if ($name && $email && $message ) {

////////////////////////////////
// Här uppdaterar vi  inläggen
////////////////////////////////
$query = "INSERT INTO guests ";
$query .= "(guest_id, guest_name, ";
$query .= "guest_email, guest_time, guest_message) ";
$query .= "values(0000,'$name','$email',NULL,'$message')";
mysql_pconnect("localhost","guest","password")
               or die("Unable to connect to SQL server");
mysql_select_db("test_gb") or die("Unable to select database");
mysql_query($query) or die("Insert Failed!");

} else {

////////////////////////////////
//  Om folk inte fyllde i alla fälten så sätter vi en variabel
//  och fortsätter
////////////////////////////////
$notall = 1;

}
}
?>
<!--Start-->
<html>
<head>
<title>Inlägg</title>
<body bgcolor="blue" text="orange" link="silver" alink="white" vlink="silver">
<B>
<font face="verdana" size="3">
<center>
<?

////////////////////////////////
// Här ansluter vi till databasen och läser.
////////////////////////////////
mysql_pconnect("localhost","guest","password")
or die("Unable to connect to SQL server");
mysql_select_db("test_gb") or die("Unable to select database");

////////////////////////////////
// Här räknar vi alla inlägg.
////////////////////////////////
$query = "SELECT COUNT(*) FROM guests";
$numguests = mysql_query($query) or die("Select Failed!");
$numguest = mysql_fetch_array($numguests);

?>

<!-- Här visar vi alla inlägg. -->
<P>
<A HREF="guestbook.php?complete=1"><? echo $numguest[0]; ?> Inlägg</A> (funktionen fungerar inte korrekt)
</P>
<A HREF="guestbook_add.php">Lägg in ett inlägg du med!</A>
<br>
<br>
<?

////////////////////////////////
// Här bestämmer vi om vi vill visa alla inläggen, eller bara de 20 senaste.
// Denna variabel är satt genom att lägga till '?complete=1' efter URL-en.
////////////////////////////////
if ($complete == 1) {
$query = "SELECT * FROM guests ORDER BY guest_time DESC";
} else {
$query = "SELECT * FROM guests ORDER BY guest_time DESC LIMIT 20";
}
$guests = mysql_query($query) or die("Select Failed!");

////////////////////////////////
// Denna kommer att loopa så länge det finns fler inlägg att läsa igenom.
////////////////////////////////
while ($guest = mysql_fetch_array($guests)) {

?>
<TABLE BORDER="1" WIDTH="500">
<B>
<TR><TD>
<B>Namn: <? echo $guest['guest_name']; ?>
</TD><TD>
<B>Email: <A HREF="mailto:<? echo $guest['guest_email']; ?>">
<? echo $guest['guest_email']; ?></A>
</TD><TD>
<?

////////////////////////////////
// Databasen har en tids funktion som vi kan använda för att se när inlägget kom in.
////////////////////////////////
$datefromdb = $guest['guest_time'];
$year = substr($datefromdb,0,4);
$mon = substr($datefromdb,4,2);
$day = substr($datefromdb,6,2);
$hour = substr($datefromdb,8,2);
$min = substr($datefromdb,10,2);
$sec = substr($datefromdb,12,2);
$orgdate = date("l F dS, Y h:i A",mktime($hour,$min,$sec,$mon,$day,$year));
?>
<B>Datum: <? echo $orgdate; ?>
</TD></TR>
<TR><TD COLSPAN="3">
<B><? echo $guest['guest_message']; ?>
</TD></TR>
</TABLE>
<BR>

<? } ?>
</center>
</BODY>
</HTML>

Sedan fins även koden för att lägga till ett inlägg och ser ut såhär:

<HTML>
<HEAD>
<TITLE>Kasta in ett inlägg.</TITLE>
</HEAD>

<body bgcolor="blue" text="orange" link="silver" alink="white" vlink="silver">
<B>
<font face="verdana" size="3">
<center>

<H1>Kasta in ett inlägg.</H1>

<!-- Låt folk veta att dom har fyllt i alla fälten -->
<? if ($notall == 1) { ?>
<P><FONT COLOR="red">Fyll i alla fälten</FONT></P>
<? } ?>

<!-- Den här biten lägger in det som redan skrivits i, om någon har glömmt att fylla i ett fält. -->

<FORM METHOD="post" ACTION="guestbook.php">
<PRE>
Ditt namn: <INPUT
TYPE="text"
NAME="name"
SIZE="20"
MAXLENGTH="50"
VALUE="<? echo $name; ?>">
Din Email: <INPUT
TYPE="text"
NAME="email"
SIZE="20"
MAXLENGTH="50"
VALUE="<? echo $email; ?>">

Meddelande:
<TEXTAREA NAME="message" COLS="40" ROWS="8" WRAP="Virtual">
<? echo $message; ?>
</TEXTAREA>

<INPUT TYPE="submit" VALUE="Lägg in">

</PRE>
</FORM>

<HR>
</center>
</body>
</html>

-----
Finns det någon som kan förklara för mig, vad det är för funktion som tar bort ett inlägg.
Det är kanska störande efter att vi har testat gästboken, och det nu ligger 10 meddelanden och skräpar, som vi inte vill ha.

Tacksam för svar!

//Rickard

SPiNMedlem sedan mars 20007 896 inlägg
#2

DELETE FROM tabell WHERE id = $id_nummer

Kanske?

------------------
SPiN, bjorne.w@telia.com

-- Fame is a bitch, man [Brad Pitt - Fight Club] --

RickardMedlem sedan maj 2001287 inlägg
#3

Tack för svaret.

Men när jag försöker med det manuellt får jag svaret:
mysql> DELETE FROM users WHERE ID = $id_1;
ERROR 1146: Table 'test_gb.users' doesn't exist

Hur vet jag vad inläggen har för ID?
Och hur är hela koden för att sätta in koden i scriptet?

Min polare är nämligen bortrest i en vecka, så jag skulel vilja få igång det snarast möjligt.

Skulle du kunna ta en snutt av mitt script och visa vart det skall sättas in?

RickardMedlem sedan maj 2001287 inlägg
#4

Har ytterligare ett problem med gästboken...
Vid radbrytningar (enter tryckningar)
så bryr den sig inte om det....
den tar det som ett mellanslag! :(
Någon som vet hur jag löser det och vart jag skall slänga in det som bryter raden vid en enter tryckning?

[Redigerat av Rickard den 12 maj 2001]

NirreMedlem sedan maj 20013 inlägg
#5
DELETE FROM tabell WHERE guest_id = $id_nummer

Kanske funkar bättre.

noratxMedlem sedan feb. 200193 inlägg
#6

Jag har haft ett liknande problem förut...
Det där funkar nog inte att skriva in manuellt...
Dock har jag ingen lösning.. Jag fick aldrig hjälp med det.. :(

[Redigerat av noratx den 12 maj 2001]

RickardMedlem sedan maj 2001287 inlägg
#7

Nä, tyvärr... Det funkade inge vidare alls... :(

Jag vill ju veta:
1. Hur man gör det i mysql konsollen.
2. vad den EXAKTA koden är och vart i php dokumentet den skall liga.
Detta fel får jag upp då.

mysql> DELETE FROM guests WHERE guest_id = $1;
ERROR 1054: Unknown column '$1' in 'where clause'
mysql> DELETE FROM guests WHERE guest_id = $id_1;
ERROR 1054: Unknown column '$id_1' in 'where clause'
mysql> DELETE FROM guests WHERE guest_id = $guest_1;;
ERROR 1054: Unknown column '$guest_1' in 'where clause'
mysql> DELETE FROM guests WHERE guest_id = $guest_id1;;
ERROR 1054: Unknown column '$guest_id1' in 'where clause'
mysql>

Som ni ser så har jag försökt på lite olika sätt...

Jag vi ju lixom inte alls vad meddelandena har för ID....
Asså, är meddelande 1 ID1 och meddelande 2 ID2 eller?

BitstateMedlem sedan nov. 2000432 inlägg
#8

tänk bara på att i windows struntar mysql om det är gemener/VERSALER medan linux versionen inte hittar tabellen "guests" om den heter "GUESTS".

hehe.. såg precis.. tänk på att mysql *inte* är php, då du säger åt id att vara int kan du inte ge $1, $id1 och liknande *i mysql* i php funkar det däremot. testa "DELETE FROM guests WHERE guest_id = 1" så fungerar det garanterat (i mysql), du kan även testa "select * from guests" och där se vilka id# du vill ta bort, i php däremot kan du köra med $variabler.

RickardMedlem sedan maj 2001287 inlägg
#9

Tack bitstate....

Jag kom på nu när jag ytterligare en gång lästa igenom hela php koden...
SÅ kom jag på hur jag skulle kunna se
vilket ID varje inlägg har... :e
Det gjorde jag genom att skriva:

SELECT * FROM guests ORDER BY guest_time DESC;

Sen att ta bort, gick utmärkt nu utan dollartecknet...
Fan vad skönt det är när folk hjälper en till rätta....

Nu har jag bara en liten fråga kvar...
Hela gästboken använder sig av root för att lägga in meddelanden...
Jag har en user... men jag har glömt bort passwordet till den usern...
Vet någon hur jag ändrar?
Jag fattar nada av den delen från manualen....

RickardMedlem sedan maj 2001287 inlägg
#10

Ok...
Nu har jag gjort ett script som skall ta bort ett inlägg, men det funkar inte...
Scriptet ser ut så här:

<html>
<head>
<title>Ta bort inlägg</title>
</head>
<body bgcolor="black">
<?
mysql_pconnect("localhost","root","password")
or die("Unable to connect to SQL server");
mysql_select_db("test_gb") or die("Unable to select database");
?>
<form>
<input type="text" name="del" size="20" value="<? DELETE FROM guests WHERE $guest_id = $ ;?>">
<input type="submit" value="delete">
</form>
</body>
</html>

och då får jag upp detta felmeddelande:

Parse error: parse error in /home/test/public_html/test_gb/new/del.php on line 12

Rad 12 är:
<input type="text" name="del" size="20" value="<? DELETE FROM guests WHERE $guest_id = $ ;?>">

Är jag ute och cycklar, eller har jag gjort rätt?!

Det är ju meningen att jag skall kunna fylla i det ID som meddelandet har.

[Redigerat av Rickard den 12 maj 2001]

SPiNMedlem sedan mars 20007 896 inlägg
#11

Vet inte vad du försöker göra, men du måste köra din SQL-query ivf.

mysql_query("DELETE FROM guests WHERE guest_id = $guest_id");

Du kan inte ha in en variabel istället för ett fält, om inte variabeln isf innehåller namnet på fältet. Plus att du hade skrivit in endast ett $...?

Och queryn genererar ingenting, så du kan inte försöka skriva in det i en textbox!

------------------
SPiN, bjorne.w@telia.com

-- Fame is a bitch, man [Brad Pitt - Fight Club] --

RickardMedlem sedan maj 2001287 inlägg
#12

Hmm.... Varför skare vara så svårt å förklara för.. :q

Hmm... Försöker igen då...
Säg att jag har ett formulär.
Med bara ett enda fält, och en knapp.

Och säg sedan också att jag har en gästbok med 40 inlägg.
Inlägg nummer 37 (enligt databasen 0037)
innehåller MASSVIS med fula ord och sådans som inte hör hemma där....
Så går jag till mitt formulär, som heter "del.php"

I fältet så skriver jag "0037" (utan " ") klickar på knappen ta bort (<input type="submit" value="ta bort">
och vips så försvinner inlägg nummer 0037.
Förstår du nu vad jag är ute efter?
Skulle den som förstår kunna skriva ut ALL kod för det fältet...
Altså, börja med <FORM> och sluta med </FORM>

så att jag vet tills nästa gång jag skall göra någe liknande...

//Rickard

[Redigerat av Rickard den 12 maj 2001]

BitstateMedlem sedan nov. 2000432 inlägg
#13

giter inte kolla exakt hur man skriver men det blir något liknande detta (minus eventuella stavfel).

i html filen med formuläret:

<FORM ACTION="delete.php" METHOD=POST>
<input type="text" name="delete_id" size="20">
<INPUT TYPE=SUBMIT NAME="submit" VALUE="SUBMIT">
</form>

och i delete.php

<?php
mysql_pconnect("localhost","root","password")
or die("Unable to connect to SQL server");
mysql_select_db("test_gb") or die("Unable to select database");

$result = mysql_query("DELETE FROM guests WHERE guest_id = $delete_id");

?>

[Redigerat av Bitstate den 12 maj 2001]

OlleBoopMedlem sedan feb. 20001 861 inlägg
#14

Vid radbrytningar (enter tryckningar)

nl2br($sträng)

RickardMedlem sedan maj 2001287 inlägg
#15

Tack så mycket Olle...
Men... ööhh...

Ok, jag kan PHP, men inte FÖR mycket av det....
ska det stå någe annat istället för $sträng
och i så fall vad...
Och vart i filen skall jag sätta in det?
Skulle du kunna skriva exakt vart den skall ligga? Antar att den skall ligga i fil no.2 (Altså i guestbook_add.php)
Men vart... :q

[Redigerat av Rickard den 13 maj 2001]

RickardMedlem sedan maj 2001287 inlägg
#16

Provade såhär:

<FORM METHOD="post" ACTION="guestbook.php">
<PRE>
Ditt namn: <INPUT
TYPE="text"
NAME="name"
SIZE="20"
MAXLENGTH="50"
VALUE="<? echo $name; ?>">
Din Email: <INPUT
TYPE="text"
NAME="email"
SIZE="20"
MAXLENGTH="50"
VALUE="<? echo $email; ?>">

Meddelande:
<TEXTAREA NAME="message" COLS="40" ROWS="8" WRAP="Virtual" <? nl2br('$message'); ?> >
<? echo $message; ?>
</TEXTAREA>

<INPUT TYPE="submit" VALUE="Lägg in">

</PRE>
</FORM>

Men det funkar inte alls.. =(

har prövar utan ' ' åxå..

BitstateMedlem sedan nov. 2000432 inlägg
#17

känns som om du får ta och titta lite på grunderna i php, för det första php körs på servern innan documentet ens nått webläsaren,

<TEXTAREA NAME="message" COLS="40" ROWS="8" WRAP="Virtual" <? nl2br('$message'); ?> >

här körs alså nl2br när sidan skapas (altså inte efter att man matat in något), jag antar att du vill att texten som matas in i formuläret skall formateras, men i så fall måste du lägga in funktionen i guestbook.php

vad som händer i ditt fall är att php formaterar variabeln $message (som då är helt tom) och efter det skriver ut formuläret.

RickardMedlem sedan maj 2001287 inlägg
#18

aha..

ok, tack så mycket bitstate...
Men som sagt... jag kan php, men inte allt... långt ifrån allt...

men som du säger...
grunderna vore nog inte illa å titta till igen...

=)

RickardMedlem sedan maj 2001287 inlägg
#19

Jag skall nog ta å gå igenom min PHP bok en gång...
för nu får jag det inte alls att funka.. =(

Har lagt nl2br i guestbook.php
Både ovanför <html>
och innuti...
funkar inge vidare...
Har försökt med lite olika variationer.. =(

NiklassonMedlem sedan nov. 2000857 inlägg
#20

Ladda hem min gästbok och titta på koden i den. Jag tycker att den är enkelt uppbyggd. Den hämtas på min hemsida.. :e

------------------
http://www.niklasson.net/

130 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)