Avatar billede Slettet bruger
02. april 2012 - 16:56 Der er 38 kommentarer og
1 løsning

Kan ikke unlink /images når dato er overskredet

Hvorfor virker dette ikke?

$idag= time();
include ('databasen.php');

if ($row[date]<$idag){
$id=$_GET['id'];
$billede_sql = "SELECT billede FROM tabel WHERE date < $idag AND id='$id'";

$result = mysql_query($billede_sql);
$billede = mysql_fetch_array($result);
unlink("images/fotos/" . $billede['billede']);
unlink("images/fotos/thumb_" . $billede['billede']);
$sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");
}
Avatar billede olsensweb.dk Ekspert
02. april 2012 - 17:28 #1
1) date er en intern function http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
kald feltet noget andet eller brug `date` læg mærke til `omkring felt navnet
2) hvad format er date ?? int, string, date, datetime.... ??
Avatar billede Slettet bruger
02. april 2012 - 17:33 #2
Date er int.
Forstår ikke hvad du mener ved 1) ?
Har rodet med det men kan ikke få det til at fungere.
Avatar billede olsensweb.dk Ekspert
02. april 2012 - 17:48 #3
>Forstår ikke hvad du mener ved 1) ?
google sql reserved words as column names
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
ref http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

citat
The identifier quote character is the backtick ("`"):
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
/citat


>Date er int.
det skulle være ok da time også retunerer en int http://www.php.net/manual/en/function.time.php
Avatar billede Slettet bruger
02. april 2012 - 17:51 #4
Så hvad er det jeg skal ændre i koden?
Avatar billede olsensweb.dk Ekspert
02. april 2012 - 18:03 #5
omdøb feltet date i din db eller set backtick omkring date feltet i din sql sætning

prøv dette først
$billede_sql = "SELECT billede FROM tabel WHERE `date` < $idag AND id='$id'";
....
$sqla = mysql_query("DELETE FROM tabel WHERE `date` < $idag AND id='$id'");

det er iøvrigt en god ide altid at omgive felt navne med backtick bare som vane
Avatar billede stigma Nybegynder
02. april 2012 - 18:07 #6
Som ronols prøver at lede dig hen til, er at date er et reserveret ord, når du laver MySQL forespørgsler, derfor kalder man normalt ikke sine felter disse navne, hvis man vælger at gøre dette, skal man sætte "backtick's" omkring ordet, som du kan se i nederstående forespørgsler.

$billede_sql = "SELECT billede FROM tabel WHERE `date` < $idag AND id = '$id'";

$sqla = mysql_query("DELETE FROM tabel WHERE `date` < $idag AND id = '$id'");
Avatar billede Slettet bruger
02. april 2012 - 18:14 #7
Når jeg sætter det ind, viser den intet overhovede. Den viser ingen events? hmm
Avatar billede olsensweb.dk Ekspert
02. april 2012 - 19:00 #8
prøv at echo date feltet
echo $row[date];
hvad står det i date feltet ??

der burde stå et tal der er størrer end 1333385727 aktuelle tid
Avatar billede Slettet bruger
02. april 2012 - 19:19 #9
1333663200
Avatar billede olsensweb.dk Ekspert
02. april 2012 - 19:31 #10
ja den bliver ikke ramt af coden vist i #0,
hvordan selecter du billederne der skal visses ??
Avatar billede Slettet bruger
02. april 2012 - 19:38 #11
Altså det virker fint nednedestående

$idag= time();
include ('databasen.php');

if ($row[date]<$idag){
$sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");

men lige så snart jeg vil have det til at slette billedet der høre med så virker det ikke og kan simpelthen ikke se fejlen:

//slet billede
$id=$_GET['id'];
$billede_sql = "SELECT billede FROM tabel WHERE date < $idag AND id='$id'";

$result = mysql_query($billede_sql);
$billede = mysql_fetch_array($result);
unlink("images/fotos/" . $billede['billede']);
unlink("images/fotos/thumb_" . $billede['billede']);
Avatar billede Slettet bruger
03. april 2012 - 11:52 #12
Håber der er nogle der kan hjælpe, ellers kommer der til at ligge en masse billeder og fylde :-(
Avatar billede olebole Juniormester
03. april 2012 - 14:43 #13
<ole>

Hvorfor skriver du koden i #11? Du skulle jo bruge backticks rundt om dine navne:

$sqla = mysql_query("DELETE FROM `tabel` WHERE `date` < $idag AND `id`='$id'");

// - og:

$billede_sql = "SELECT `billede` FROM `tabel` WHERE `date` < $idag AND `id`='$id'";

Så forklarer du, hvad du mener med "så virker det ikke". Hvad er det, som ikke virker? Bliver det fysiske billede ikke slettet? Bliver der ikke slettet noget i din DB - flækker din skærm - eller er det noget helt fjerde, der ikke virker?

Hvis det er dit DB-kald, der ikke virker, kan du ganske kortvarigt prøve at se, om du får skrevet SQL-fejl ud med:

$result = mysql_query($billede_sql) or die (mysql_error());

/mvh
</bole>
Avatar billede Slettet bruger
03. april 2012 - 15:00 #14
Hør nu her.
Det virker fint at den sletter i databasen, men jeg vil gerne have at den også sletter billede i mappen images/fotos på serveren så de ikke fylder og optager en masse plads når eventen jo er overstået og slettet fra db.

Det andet virker fint uden '' rundt om så det er ikke det som gør forskellen i hvert fald :-)
Avatar billede olebole Juniormester
03. april 2012 - 15:23 #15
Hør nu selv her: Hvis du ikke vil lære god kodeskik, så fortsætter du bare med din hjemmestrikkede stil - uagtet, du af erfarne udviklere får at vide, at du skyder dig selv i foden. Er du for klog til at lære, er der ikke noget at gøre ved det!

Vi ved stadig ikke, hvad det er, du prøver at gøre. Udfra de kodestumper, du har bidraget med, er det ikke til at gætte, hvor det går galt.

Gør du tingene i den rækkefølge, du viser i spørgsmålet - eller i den, du viser i #11? Der er en verden til forskel.

Hvad får du ud af at skrive:

$billede = mysql_fetch_array($result);
echo "images/fotos/" . $billede['billede'];

Skrives stien ud til det billede, der skal slettes?

Det lyder meget mærkeligt, at du ikke får fejl, hvis unlink ikke virker. Prøv kortvarigt at skrive:

error_reporting(E_ALL);

- som det allerførste i dokumentet. Så vil du formodentlig få en fejl, der fortæller, hvad du gør galt.

Under alle omstændigheder ville lidt mere kode og en tydelig forklaring være gavnligt  =)
Avatar billede Slettet bruger
03. april 2012 - 15:35 #16
Jeg skriver det som jeg har skrevet det i spørgsmålet øverst.
det der undre mig er at den godt vil slette i databsen men den vil ikke unlinke og slette billedet fra /fotos mappen :-(

jeg har brugt koden før på et link som kunne slette og der virkede det, men nu når jeg sætter den ind i en if virker det ikke :-(

den skriver ikke noget når jeg sætter den der error ind?
Avatar billede olebole Juniormester
03. april 2012 - 15:46 #17
"den skriver ikke noget når jeg sætter den der error ind?" >> Jeg har ikke skrevet noget om, at du skulle sætte en error ind.

Hvad fik du ud af at skrive:

$billede = mysql_fetch_array($result);
echo "images/fotos/" . $billede['billede'];
Avatar billede Slettet bruger
03. april 2012 - 15:54 #18
Du skrev jeg skulle sætte error_reporting(E_ALL); ind :-)

Hvor skal jeg sætte nedenstående ind?

$billede = mysql_fetch_array($result);
echo "images/fotos/" . $billede['billede'];

Undskyld men jeg er lidt blank pt. det er jo derfor jeg spørger om hjælp :-)
Avatar billede olebole Juniormester
03. april 2012 - 16:09 #19
"Du skrev jeg skulle sætte error_reporting(E_ALL); ind" >> Ja, og det har intet med en error at gøre  =)

Det lyder sært, du ikke får noget ud af det. unlink kaster en warning, når den ikke lykkes. Altså virker den - eller også fortæller PHP dig, hvorfor den ikke virker.

$id=$_GET['id'];
$billede_sql = "SELECT `billede` FROM `tabel` WHERE `date` < $idag AND `id`='$id'";

$result = mysql_query($billede_sql);
$billede = mysql_fetch_array($result);
echo "Mit billede: images/fotos/" . $billede['billede'];
Avatar billede Slettet bruger
03. april 2012 - 16:15 #20
Nej det ved jeg godt, men sidder med en masse koder, så derfor fatter jeg mig kort, med små hints -> ligesom error (hint). hehe

Hmm jeg fik ikke nogen fejl da jeg smed error_reporting(E_ALL); ind men når jeg sætter #0(spørgsmålet) ind i koden så fjerner den faktisk alt det den skulle echo ud?! :-= meget underligt, så der må jo være en fejl, men den skriver ikke hvad.
Avatar billede olebole Juniormester
03. april 2012 - 16:24 #21
Jeg fatter simpelthen ikke, hvad du skriver. Det er muligt, du gerne vil 'fatte dig kort', men hvis du ikke bruger mere energi på at forklare dig tydeligt, fatter vi andre intet
Avatar billede Slettet bruger
03. april 2012 - 16:32 #22
Jamen jeg ved ikke hvordan jeg ellers skal forklare det. jeg forstår jo ikke selv hvad der er galt?!
Jeg har skrevet det her i min kode og det virker fint

<?php
            $idag= time();
           
            include ('db.php');
            $sql = "SELECT * FROM tabel WHERE godkendt='1' ORDER BY date ASC LIMIT 15";
            $result = mysql_query($sql);
           
            if ($row[date]<$idag){       
            $sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");       
            }
            while ($row = mysql_fetch_array($result)) {
            echo 'hej';
            }
            ?>

Når jeg så tilføjer nedenstående så virker det ikke

$idag= time();
include ('databasen.php');

if ($row[date]<$idag){
$id=$_GET['id'];
$billede_sql = "SELECT billede FROM tabel WHERE date < $idag AND id='$id'";

$result = mysql_query($billede_sql);
$billede = mysql_fetch_array($result);
unlink("images/fotos/" . $billede['billede']);
unlink("images/fotos/thumb_" . $billede['billede']);
$sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");
}

Jeg ved ikke hvorfor det ikke virker men det den skal
er at slette det billede der høre med til fra images/fotos mappen når den sletter i databasen når $idag er overkskredet.
Hvis du / i ikke forstår det så må jeg droppe det for kan ikke forklare det anderledes.
Avatar billede olebole Juniormester
03. april 2012 - 16:39 #23
Det kan ikke passe, hvad du skriver. Det her kan ikke virke:

<?php
            $idag= time();
           
            include ('db.php');
            $sql = "SELECT * FROM tabel WHERE godkendt='1' ORDER BY date ASC LIMIT 15";
            $result = mysql_query($sql);
           
            if ($row[date]<$idag){       
            $sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");       
            }
            while ($row = mysql_fetch_array($result)) {
            echo 'hej';
            }
?>

Du sætter jo ikke $id noget sted.
Avatar billede Slettet bruger
03. april 2012 - 16:43 #24
OKay, men så er det vel problemet, grunden til jeg skriver her er jo fordi jeg ikke selv ved det, så må du jo fortælle mig hvad der er galt :-)
Avatar billede olebole Juniormester
03. april 2012 - 16:47 #25
Hvis jeg skal fortælle, hvad der går galt, må du fortælle, hvad der skal ske. Hvorfra kommer $id - ogh hvad skal den indeholde?

Hvad sker der, hvis du skriver:

            if ($row[date]<$idag){       
            $sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");       
            }
Avatar billede olebole Juniormester
03. april 2012 - 16:48 #26
Sludder! Sådan:

            if ($row[date]<$idag){       
            echo 'SQL: '."DELETE FROM tabel WHERE date < $idag AND id='$id'";
            $sqla = mysql_query("DELETE FROM tabel WHERE date < $idag AND id='$id'");       
            }
Avatar billede Slettet bruger
03. april 2012 - 16:53 #27
så skriver den:

SQL: DELETE FROM tabel WHERE date < 1333464744 AND id=''
Avatar billede olebole Juniormester
03. april 2012 - 17:00 #28
Altså må vi slå fast, at det, du påstår virker, ikke virker. Hvor kommer $id fra - og hvad forventes den at indeholde?
Avatar billede Slettet bruger
03. april 2012 - 17:09 #29
Hm jamen så forstår jeg det slet ikke for den sletter rent faktisk fra databasen når datoen er overskredet?! Hmm
Er SÅ forvirret nu.
Avatar billede olebole Juniormester
03. april 2012 - 17:12 #30
Jamen, i følge SQL'en skal ID'en jo også være en bestemt, før der må slettes
Avatar billede olebole Juniormester
03. april 2012 - 17:14 #31
Vi kommer tilbage til det spørgsmål, jeg efterhånden har stillet nogle gange: Hvad skal $id - hvor kommer den fra - og hvad forventes den at indeholde?
Avatar billede Slettet bruger
03. april 2012 - 17:16 #32
Hm måske skal jeg slet ikke bruge id?
Den skal jo bare teste om daten som er sat i db er overskredet med datoen idag og hvis ja så slet + unlink images :-)
Avatar billede olebole Juniormester
03. april 2012 - 17:24 #33
Jamen, i det andet eksempel sætter du jo $id. Jeg fatter hat af det her! Hvad får du ud af dette i det andet eksempel:

if ($row[date]<$idag){
$id=$_GET['id'];
echo 'SQL: '."SELECT billede FROM tabel WHERE date < $idag AND id='$id'";
$billede_sql = "SELECT billede FROM tabel WHERE date < $idag AND id='$id'";
Avatar billede Slettet bruger
03. april 2012 - 17:32 #34
Jeg får nok ikke noget ud af det, det var en gammel kode jeg havde brugt før så troede den virkede igen, men kan godt se at i det gamle blev $id sendt med fra et link, og det gør det ikke nu så bare glem alt om $id den gør ikke noget godt.

skal bruge en metode der sletter billederne i mappen, hvis du ved hvordan så skriv det og glem det jeg har skrevet, det er jo åbenbart forkert.
Avatar billede olebole Juniormester
03. april 2012 - 17:43 #35
Jeg ved stadig ikke, hvad det præcist er, du skal bruge. Jeg hopper ud af tråden her
Avatar billede Slettet bruger
03. april 2012 - 17:51 #36
Jeg skal bruge en php kode der kan slette et billede fra ftp / images-mappen hvis datoen er overskredet! DVS:

Hvis dato på billede i db er 10 april
så når vi kommer til d. 10 april bliver billedet automatisk slettet da der skal køre en if sætning når billederne bliver udskrevet evt,

if ($row[date]<$idag){     
$sqla = mysql_query("DELETE FROM tabel WHERE date < $idag");
}
Avatar billede olebole Juniormester
03. april 2012 - 18:41 #37
Jamen, $rows[date] er også en af disse variabler, der på magisk vis opstår af ingenting. Du definerer ingen steder $row.

Hvis jeg skal gætte på, hvad du vil, kunne dette måske være en løsning:

<?php
include ('db.php');
$idag= time();

$sql = "SELECT `id`, `billede` FROM `tabel` WHERE `godkendt`='1' AND `date`<'".$idag."'";
$result = mysql_query($sql) or die (mysql_error());
echo '<p>Fandt '.mysql_num_rows($result).' for gamle billeder i databasen.</p>';

$arrIds = array();
while ($row=mysql_fetch_assoc($result)) {
    $arrIds[] = '`id`='.$row['id'];
    unlink("images/fotos/" . $row['billede']);
    unlink("images/fotos/thumb_" . $row['billede']);
}
echo '<p>'.count($arrIds).' billeder og thumbnails slettet i mappen.</p>';

$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);
$result = mysql_query($sql) or die (mysql_error());
echo '<p>'.mysql_affected_rows().' billeder slettet i databasen.</p>';
?>

Når du er færdig med at teste, sletter du det, der er skrevet med rødt
Avatar billede Slettet bruger
04. april 2012 - 13:11 #38
okay, jeg tror det virker, men den udskriver dette:

Fandt 0 for gamle billeder i databasen

0 billeder og thumbnails slettet i mappen

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 '' at line 1

Så kan ikke se om det virke før jeg finder fejlen. kan du se den?
Avatar billede Slettet bruger
09. april 2012 - 15:34 #39
svar
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



IT-JOB

Roskilde Kommune

Digitaliseringschef

Udviklings- og Forenklingsstyrelsen

Driftsspecialist til tværfagligt team

Danoffice IT

Senior AI Specialist

PensionDanmark

Aktuar