/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
slette tilhørende poster
Fra : Christoffer


Dato : 06-05-05 21:00

Hej! jeg har atter brug for hjælp!
Jeg har rodet mig ud i at omskrive et forum, og sådan set færdig, mangler
bare en lille detalje, at man kan slette en overordnet tråd og de tilhørende
indlæg.. Det kan jeg ikke få til at fungere..
Må hellere ligge lidt kode så i kan se hvad jeg mener ..
forum.sql
CREATE TABLE forum (
id int(11) NOT NULL auto_increment,
header varchar(100) NOT NULL default '',
name varchar(60) NOT NULL default '',
email varchar(60) NOT NULL default '',
date datetime NOT NULL default '0000-00-00 00:00:00',
message text NOT NULL,
parent int(11) NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;

Ideen er at kun tråde får data i header, mens indlæg til tråden ligger sig i
parent, og får tildelt værdien som tråden har.. så et indlæg til tråd med
id=9 får parent=9

Så meget logisk gik jeg ud fra at jeg kunne slette ved at lave normal delete
query
$query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=$_GET[id]"; //
har prøvet at skrive parent='$_get[id]' og det gør ingen forskel.

Det virkede ikke.. den eneste måde jeg kan slette tråden på at ved at sætte
parent=0, men så er det kun tråden og ikke de tilhørende indlæg som bliver
slettet... Lidt af et problem.

Håber det var forståeligt, og at nogen kan hjælpe!

mvh.
Christoffer



 
 
Bent Stigsen (07-05-2005)
Kommentar
Fra : Bent Stigsen


Dato : 07-05-05 11:15

Christoffer wrote:
[snip]
> CREATE TABLE forum (
> id int(11) NOT NULL auto_increment,
> header varchar(100) NOT NULL default '',
> name varchar(60) NOT NULL default '',
> email varchar(60) NOT NULL default '',
> date datetime NOT NULL default '0000-00-00 00:00:00',
> message text NOT NULL,
> parent int(11) NOT NULL default '0',
> PRIMARY KEY (id)
> ) TYPE=MyISAM;
>
> Ideen er at kun tråde får data i header, mens indlæg til tråden ligger sig i
> parent, og får tildelt værdien som tråden har.. så et indlæg til tråd med
> id=9 får parent=9
>
> Så meget logisk gik jeg ud fra at jeg kunne slette ved at lave normal delete
> query
> $query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=$_GET[id]"; //
> har prøvet at skrive parent='$_get[id]' og det gør ingen forskel.
[snip]

Hvis der kun er 2 niveauer, d.v.s. parent på et indlæg ikke kan være id
på et indlæg, så kan du nøjes med at bruge "or" istedet for "and" i din
where-clause.
$query = "DELETE FROM forum WHERE id=$_GET[id] or parent=$_GET[id]";

Hvis der kan være et vilkårligt underliggende antal niveauer, så må du
enten, loope igennem alle niveauer i php, eller skifte til InnoDB som
kan lave cascade delete.


/Bent

Christoffer (07-05-2005)
Kommentar
Fra : Christoffer


Dato : 07-05-05 11:27

har løst det.
//Query der sletter brugeren ud fra id
$query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=0";
$slet = "DELETE FROM forum WHERE parent='$_GET[id]'";

//Udfører query
$result = mysql_query($query) or die("Query failed : " . mysql_error());
$indlaeg = mysql_query($slet) or die("Query failed : " . mysql_error());
Print "<META HTTP-EQUIV='Refresh' Content='3; Url=index.php'> <center><font
color='darkred'>Tråden er slettet'</font></center>";

Er ikke helt med på det avancerede php, så holder det så simpelt som muligt.

--
Christoffer



Bent Stigsen (07-05-2005)
Kommentar
Fra : Bent Stigsen


Dato : 07-05-05 12:51

Christoffer wrote:
> har løst det.
> //Query der sletter brugeren ud fra id
> $query = "DELETE FROM forum WHERE id='$_GET[id]' and parent=0";
> $slet = "DELETE FROM forum WHERE parent='$_GET[id]'";
>
> //Udfører query
> $result = mysql_query($query) or die("Query failed : " . mysql_error());
> $indlaeg = mysql_query($slet) or die("Query failed : " . mysql_error());
> Print "<META HTTP-EQUIV='Refresh' Content='3; Url=index.php'> <center><font
> color='darkred'>Tråden er slettet'</font></center>";
>
> Er ikke helt med på det avancerede php, så holder det så simpelt som muligt.

Det er ikke så avanceret endda. Jeg tror du mere tænker i sproglige
baner end matematisk logiske. Det kan du til dels godt udnytte, du skal
bare passe på hvordan du formulerer dit problem.

Fx. jeg kunne forestille mig, at du har tænkt noget i retning af:
Rækken som har id lig den valgte tråd *og* de rækker hvor parent peger
på den valgte tråd skal slettes.
"Og"'et kan ikke overføres til where-betingelsen i sql, fordi de
betingelser der er formuleret spænder over alle rækker, hvor i sql
kontrolleres betingelserne for hver enkelt række.

Betingelsen for den enkelte række kan formuleres:
En række skal slettes, enten hvis id er lig den valgte tråd, *eller*
hvis parent peger på den valgte tråd.
Og så får man det rigtige logiske "eller" i sql'en.

Evt. skriv et ar rækker ned på papir, regn ud betingelsen ud, og
kontroller at det stemmer overens med hvad du forventer.

+----+--------+-------------------+------------------+
| id | parent | id=1 and parent=1 | id=1 or parent=1 |
+----+--------+-------------------+------------------+
| 1 | 0 | 0 | 1 |
| 2 | 1 | 0 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 0 | 0 | 0 |
| 5 | 0 | 0 | 0 |
| 6 | 1 | 0 | 1 |
| 7 | 0 | 0 | 0 |
+----+--------+-------------------+------------------+


/Bent

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste