Gå til innhold

Problemer med filopplasting [LØST]


Anbefalte innlegg

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
Lenke til kommentar
Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar
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.

Lenke til kommentar

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.

Lenke til kommentar

$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.

Lenke til kommentar

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.

Lenke til kommentar

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
Lenke til kommentar
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.

Lenke til kommentar

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
Lenke til kommentar

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

Lenke til kommentar

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...