Avatar billede meo Nybegynder
09. december 2004 - 21:29 Der er 25 kommentarer og
1 løsning

upload fil til database

Hej,
jeg har et problem med at upload en fil til databasen dvs den filen vil blive placeret i DB.

side 1.
dette ligger i en form
<p>Upload ftil databasen: <input  type="file" name="binFile" /> <input type="submit" value="Upload fil" /></p>

side 2.

$_FILES = $HTTP_POST_FILES;
if(isset($_FILES["binFile"]&& is_uploaded_file($_FILES["binFile"]["tmp_name"])))   
{                                                                                         
$binFile_name=$_FILES["binFile"]["name"];
$binFile_size=$_FILES["binFile"]["size"];
$binFile_type=$_FILES["binFile"]["type"];
$data = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));
//insert statement her......

}

fejlen er at $binFile... er tomme.

//meo
Avatar billede erikjacobsen Ekspert
09. december 2004 - 21:39 #1
Hvordan ser din <form> ud. Og du skal ikke bruge
  $_FILES = $HTTP_POST_FILES;
Hvis du mener det er nødvendigt at bruge, er din PHP alt for gammel og usikker.
Avatar billede erikjacobsen Ekspert
09. december 2004 - 21:40 #2
Og du skal vel have tilføjet
  $binFile=$_FILES["binFile"]["tmp_name"];
Avatar billede meo Nybegynder
10. december 2004 - 11:52 #3
Skal $binFile=$_FILES["binFile"]["tmp_name"]; ??
placeres :
$binFile_name=$_FILES["binFile"]["name"];
$binFile=$_FILES["binFile"]["tmp_name"]
$binFile_size=$_FILES["binFile"]["size"];

Jeg troede at det var et temporary filested. Altså at den så skulle hedde:
$binFile_tmp=$_FILES["binFile"]["tmp_name"]
Avatar billede erikjacobsen Ekspert
10. december 2004 - 12:01 #4
Du må kalde den hvad du vil, men du bruger jo $binFile
Avatar billede meo Nybegynder
11. december 2004 - 15:57 #5
Jeg har altid testet den på firefox og der kom denne "Warning: fread(): supplied argument is not a valid stream resource in......" den hentyder til denne sætning:
$data = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));

//Du må kalde den hvad du vil, men du bruger jo $binFile
ja men jeg vil tage de oplysninger i $binFile og indsætte dem de steder de høre hjemme. Eller hvordan jeg skal ellers kende forskel på dem når jeg skal indsætte dem i DB? -> måske med $binFile[0],$binFile[1] osv?
Avatar billede erikjacobsen Ekspert
11. december 2004 - 16:18 #6
Jeg forstår ikke hvad dit problem er. Der stod ingenting i $binFile, og så får du en fejl, naturligvis.

Hvad gør du nu? Har du fulgt mit råd?
Avatar billede meo Nybegynder
11. december 2004 - 17:54 #7
Så ved jeg ikke hvad jeg skrive i min insert-statement:
$sql = "INSERT INTO Doc_Version ";
$sql .= "(Userid, Contexts, File_Name, File_Body, File_Size, File_Type, Doc_Date) ";
$sql .= "VALUES ('".$_SESSION['UserID']."','$strDescription', ";
$sql .= "'".$binFile_name."','".$data."', '".$binFile_size."', '".$binFile_type."','".date('Y-m-d')."')";

når jeg skal bruge dit eks.:
$binFile=$_FILES["binFile"]["name"];
$binFile=$_FILES["binFile"]["tmp_name"];
$binFile=$_FILES["binFile"]["size"];
$binFile=$_FILES["binFile"]["type"];
Avatar billede meo Nybegynder
11. december 2004 - 17:55 #8
og så selvfølgelig data af dokumentet:

$data = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));
Avatar billede erikjacobsen Ekspert
11. december 2004 - 18:28 #9
Men det giver jo ingen mening at sætte $binFile til alting.
Prøv at glemme alt, undtagen mine to første kommentarer.
Avatar billede meo Nybegynder
11. december 2004 - 18:52 #10
Okay, det har jeg også fået gjort nu.
Jeg får stadig samme fejl på firefox:
"Warning: fread(): supplied argument is not a valid stream resource in......"

MEN!!
jeg har lige testet den på IE og den virker der!! Hvad mon er galt?
Avatar billede meo Nybegynder
11. december 2004 - 18:52 #11
hvorfor virker den ikke på firefox?
Avatar billede meo Nybegynder
11. december 2004 - 18:54 #12
jeg får en anden fejl med in select sætning hvor der er et Id og navn:

Resource id #4

hvad betyder dette?
Avatar billede erikjacobsen Ekspert
11. december 2004 - 18:54 #13
Det gør ingen forskel hvilken browser du bruger, det er blot firefox, der er
så venlig at fortælle hvad serveren sieger. Jeg kan ikke udtale mig om hvad der er
galt hvis du ikke viser mig hvad du laver.
Avatar billede meo Nybegynder
11. december 2004 - 19:00 #14
Jeg er igang med at lave en login, hvor man kan generere et brugernavn, password. filen er på 200 linier. så kan jeg ikke sende dig en mail?
Avatar billede erikjacobsen Ekspert
11. december 2004 - 19:06 #15
Nej, vi løser det her, eller vi løser det ikke.
Avatar billede meo Nybegynder
11. december 2004 - 19:13 #16
okay.
her får du koden:

                <?php
                include 'ConnectDB.php';
                $CConn  = new ConnectDB;
                if(isset($_GET['generate']) && !isset($_POST['submit'])){
                   
                    //generere automatisk et password og brugernavn
                   
                    $passw= md5($pwd);
                   
                    echo '<p> Brugernavn : '.$newuser.'</p>';// prints the password
                    echo '<p> Brug denne password: '.$pwd.'</p>';// prints the password
                    echo '<p> Med denne brugernavn og password vil du være bruger af gruppe 1</p>';
                   
                    echo '<p> Password i krypterede form: '.$passw.'</p>';// prints the password   
               
                }
                // if form has been submitted
                if(isset($_POST['Submit'])) {
                    echo '<p> submit </p>';
                    if(isset($generate)){
                        $resultset = $CConn->query("SELECT Id FROM Person WHERE UserName='".$newuser."'");
                        if(!mysql_num_rows($resultset)){
                            $querystr = "INSERT INTO Person(UserName, Password)";
                            $querystr .= " values ('".$newuser."', '".$passw."')"; 
                            $CConn->query($querystr);
                                           
                            $resultsetID = $CConn->query("SELECT MAX(Id) FROM Person");
                           
                            $rowId = mysql_fetch_row($resultsetID);
                            $personId = $rowId[0];
                           
                            $querystreng = "INSERT INTO Person_Department";
                            $querystreng .= " values ('".$personId."', '1')"; 
                           
                            $CConn->query($querystreng);
                       

                        }
                    }
                       
                // check they filled in what they were supposed to and authenticate
                    $flag=true;

                    if(!isset($_POST['uname'])){
                        $flag= false;
                       
                    }
                    if(!isset($_POST['passwd'])){
                        $flag= false;
                       
                    }
                    if($flag==true){
                       
                            // authenticate.
                            if(!get_magic_quotes_gpc()) {
                                $_POST['uname'] = addslashes($_POST['uname']);
                            }
                            $check = $CConn->query("SELECT * FROM Person WHERE UserName = '".$_POST['uname']."'");
                       
                            if(!mysql_num_rows($check)){
                           
                                $flag= false;
                               
                            }
                            while($info = mysql_fetch_row($check)){
                                $info['0'] = stripslashes($info['0']);
                                $info['1'] = stripslashes($info['1']);
                                $info['2'] = stripslashes($info['2']);
                           
                            }
                            mysql_free_result($check);
                            // check passwords match
                            $_POST['passwd'] = stripslashes($_POST['passwd']);
                            $info['1'] = stripslashes($info['1']);
                           
                            $_POST['passwd'] = md5($_POST['passwd']);
                   
                            if($_POST['passwd'] != $info['1']) {
                           
                                $flag= false;
                           
                            }
                            else if($info['2']=='9'){       
                                $flag= false;
                            }
                            // if we get here username and password are correct, register session variables and set
                            $_POST['uname'] = stripslashes($_POST['uname']);
                            $_SESSION['Id'] = $info['0'];
                            $_SESSION['UserName'] = $_POST['uname'];
                            $_SESSION['Password'] = $_POST['passwd'];
                            $_SESSION['Level'] = $info['2'];
                        if($info['2']=='0'){
                            echo'<p>Vent et øjeblik, skal rette username and password</p>';
                            //bla bla
                           
                        }
                        else if($info['2']=='1' ||$info['2']=='2'){                           
                            echo'<h1>Logged in</h1>';
                            echo'<p>Welcome back '.$_SESSION['username'].', you are logged in.</p>';
                            //redirect user to right place
                }
                }//END OF IF($flag==true)
                }//END OF IF($_POST['submit'])
       
                $CConn->close();
                if(!isset($_GET['generate']) || !isset($_POST['Submit']) || !isset($flag)==true){
                ?>
                <form name="form1" id="form1" method="POST" action="<?php $_SERVER['PHP_SELF']?>">
                  <table align="center" width="200" border="1" cellpadding="10">
                <th colspan=2 align=left>Login</th>
                            <tr>
                  <td width="70">Username</td>
                  <td width="76"><input name="uname" type="text" size="30" maxlength="20" /></td>
                </tr>
                <tr>
                  <td>Password</td>
                  <td><input name="passwd" type="password" size="30" maxlength="20" /></td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td align="center"><input type="submit" name="Submit" value="Submit"  style='width: 80px ' /></td>
                </tr>
          </table>
          </form>
                <p>&nbsp;</p>
                <p><a href="logon.php?generate">Generere password</a></p>
                <p>&nbsp;</p>
                <p>Brug eksisterende brugernavn & password</p>

                <?php
                }
                ?>
Avatar billede erikjacobsen Ekspert
11. december 2004 - 19:17 #17
Men det er koden uden alt det der med file-upload. Det er vel den kode vi skal have til at virke, og den jeg gerne vil se. Hvis du da vil have hjælp til det?
Avatar billede meo Nybegynder
11. december 2004 - 19:23 #18
Den til filupload virker nu. Men kun i IE. Hvis du har lyst! så kan vi gøre det i stedet for eller efter dette problem.
Avatar billede erikjacobsen Ekspert
11. december 2004 - 19:48 #19
Det vil altså sige, at den ikke virker. Det er verdens dårligste undskyldning, at
noget virker i IE. Men hvis du er tilfreds med det, skal da ikke blande mig ;)
Avatar billede meo Nybegynder
11. december 2004 - 20:01 #20
form-side
<form method="POST" action="upload.php" name="Doc_Upload" enctype="multipart/form-data">
<TEXTAREA NAME="txtDescription" ROWS="10" COLS="53"></TEXTAREA></p>
        <!-- MAX_FILE_SIZE must precede the file input field -->
        <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        <!-- Name of input element determines name in $_FILES array -->

        <p>Upload dokumentet til databasen: <input  type="file" name="binFile" />
        <input type="submit" value="Upload dokumentet" /></p>
    </form>



upload side

include 'ConnectDB.php';
if(isset($_FILES["binFile"]))   
{     
//jeg har hentet brugerens id                                                                                   
    $CConn  = new ConnectDB;
    $txtDescription=$_POST['txtDescription'];   
    $binFile_name=$_FILES["binFile"]["name"];
    $binFile=$_FILES["binFile"]["tmp_name"];
    $binFile_size=$_FILES["binFile"]["size"];
    $binFile_type=$_FILES["binFile"]["type"];
    echo "<br>diverse= ".$binFile_name.$binFile.$binFile_size.$binFile_type;
               
  $data = addslashes(fread(fopen($binFile, "r"), filesize($binFile)));
  $strDescription = addslashes(nl2br($txtDescription));
  $sql = "INSERT INTO Doc_Version ";
  $sql .= "(PersonId, Change_DS, File_Name, File_Body, File_Size, File_Type, Doc_Date) ";
  $sql .= "VALUES (".$_SESSION['UserID'].",'".$strDescription."', ";
  $sql .= "'".$binFile_name."','".$data."', '".$binFile_size."', '".$binFile_type."','".date('Y-m-d')."')";
  echo'<br>sql-query : '.$sql.'<br>';
  $result = $CConn->query($sql) or die(mysql_error());
    $CConn->close();
}
Avatar billede erikjacobsen Ekspert
11. december 2004 - 20:07 #21
Og hvad er det der ikke virker - dvs. hvad skal vi kigge efter?
Avatar billede meo Nybegynder
11. december 2004 - 20:16 #22
når jeg oupload et word-doc kan jeg med :
echo "<br>diverse= ".$binFile_name.$binFile.$binFile_size.$binFile_type;
se at den outputtet er forkert:
diverse= word.doc0
Warning: fread(): supplied argument is not a valid stream resource in /.automount/idefix.itu.dk/root/export/home2/phong/public_html/add_doc.php on line 160

samt det andet echo, når den skal sætte det ind i database, er inputtet forkert:
sql-query : INSERT INTO Doc_Version (PersonId, Change_DS, File_Name, File_Body, File_Size, File_Type, Doc_Date) VALUES ('9', '2',1,'upload igen', 'Word.doc','', '0', '','2004-12-11')

jeg får ikke data,størrelsen og typen med ned i databasen.
Avatar billede erikjacobsen Ekspert
11. december 2004 - 20:22 #23
Og det er ikke fordi dit word-dokument er over 30k ?
Avatar billede meo Nybegynder
11. december 2004 - 20:30 #24
Du har fuldstændig ret!! Tak,
Kan du hjælpe mig med login?
Avatar billede erikjacobsen Ekspert
11. december 2004 - 22:59 #25
Login? Måske. Men du kan også oprette et nyt spørgsmål, så andre kan være med ;)
Jeg skal ikke have point, jeg samler ikke på dem. Svar selv, accepter eget svar.

Det med at de 30kB opfører sig forskelligt mellem browsere er fordi nogle browsere
respekterer din: <input type="hidden" name="MAX_FILE_SIZE" value="30000" />, og
andre ikke gør.
Avatar billede meo Nybegynder
12. december 2004 - 15:33 #26
okay!!
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