Avatar billede sux Nybegynder
23. februar 2002 - 17:37 Der er 53 kommentarer og
1 løsning

Unlink funktion

Hej

Jeg leder efter en videreudbygning af nedenstående funktion, som indtil nu virker fint:
Sletning af artikler, som er ældre end nr 80 artikel.

Det som funktionen skal kunne, udover det som den allerede kan, er at den skal slette de tilhørende billeder til de artikler, som er for gamle.
Den skal lede efter ethvert billede i tabellen 'artikler’ og kolonnen 'tekst' og slette dem.

Så der er givetvis en UNLINK funktion som man skal have fat i.



Funktionen ser indtil nu således ud:

$result = mysql_query("SELECT id FROM artikler ORDER BY id DESC LIMIT 80,100");
while($row = mysql_fetch_array($result)) {
    $sletid = $row[id];
    mysql_query("delete from artikler where id='$sletid'");
}
Avatar billede sux Nybegynder
23. februar 2002 - 17:39 #1
Mere info:

- Jeg gemmer billederne i biblioteket: /images/
- Format eksempel: <img src="/images/LarsP&AllanB_sa_2.jpg" width="400" height="320">
- Billederne har forskellig størrelse
Avatar billede dmcn Praktikant
23. februar 2002 - 17:40 #2
Øh... hvorfor ikke bare:
DELETE FROM artikler WHERE id > 80
? Det er da ti gange lettere.
Avatar billede sux Nybegynder
23. februar 2002 - 17:43 #3
Fordi at id rækken ikke nødvendigvis er:

1,2,3,4,5,6
men
2,4,5,6,8,10
pga at nogle artikler er slettet
Avatar billede dmcn Praktikant
23. februar 2002 - 17:45 #4
Øh... det ændrer da intet? Du vil gerne slette alle artikler med ID over 80 og under 100, ikke?
mysql_query("DELETE FROM artikler WHERE id > 80 AND id < 100");
Det er alt du behøver.
Avatar billede sux Nybegynder
23. februar 2002 - 17:47 #5
Nej. Jeg vil have de 80 nyeste artikler. Resten skal slettes.
Avatar billede sux Nybegynder
23. februar 2002 - 17:48 #6
Men det er også lidt ligemeget i forhold til det som spørgsmålet går ud på, ikke :-)
Avatar billede dmcn Praktikant
23. februar 2002 - 17:50 #7
sux : Det er sådan set også det min kode burde gøre. :D
Men jo, det er irrelevant - vi optimerer bare din kode lidt. :)
Avatar billede sux Nybegynder
23. februar 2002 - 17:53 #8
Okay - du får ret :-)

Hvad siger i til mit spørgsmål???
Avatar billede tipsen Nybegynder
23. februar 2002 - 17:59 #9
apropos optimering af koden til at slette de artikler, som ikke hører til blandt de 80 med lavest id:

$result = mysql_query("SELECT id FROM artikler ORDER BY id DESC LIMIT 81,1");
$startid = mysql_result($result,0)
mysql_query("delete from artikler where id > $startid");

hvis id feltet er numerisk...
Avatar billede tipsen Nybegynder
23. februar 2002 - 18:00 #10
ups... DESC -> ASC
Avatar billede sux Nybegynder
23. februar 2002 - 18:04 #11
Takker ...
Jeg ser i danser rundt om den varme grød ... :-)
Hvad mht mit spørgsmål om hvordan jeg "unlinker" billederne i de udgåede artikler?
Avatar billede tipsen Nybegynder
23. februar 2002 - 18:06 #12
for at fortsætte dansen, ville det være væsentligt nemmere, hvis linksene optrådte i en separat kolonne i databasen...
Avatar billede tipsen Nybegynder
23. februar 2002 - 18:07 #13
hvis folk vil have mere info om opgaven henvises til: http://www.eksperten.dk/spm/176251
Avatar billede sux Nybegynder
23. februar 2002 - 18:09 #14
Ja, det har du ret i.
Avatar billede sux Nybegynder
23. februar 2002 - 18:11 #15
Men det gør det bare mere besværligt at lave artiklerne.
Avatar billede repsac Nybegynder
23. februar 2002 - 18:22 #16
Hmmm... noget i denne stil vel:

<?php
$tekst = 'hej med dig her er et billede <img src="test/test.img"> det er ikke det eneste, for her er et mere: <img src="nyt/billede.fil"> og så det sidste <img src="sidste/billede.bil"> det var det...';
$arr1 = explode('<img src="', $tekst);
echo "<p>";
for ($i=1; $i<count($arr1); $i++) {
    $string = ereg_replace("\">[a-zA-ZæøåÆØÅ0-9!@#$%^&*()?<>,.;: ]*", "", $arr1[$i]);
    echo $string."<br>";
    //@unlink($string); //måske skal du kringle det lidt mht. stien...
}
?>
Avatar billede sux Nybegynder
23. februar 2002 - 18:27 #17
Okaaay ...
Det ser interessant ud. Hvordan og hvorledes ?!
Avatar billede repsac Nybegynder
23. februar 2002 - 18:29 #18
Jeg har aldrig fundet ud af hvordan man matcher alle tegn... derfor må du selv addere flere tegn til hvis du benytter andet end [a-zA-ZæøåÆØÅ0-9!@#$%^&*()?<>,.;: ]

=>sux: vil du have jeg skal forklare?
Avatar billede sux Nybegynder
23. februar 2002 - 18:30 #19
Ja tak! Og det ville være lækkert at vide hvordan jeg kobler det til tabellen artikler og kolonnen tekst, jf den problemstilling jeg har snakket om ovenfor :-)
Avatar billede repsac Nybegynder
23. februar 2002 - 18:32 #20
=>sux: se i første omgang på hvad de forskellige funktioner gør...
www.php.net/explode
www.php.net/count
www.php.net/ereg_replace
www.php.net/unlink

Derefter kan du evt. se på denne lille fine tutorial: http://www.phpbuilder.com/columns/dario19990616.php3

Så forstår du nok lidt mere, men hvis du derefter har spørgsmål så spyt bare ud... :)
Avatar billede sux Nybegynder
23. februar 2002 - 18:35 #21
jeg ser lige hurtigt på det :-)
Avatar billede repsac Nybegynder
23. februar 2002 - 18:37 #22
oki :)
Avatar billede sux Nybegynder
23. februar 2002 - 18:43 #23
hvordan jeg kobler det til tabellen artikler og kolonnen tekst ?
Avatar billede sux Nybegynder
23. februar 2002 - 18:45 #24
Og det virker jo fortræffeligt når man ligger sætter rights i mappen
Avatar billede sux Nybegynder
23. februar 2002 - 18:46 #25
Men det er fand... ellers smart!!
Avatar billede repsac Nybegynder
23. februar 2002 - 18:48 #26
Det skal jo bare køre i en while...

while ($row = mysql_fetch_array($result)) {
    $tekst = $row['tekstfeltets_navn_fra_tabellen'];
    //dit andet delete-haløj...
}
Avatar billede repsac Nybegynder
23. februar 2002 - 18:50 #27
Hmmm... så ser man følgende for mr. sux:

besvarede: 6
oprettede: 98

Du har altså spurgt godt 16 gange mere end du har svaret...

Måske skulle du overveje at hjælpe andre også i stedet for bare at modtage hjælp... :-/
Avatar billede sux Nybegynder
23. februar 2002 - 18:58 #28
Ja, statistikken er jo ikke lige frem med mig. Det må være eksperten der har lavet en regnefejl :-)
Avatar billede repsac Nybegynder
23. februar 2002 - 19:02 #29
=>sux: det tror jeg nu ikke.

Jeg kiggede 10 tilfældige af de spm. efter som du har deltaget i. I 9 af dem var du spørger, så statistisk set er det ikke helt skævt...

http://www.eksperten.dk/bruger.phtml?navn=sux&option=21
- her ser du hvor mange spørgsmål du har svaret på: 6

http://www.eksperten.dk/bruger.phtml?navn=sux&option=22
- her ser du hvor mange spørgsmål du har oprettet: 98
Avatar billede tipsen Nybegynder
23. februar 2002 - 19:03 #30
Der er noget mere om regular expressions på:

http://www.zend.com/manual/pcre.pattern.syntax.php

for at matche et vilkårligt tegn benyttes . (punktum)

desuden er eregi_replace() ikke case-sensitive!
Avatar billede sux Nybegynder
23. februar 2002 - 19:03 #31
Dvs samlet set skal det se ud a la det her:

<?php
$result    = mysql_query("SELECT id FROM artikler2 ORDER BY id DESC LIMIT 81,1");
while ($row = mysql_fetch_array($result)) {
    $tekst  = $row['tekst'];
    $startid = mysql_result($result,0)
    mysql_query("delete from artikler2 where id > $startid");
}
$arr1 = explode('<img src="', $tekst);
echo "<p>";
for ($i=1; $i<count($arr1); $i++) {
    $string = ereg_replace("\">[a-zA-ZæøåÆØÅ0-9!@#$%^&*()?<>,.;: ]*", "", $arr1[$i]);
    echo $string."<br>";
    unlink($string);
}
?>
Avatar billede sux Nybegynder
23. februar 2002 - 19:06 #32
Repsac jeg tror, at Danmarks Statistik går glip af en utrolig ressource ved ikke at have dig med i staben af medarbejdere ... :)

Godt ord igen
Avatar billede tipsen Nybegynder
23. februar 2002 - 19:06 #33
Jeg synes det er fair nok at stille flere spørgsmål end man besvarer - der vil altid være nogen som ved mere end andre - selvfølgelig til en vis grænse.

Jeg synes derimod ikke det er i orden med alle de bestillingsopgaver der kommer, hvor folk vil have kodet hele websites, ordresystemer eller lignende... - men det vil der selvfølgelig altid være, sålænge nogen indlader sig på arbejdet...

--tipsen--
Avatar billede sux Nybegynder
23. februar 2002 - 19:07 #34
Okay tipsen, så det er mere noget a la det her:

<?php
$result    = mysql_query("SELECT id FROM artikler2 ORDER BY id DESC LIMIT 81,1");
while ($row = mysql_fetch_array($result)) {
    $tekst  = $row['tekst'];
    $startid = mysql_result($result,0)
    mysql_query("delete from artikler2 where id > $startid");
}
$arr1 = explode('<img src="', $tekst);
echo "<p>";
for ($i=1; $i<count($arr1); $i++) {
    $string = ereg_replace(".", "", $arr1[$i]);
    echo $string."<br>";
    unlink($string);
}
?>
Avatar billede sux Nybegynder
23. februar 2002 - 19:09 #35
Jeg fornemmer at stemningen bevæger sig i retning af en diskussion af etiske spilleregler i eksperten.
Avatar billede tipsen Nybegynder
23. februar 2002 - 19:09 #36
sux: Du skal passe på når du på den måde tager lidt fra mange forskellige løsninger - så er det ikke sikkert at du får det resultat du regner med - jeg kan ikke umiddelbart gennemskue om din kode gør det rigtige længere, men jeg kunne da genkende "LIMIT 81,1", som vist ikke giver meget mening i den nye kontekst...

--tipsen--
Avatar billede sux Nybegynder
23. februar 2002 - 19:13 #37
Ja, okay.
Jeg skiller snot fra vand igen så.

Men tilbage til den tidligere diskussion, så synes jeg da ikke, at jeg har forbrudt mig mod regler gældende for det her sted.
Avatar billede sux Nybegynder
23. februar 2002 - 19:14 #38
heller ikke de såkaldte moralske spilleregler.
Avatar billede sux Nybegynder
23. februar 2002 - 19:17 #39
Og stilheden sænkede sig ned over spørgsmål 176600
Avatar billede repsac Nybegynder
23. februar 2002 - 19:18 #40
sux: jeg har på intet tidspunkt antydet at du bryder reglerne, men jeg forsøger at få dig til at forstå at man ikke udelukkende kan tage - man må også give. Sådan er det jo også til jul ikk'...

Hvad hedder den række som teksten står i? - tekst?
Avatar billede sux Nybegynder
23. februar 2002 - 19:19 #41
Det var ikke meningen at skræmme dig væk repsac.
Avatar billede tipsen Nybegynder
23. februar 2002 - 19:21 #42
Det eneste hvor jeg synes du ligger på grænsen (og ja, det er subjektivt) er at du poster opgaver, hvor du egentlig mest er interesseret i bare at få serveret en løsning i stedet for at finde ud af hvordan problemet løses og så selv bikse med det resten af vejen! Men det hænger så også sammen med at jeg hellere vil lære en metode, som jeg kan generalisere end jeg vil have en løsning, som jeg måske ikke helt forstår - at der så er mange ting jeg ikke kan lave endnu er bare ærgeligt - det kommer nok!

--tipsen--
Avatar billede sux Nybegynder
23. februar 2002 - 19:21 #43
yep, den hedder tekst.
Avatar billede sux Nybegynder
23. februar 2002 - 19:24 #44
Jeg kan godt følge dig tipsen.
Avatar billede sux Nybegynder
23. februar 2002 - 19:34 #45
Men det er lørdag aften og det er ikke længe siden at det var jul.
Tak for hjælpen drenge!
Avatar billede sux Nybegynder
23. februar 2002 - 19:48 #46
Det eneste problem der opstår er når der fx er  height="50" width="50" med i billederne. Så vil scriptet ikke virke korrekt.
Avatar billede sux Nybegynder
23. februar 2002 - 19:57 #47
Men det er let at rette kanjeg også se :-)
Avatar billede sux Nybegynder
23. februar 2002 - 20:31 #48
Tak for hjælpen! Jeg har fundet ud af det nu!
Avatar billede repsac Nybegynder
24. februar 2002 - 23:32 #49
Velbekomme... her er den forbedrede der accepterer _alle_ tegn...

<?php
$tekst = 'hej med dig her er et billede <img src="test/test.img"> det er ikke det eneste, for her er et mere: <img src="nyt/billede.fil"> og så det sidste <img src="sidste/billede.bil"> det var det...';
$arr1 = explode('<img src="', $tekst);
echo "$tekst";
echo "<p>";
for ($i=1; $i<count($arr1); $i++) {
    $string = ereg_replace("\">.*", "", $arr1[$i]);
    echo $string."<br>";
    //@unlink($string); //måske skal du kringle det lidt mht. stien...
}
?>
Avatar billede tipsen Nybegynder
25. februar 2002 - 01:03 #50
Man kan vel altid komme med et alternativ:

<?php
$tekst = 'hej med dig her er et billede <img src="test/test.img"> det er ikke det eneste, for her er et mere: <img src="nyt/billede.fil"> og så det sidste <img src="sidste/billede.bil"> det var det...';
preg_match_all('/<img.*?src=\"(.*?)\".*?>/', $tekst, $allimages);
foreach ($allimages[1] as $images) {
  unlink $images;
}
?>

NB: Har kun lige testet det på den streng repsac bruger - det ser ud til at virke fint, men du kan evt. teste det på nogle flere strenge og bare skrive indholdet ud med echo!

--tipsen--
Avatar billede sux Nybegynder
25. februar 2002 - 21:23 #51
Hvad er fordelen ved din løsning tipsen??
Avatar billede sux Nybegynder
25. februar 2002 - 21:28 #52
"Jeg" har lavet funktionen således:

print "<b><font color=\"#FF0000\">Følgende billeder er slettet:</font></b><br>";
while ($row = mysql_fetch_array($result)) {
    $tekst = $row['tekst'];
    $tekst = ereg_replace("http://www.surfersinfo.dk/", "", $tekst);
    $tekst = ereg_replace("/images", "images", $tekst);
    $tekst = ereg_replace(" ", "", $tekst);
    $tekst = ereg_replace("&nbsp;", "", $tekst);
    $arr1 = explode('<imgsrc="', $tekst);
    echo "<p>";
    for ($i=1; $i<count($arr1); $i++) {
    $string = ereg_replace("\"[a-zA-ZæøåÆØÅ0-9!@#$%^&*()=?<>,.;: ].*", "", $arr1[$i]);
    echo $string."<br>";
    unlink($string);
}
}
Avatar billede tipsen Nybegynder
25. februar 2002 - 21:36 #53
Jeg vil mene at fordelen er at koden er nemmere at overskue, kortere og hurtigere...

print "<b><font color=\"#FF0000\">Følgende billeder er slettet:</font></b><br>";
while ($row = mysql_fetch_array($result)) {
    $tekst = $row['tekst'];
    preg_match_all('/<img.*?src=\"(.*?)\".*?>/', $tekst, $allimages);
    foreach ($allimages[1] as $image) {
        echo "$image<br>";
        unlink $image;
    }
}

Men det er jo smag og behag!
Avatar billede tipsen Nybegynder
25. februar 2002 - 21:46 #54
regexp'en skal forøvrigt lige ændres til:

preg_match_all('/<img.*?src=\"(.*?)\".*?>/i', $tekst, $allimages);

bemærk i'et i slutningen - så er sammenligningen ikke case-sensitive!

--tipsen--
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