Gå til innhold

Problemer med filopplasting [LØST]


Anbefalte innlegg

Skrevet (endret)

Det har vært oppe tusen ganger tidligere vil dere si. Ja, det stemmer og jeg trodde aldri jeg skulle spørre om det. Men nå skjønner jeg faktisk ingen ting. Jeg bruker et veldig enkelt script.

 

$bildefil = ""; 
        if( !empty($_FILES['bilde']['name']) ) {


        $temp_fil = $_FILES['bilde']['tmp_name'];


        $filtype = $_FILES['bilde']['type']; //mimetypen
        if ( strstr($filtype, "jpeg") ){ //godtar bare jpeg-filer
                $bildefil = $_FILES['bilde']['name'];
                move_uploaded_file($temp_fil, "../pub/bilder/" . $bildefil) or die ("kunne ikke kopiere" );
                            }

 

Filen kommer fra en input som har name"bilde". Form'en består av en rekke felt soms kal lagerlegges i en database(MySql). Legger det inn med følgende spørring: 

 

$sql = "INSERT INTO pub (
                                overskrift, forfatter, ingress, innhold,
                                lenkeadresse, lenkejanei, lenketittel, bilde, fotografi, 
                                fil_1, filnavn_1, fil_2, filnavn_2, fil_3, filnavn_3, informasjonskilde, 
                                publiseringsdato, dato_fjernes ) 
                            VALUES (" 
                                . "'" . $_POST['overskrift'] . "', " 
                                . "'" . $_POST['forfatter'] . "', "
                                . "'" . $_POST['ingress'] . "', "
                                . "'" . $_POST['innhold'] . "', "
                                . "'" . $lenkeadresse . "', "
                                . "'" . $_POST['lenkejanei'] . "', " 
                                . "'" . $_POST['lenketittel'] . "', "
                                . "'" . $bildefil . "', " 
                                . "'" . $_POST['fotografi'] . "', "
                                . "'" . $fil_1 . "', "
                                . "'" . $_POST['filnavn_1'] . "', "
                                . "'" . $fil_2 . "', "
                                . "'" . $_POST['filnavn_2'] . "', "
                                . "'" . $fil_3 . "', "
                                . "'" . $_POST['filnavn_3'] . "', "
                                . "'" . $_POST['informasjonskilde'] . "', "
                                . "'" . $publiseringsdato . "', " 
                                . "'" . $dato_fjernes . "'"    
                               . ")";

                    $register = mysql_query($sql,$tilkobling);
        echo mysql_error();

 

For de som lurer så har jeg omtrent samme opplasting på fil opplastingen. Jeg har brukt et script tidligere og dette er egentlig bare en videreutvikling av dette. Jeg er ikke så veldig flink i PHP men skjønner såpass at jeg forstår hva som skjer i koden osv. Det enklere scriptet fungerer utmerket. Men når jeg skulle gjøre det mer avansert så fungerer det altså ikke.

 

Problemet er at filene ikke vil kopieres inn til forholdshvis /pub/filer og /pub/bilder. I tillegg vil ikke informasjonen legges inn i databasen. Men all annen informasjon legges inn.

 

Takker for all hjelp.

 

Kim..

Endret av Kim T
Videoannonse
Annonse
Skrevet (endret)

Kan være du har ugyldige tegn i informasjonen du setter inn. (Du escaper ikke input ser det ut som)

 

du må ha or die(mysql_error()); etter mysql_query($sql);

ikke etter variabel tilordningen. den er true uansett

Endret av grimjoey
Skrevet

sorry min feil... leste en plass om å sette mysql_error der. Så hadde jeg ikke fjernet den før jeg postet her. Skal fjerne og skrive hvordan det er orginalt.

Skrevet (endret)

x or y;

 

er det samme som

 

if(!x) y;

 

variabeltilordning returnerer verdien på variabelen så vidt jeg har skjønt. en string som ikke er tom returnerer alltid true som gjør at det som er etter or aldri vil skje.

 

$sql = 'query statement';

$res = mysql_query($sql) or die(mysql_error());

 

eller if(!$res = mysql_query($sql)) die(mysql_error());

 

btw: all $_POST informasjonen din bør gjennomgå en mysql_real_escape_string().

eventuelt en stripslashes() først dersom magic_quotes_gpc er på.

Endret av grimjoey
Skrevet
x or y;

 

er det samme som

 

if(!x) y;

 

variabeltilordning returnerer verdien på variabelen så vidt jeg har skjønt. en string som ikke er tom returnerer alltid true som gjør at det som er etter or aldri vil skje.

 

$sql = 'query statement';

$res = mysql_query($sql) or die(mysql_error());

 

eller if(!$res = mysql_query($sql)) die(mysql_error());

 

Kommentar:

 

Er det noe galt i skriptet mitt siden du skriver dette som står over? For det jeg har skrevet er helt likt det som står i en PHP bok.

 

btw: all $_POST informasjonen din bør gjennomgå en mysql_real_escape_string().

eventuelt en stripslashes() først dersom magic_quotes_gpc er på.

 

Kommentar:

 

magic_quotes_gpc er ikke på.

Takker for initativet ditt. Bra jobbet. Det siste du skriver må jeg sette meg inn i. Har ikke vært borti det før.

Skrevet

jeg har bare sett deler av scriptet ditt. det med or die(mysql_error()) etter en variabeltilordning vil ikke fungere. det er ikke noe feil annet en at du aldri vil se noen feilmelding dersom det er noe galt med queriet.

 

function my_escape ($msg) {
 if(!is_numeric($msg)) {
if(get_magic_quotes_gpc()) $msg = stripslashes($msg);
$msg = mysql_real_escape_string($msg);
 }
 return $msg;
}

foreach ($_POST as $k => $v) {
 $_POST[$k] = my_escape($v);
}

 

denne koden vil escape alle post variabelene dine.

Skrevet (endret)

ja det står i første innlegg etter at jeg redigerte det.

 

EDIT: Burde jeg ikke kunne echo ut $tmp_fil? For det får jeg nemlig ikke til.

Endret av Kim T
Skrevet

$register = mysql_query($sql,$tilkobling);

 

til:

 

$register = mysql_query($sql,$tilkobling) or die(mysql_error());

 

kommer det fortsatt ikke ingen feilmelding ville jeg gjort en echo $sql. cut'n'paste insert stringen til phpmyadmin og sjekk om du får kjørt querien der.

Skrevet

hmmm... Er nok noe galt med hele scriptet mitt som jeg må gå igjennom. Får det virker som det er en del informasjon som blir borte.

 

Kjørte en echo av $sql som gav følgende resultat:

 

INSERT INTO pub ( overskrift, forfatter, ingress, innhold, lenkeadresse, lenkejanei, lenketittel, bilde, fotografi, fil_1, filnavn_1, fil_2, filnavn_2, fil_3, filnavn_3, informasjonskilde, publiseringsdato, dato_fjernes ) VALUES ('kim', 'kim', 'kim', '', '', 'ja', '', '', 'sin', '', '', '', '', '', '', '', '2008-01-05', '')

 

Der skal jo blant annet være et filnavn som skal være med der.... Når jeg kjører echo på $_FILES['bilde'] får jeg ut filnavnet. hvorfor blir ikek det med inn i databasen. Dette må jeg nok forske på. Mysql_error gir ingen feilmelding.

Skrevet (endret)

sjekk html <form>'en

 

pass på at MAX_FILE_SIZE er med for filopplasting og enctype="multipart/form-data"

 

sjekk at filstørrelsene ikke overskrider max file size i formen eller php.ini

 

edit: du kan også se på $_FILES['bilde']['error'] og sjekke hva eventuel feilkode betyr på php.net

Endret av grimjoey
Skrevet
sjekk html <form>'en

 

pass på at MAX_FILE_SIZE er med for filopplasting og enctype="multipart/form-data"

 

sjekk at filstørrelsene ikke overskrider max file size i formen eller php.ini

 

Kommentar:

max file size i formen? Er det noe jeg ikke har fått med meg. filen som er test fil er på 100kb. upload max i ini er 20M så det skal holde. enctypen er med i toppen av formen.

 

edit: du kan også se på $_FILES['bilde']['error'] og sjekke hva eventuel feilkode betyr på php.net

 

Kommentar:

får ikke noe ut av denne error. Ingenting skrives ut. -vet egentlig ikke hvordan jeg skal få ut info'en.

Skrevet (endret)

du må ha en <input type="hidden" name="MAX_FILE_SIZE" value="20000000" /> i formen for at php skal godta filopplasting. value endres til ønskede bytes.

 

echo 'Error: '.$_FILES['bilde']['error'];

 

Error: 0 betyr ingen feil. Error: 2 betyr ingen fil spesifisert. resten kan du lese om på php.net

Endret av grimjoey
Skrevet

<input type="hidden" name="MAX_FILE_SIZE" value="20000000" />

 

Dette var svaret. Da fungerte det utmerket. Tror jeg ikke har noen flere problemer foreløpig. Tusen takk for den enorme hjelpen grimjoey. Dette satt jeg enorm stor pris på. Rart at ikke det står i boken.

 

Kim...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...