Avatar billede mazey Praktikant
11. februar 2006 - 01:59 Der er 13 kommentarer og
1 løsning

Spørgsmål om hvordan man søger på forskellige tegn

Hej Eksperter

Det er muligt at dette er et lidt dumt spørgsmål, men jeg forsøger alligevel! :D

Jeg har en side hvor man kan uploade filer og det virker fint.
Jeg har i den fil lavet det sådan at man kun kan uploade pdf og doc filer (vha. substr()) og det er altsammen som det skal være.

Men nu ligger problemet i at hvis man uploader et dokument som indeholder f.eks. et "&" tegn, så kan man ikke åbne det bagefter... Så jeg er på udkig efter hvordan man kan lave en søgning efter et sådant tegn.
Det jeg har indtil videre ser således ud:

$filnavnet = $_FILES['userfile']['name'];
$rest = substr("$filnavnet", -3);

if(($rest == "pdf") || ($rest == "doc") ){

Jeg ville så prøve med noget strrpos() men det har ikke virket...
nogen der lige kan hjælpe?
Avatar billede mazey Praktikant
11. februar 2006 - 02:02 #1
...og for den sags skyld skal det også bruges til at finde æ ø og å, da dette tilsyneladende heller ikke kan åbnes...
Avatar billede Six Nybegynder
11. februar 2006 - 02:18 #2
Løsningen på æøå problemet er at du renamer din fil når du uploader den.


Du kan eventuelt bruge denne funktion:
function char_replace($tekst)
{
$str = "$tekst";
$erstat['å'] = "aa";
$erstat['Å'] = "AA";
$erstat['ø'] = "oe";
$erstat['Ø'] = "OE";
$erstat['Ä'] = "Ae";
$erstat['ä'] = "ae";
$erstat['æ'] = "ae";
$erstat['Æ'] = "AE";

foreach($erstat as $key=>$value)
  {
  $str = str_replace($key,$value,$str);
    }
return $str;
}
Avatar billede Six Nybegynder
11. februar 2006 - 02:19 #3
Så går jeg ud fra du kan tilføje

$erstat['&'] = "og";
Avatar billede mazey Praktikant
11. februar 2006 - 02:24 #4
Hmmm... ja det kan da være det er rigtigt det du skriver... Nu har jeg jo bare en lidt stor fil der så skal ændres hvad angår kopieringen af filen, og det mener jeg nu ikke lige jeg er rustet til at kunne gøre...

For at give et indblik i det (og det kan være det ser nemt ud for andre :) så er her lige noget...

$filnavnet = $_FILES['userfile']['name'];
$rest = substr("$filnavnet", -3);

if(($rest == "pdf") || ($rest == "doc") || ($rest == "xls")){
    $archive_dir="msklip_".$choose."/";
    $filename = $_FILES['userfile']['name'];
   
move_uploaded_file($_FILES['userfile']['tmp_name'], "$archive_dir/$filename");
copy("$archive_dir/$filename");

    $filesized = "msklip/".$filename."";
    $navn = $filename;
    $overs = $_POST['pichead'];
    $qwery = "ph_doks_".$choose;
    $dato = $_POST[dato];
    mysql_query("INSERT INTO $qwery (navn, refid, dato, value, what) VALUES ('$navn', '$folder', '$dato', '$overs', '2')") or die(mysql_error());
Avatar billede Six Nybegynder
11. februar 2006 - 02:34 #5
Nu har jeg jo bare en lidt stor fil der så skal ændres hvad angår kopieringen af filen, og det mener jeg nu ikke lige jeg er rustet til at kunne gøre. <- jeg forstår ikke lige hvad du mener der ;D

Men hvis du nu bruger:
$filnavnet = char_replace($_FILES['userfile']['name']);

eller:
Avatar billede Six Nybegynder
11. februar 2006 - 02:35 #6
$filnavnet = $_FILES['userfile']['name'];
$filnavnet = char_replace($filnavnet);

(kom til at trykke send, det her hører med til det andet selvfølgelig ;D
Avatar billede Six Nybegynder
11. februar 2006 - 02:40 #7
Glem hvad jeg tidligere skrev...

move_uploaded_file($_FILES['userfile']['tmp_name'], "$archive_dir/char_replace($filename)");
copy("$archive_dir/char_replace($filename)");

Vil det der ikke virke ?
Avatar billede mazey Praktikant
11. februar 2006 - 02:44 #8
Det er jo snedigt...

Har lavet det sådan:

//TEST PÅ HVILKEN EXTENSION FILEN HAR
$filnavnet = $_FILES['userfile']['name'];
$rest = substr("$filnavnet", -3);

if(($rest == "pdf") || ($rest == "doc") || ($rest == "xls")){
function char_replace($tekst)
{
$str = "$tekst";
$erstat['å'] = "aa";
$erstat['Å'] = "AA";
$erstat['ø'] = "oe";
$erstat['Ø'] = "OE";
$erstat['Ä'] = "Ae";
$erstat['ä'] = "ae";
$erstat['æ'] = "ae";
$erstat['Æ'] = "AE";

foreach($erstat as $key=>$value)
  {
  $str = str_replace($key,$value,$str);
    }
return $str;
}
    $archive_dir="msklip_".$choose."/";
    $filename = char_replace($_FILES['userfile']['name']);
    //$filename = $_FILES['userfile']['name'];
   
move_uploaded_file($_FILES['userfile']['tmp_name'], "$archive_dir/$filename");
copy("$archive_dir/$filename");

    $filesized = "msklip/".$filename."";
    $navn = $filename;
    $overs = $_POST['pichead'];
    $qwery = "ph_doks_".$choose;
    $dato = $_POST[dato];
    mysql_query("INSERT INTO $qwery (navn, refid, dato, value, what) VALUES ('$navn', '$folder', '$dato', '$overs', '2')") or die(mysql_error());
 

Og det spiller som det skal! Mesterligt!
Avatar billede Six Nybegynder
11. februar 2006 - 02:47 #9
Hehe :D - jeg ville nok foreslå dig at pille funktionen ud af din if-sætning, så kan du kalde den andre steder, hvis der engang skulle blive brug for det... :D

jeg smider lige et svar :D
Avatar billede mazey Praktikant
11. februar 2006 - 02:47 #10
Ok... det gør jeg så!
Mange tak for den kompetente hjælp og god weekend
Avatar billede Six Nybegynder
11. februar 2006 - 02:49 #11
Ingen problem, jeg takker for point. :)

Hvis det har interesse må du godt få et upload script jeg lavede engang... der bliver der også tjekke for filens størrelse.
Avatar billede mazey Praktikant
11. februar 2006 - 02:51 #12
Jamen det vil jeg da gerne, hvis jeg må! :D
Avatar billede Six Nybegynder
11. februar 2006 - 02:52 #13
Her kommer smøren ;D

----------------------------------------------------

<?
// Konfiguration
$filtyper = ".jpg$|.gif$|.txt$|.doc$|.dir$|.rar$|.zip$"; //Skal adskilles med | eksempel: $filtyper = ".jpg$|.gif$";
$konfiguration["upload_bibliotek"] = "./updir"; // Relativ sti, i forhold til denne fils placering. Eksempel: Upload.php ligger i /upload/ og filerne skal ligges i /upload/updir/ Så angives det ./updir HUSK AT MAPPEN SKAL HAVE CHMOD 777!
$konfiguration["max_stoerrelse"] = "512000"; // Filens maxstørrelse i bytes - I konfigurationsfilen til php, er standard værdien 2mb. Dvs man kan max uploade en fil på 2 mb.
$maxantalfiler = "15"; // Maks antal filer der kan uploades på én gang

//Skal ikke pilles ved!
$formlength = strlen($maxantalfiler);
$uploadantal = $_REQUEST['uploadantal'];
?>
<form action="<?$_SERVER['PHP_SELF'];?>" name="Vaelg_Antal_Filer_Der_Skal_Uploades">
    Antal Filer der skal uploades: (maks <? echo $maxantalfiler; ?>)<br>
    <input type="Text" maxlength="<? echo $formlength;?>" name="uploadantal"><br>
    <input type="submit" value="Yes sir">
</form>
<br>
<form action="<?$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name"Filer">
    <input type="hidden" name="MAX_FILE_SIZE" value="<? echo $konfiguration["max_stoerrelse"]?>">
    Der accepteres kun <? echo round($konfiguration["max_stoerrelse"]/1024, 1) ?>kb pr. fil.<br>
    Accepterede Filnavne:
    <?
    $replace_this = array(".", "$");
    $replaced = str_replace($replace_this, "", $filtyper);
    $replace_that = array("|");
    $replaced2 = str_replace($replace_that, " - ", $replaced);
    echo $replaced2;
    ?>
    <br><br>
    <?
    if (isset($uploadantal) && ($uploadantal != "0") && ($uploadantal != NULL)) {
    echo "Send filer:<br>";
    };
    ?>
    <?
    $uploadantal = $_REQUEST['uploadantal'];

    // Tjekker om der er valgt flere end 15 filer at uploade! Hvilket der ikke må være!
    if ($uploadantal > $maxantalfiler) {
        echo "Du kan ikke uploade mere end $maxantalfiler filer!";
        exit;
    };

    // Mens $count er mindre end eller lig med $uploadantal skal den skrive en filboks.
    $count = "1";
    while($count <= $uploadantal) {
        echo "<input name=\"userfile[$count]\" type=\"file\"><br>";
        $count = $count + 1;
    };
    echo "<input type=\"hidden\" name=\"uploadantal\" value=\"$uploadantal\"><br>";
    ?>
    <?
    if (isset($uploadantal) && ($uploadantal != "0") && ($uploadantal != NULL)) {
    echo "<input type=\"submit\" value=\"Send Filer\">";
    };
    ?>
</form>
<?
// Functionen vi uploader med
function upload($fra, $til) {
  move_uploaded_file($fra, $til);
};
// Funktionen der tjekker filens størrelse. Er filen for stor bliver den ikke uploadet. Og brugere, får det at vide.
function checksize($size, $maxsize, $name) {
    if($size > $maxsize) {
        echo "<b>IKKE UPLOADET!</b> - $name er for stor.
        Der accepteres kun " . round($maxsize/1024, 1) . "kb, og din fil fylder "
        . round($size/1024, 1) . "kb <br>";
        return false;
    };
    return true;
};
// Funktionen der tjekker filtypen! Hvis filtypen ikke er tilladt, uploades der ikke! og der kommer en fejlmeddelse.
function type($filtyper, $navn) {
    if (isset($navn)) {
        if(!eregi($filtyper, $navn)) {
            $ext = substr($navn, -3);
            echo "<b>IKKE UPLOADET!</b> - <b>$ext</b> filer er <b>ikke</b> accepteret!";
            echo "<br>";
            return false;
            };
        return true;
    };
};
//Funktionen der erstatter ugyldige tegn.
function char_replace($tekst)
{
$str = "$tekst";
$erstat['å'] = "aa";
$erstat['Å'] = "AA";
$erstat['ø'] = "oe";
$erstat['Ø'] = "OE";
$erstat['Ä'] = "Ae";
$erstat['ä'] = "ae";
$erstat['æ'] = "ae";
$erstat['Æ'] = "AE";
$erstat['&'] = "og";

foreach($erstat as $key=>$value)
  {
  $str = str_replace($key,$value,$str);
    }
return $str;
}

//Her sker magien!
$count = "1";
//Mens $count er mindre en, lig med $uploadantal(Requested fra formen Filer)
while($count <= $uploadantal) {
    //Sætter vi vores variabler. Disse køres igennem, for hver fil der skal uploades. Dvs. De sættes hvergang en ny fil uploades.
    $navn = $_FILES["userfile"]["name"][$count];
    $fra = $_FILES["userfile"]["tmp_name"][$count];
    $til = $konfiguration["upload_bibliotek"] . "/" . char_replace($_FILES["userfile"]["name"][$count]);
    $size = $_FILES["userfile"]["size"][$count];
    $maxsize = $konfiguration["max_stoerrelse"];
    //Vi tjekker så for om checksize() returnere true. Gør den det, skal scriptet uploade filen. Ellers bliver der returneret false, og der bliver så udskrevet til brugeren, at filen er for stor!
    echo $fra;
    echo $til;
    if (checksize($size, $maxsize, $navn) && type($filtyper, $navn)) {
        upload($fra, $til);
    //Hvis $navn er sat, Udskriver vi "Filen $navn er uploadet"
        if (isset($navn)) {
            $navn = char_replace($navn);
            echo "<b>SUCCESS!</b> - Filen $navn er uploadet";
            echo "<br>";
        };
    };
    $count = $count + 1;
};
?>

Så har du lige lidt at lege med hehe :D

Og god weekend til dig også.
Avatar billede mazey Praktikant
11. februar 2006 - 02:54 #14
Ja, det må siges... men mange tak! :D
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