bestanden koppelen aan gebruiker

Status
Niet open voor verdere reacties.

ciske de rat

Verenigingslid
Lid geworden
10 jun 2003
Berichten
964
beste lezer

ik ben bezig met een inlog script
dit werkt goed
nu heb ik pagina laten generenen naar profile.php?username=$1

nu wil ik diverse keren bestanden bij zetten die ook alleen echt voor de gebruiker alleen zichtbaar zijn

bijvoorbeeld
ik heb een gebruiker 123456 log in op zijn profielpagina
e moeten bestanden op komen die alleen voor hem geselecteer zijn zulleen in hooft zaak
om word of pdf doc''s gaan

aan gezien lede bestand gaat groeien verwacht ik binnen 6 maanden op de 1000 lede te zitten
iemand een idee om dit te doen

en het uploaden daar van die documenten naar desbetrefde gebruiker

zat zelf te denken aan de documeten voor die gebruiker te noemen naar zijn naam voorbeeld
123456jan2013 123456febr2013 elke maad komt er een bestand bij
iemand ideen
 
Draait het via een database?

Dan zou ik hier een tabel voor aanmaken waarin staat welk bestand voor welke gebruiker op welke datum is geüploadet.

Datum als DATE, DATETIME of TIMESTAMP opslaan, koppeling met je gebruikerstabel op basis van de primary key (Meestal de id) en het pad naar het bestand opslaan.
 
wil je dat een beetje toe naderen ik weet nu al wel dat nu op moment om 250 gebruikers gaat peerjaar zulleen zij 80 pdfje ontvangen dus bij elkaar een dikke 20000 bestanden per jaar dit loopt alleen verder op ivm nieuwe klanten
ik heb is de data base database naam ler
met de rows id userame paswoordt first naam email email code ative pas recovery type allow email en profiel

is dan ook niet makkelijk om een upload pagina te maken waar ik kan uit kiezen de gebruiker
bestand kiezen uplaoden en waar naar toe uploaden hooftmap klanten en dan ieder een eigen map
 
Laatst bewerkt door een moderator:
Je kunt het ook wel via het bestandssysteem doen, maakt het wel wat ingewikkelder want dan moet je zorgen dat er een mapje aangemaakt wordt wanneer er een gebruiker aangemaakt wordt.

Doe je dat niet dan zou je bij elke upload moeten controleren of het mapje bestaat zodat je er naar kunt schrijven.

Het opvragen van de bestanden zal dan gewoon een for(each)-lus zijn binnen die bepaalde directory.
Je kunt dan op basis van de bestandsnaam sorteren, of je controleert van elk bestand de aanmaak-datum.

Doe je het via de database dan maakt het niet uit hoe je het bestand wegschrijft, de info bestaat in de database.
Alle bestanden schrijf je naar één map weg en de locatie daarvan sla je op in de database.
 
in middels heb volgende voor elkaar

selceter username doet heet
de datum doet het
uplaoden naar map doet het

wat doet het niet
wat ik wil dat de bestand naam + extentsie in row ['bestand'] kome te staan
om nou weer een extra <input type text toe te voegen is geen optie


PHP:
<form action="insert.php" method="post" id="upload" enctype="multipart/form-data">
	
		<ul>
			<li>
				Gebruikersnaam*:<br>
				<?php
	$result = mysql_query("SELECT user_id, username  FROM users");
	
	echo '<select name="username">';
	
	while ($row = mysql_fetch_assoc($result)) {
		echo "<option value='".$row['username']."'>".$row['username']."</option>";
	}
	echo "</select>";
?>
			</li>
			<li>
				datum*:<br>
				<input type="date" name="datum">
			</li>
			<li>
			<label class="field" for="bestand">Bestand:</label>
                <input type="file" name="bestand" id="bestand" />
			</li>

			<li>
				<input type="submit" value="registreren">
			</li>
		</ul>
	</form>

de insert.php
PHP:
<?php
$connectie = mysqli_connect("localhost","xxxx","xxxx","lr");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Er is een fout opgetreden bij een verbinding met de database: " . mysqli_connect_error();
  }

$sql="INSERT INTO bestanden (username, datum,bestand)
VALUES
(

 '$_POST[username]',
 '$_POST[datum]',
 '$_POST[bestand]'

 )
 
 ";

if (!mysqli_query($connectie,$sql))
  {
  die('Error: ' . mysqli_error($connectie));
  }
	echo "<div id = 'message'>";
		echo "De klant is succesvol toegevoegd";
	echo "</div>";
mysqli_close($connectie);
?>
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

/********************************************************
* CONFIG Variabelen:                                    *
*                                                        *
* ARRAY $allowed: array met alle toegestane extensies   *
* STRING $dir: locatie waar bestanden geuplaod worden   *
* INT $maxsize: maximum bestandsgrootte in bytes        *
********************************************************/

$allowed = array('jpg', 'jpeg', 'gif', 'doc','pdf'); 
$dir = 'uploads/';
$maxsize = 15728640; 

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(is_uploaded_file($_FILES['bestand']['tmp_name']))
    {
        $pathinfo = pathinfo($_FILES['bestand']['name']);
        if(in_array($pathinfo['extension'], $allowed))
        {
            // De bestandsnaam van het uiteindelijke bestand
            // Natuurlijk naar eigen wens aan te passen.
            $file = $_FILES['bestand']['name'];
            
            if($_FILES['bestand']['size'] < $maxsize)
            {
                if(move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$file))
                {
                    $content[] = '<p>Het bestand: '.$file.' is succesvol geupload.</p>';
                    $content[] = '<p>De locatie van het bestand is: '.$dir.$file;
                }
                else
                {
                    $errors[] = '<p>Er is iets fout gegaan tijdens het uploaden</p>';
                }
            }
            else
            {
                if($maxsize == 0)
                {
                    $errors[] = '<p>Het uploaden van bestanden is uitgeschakeld</p>';
                }
                else
                {
                    $errors[] = '<p>Het bestand is te groot.</p>';
                }
            }
        }
        else
        {
            $errors[] = '<p>Deze extensie is niet toegestaan!</p>';
        }
    }
    else
    {
        $errors[] = '<p>Er is geen bestand opgegeven</p>';
    }
}
?>
        <?php
        // Weergeven van meldingen uit het phpscript.
        if(isset($errors))
        {
            echo '<ul>';
            foreach($errors as $error);
            {
                echo '<li>'.$error.'</li>';
            }
            echo '</ul>';
        }
        elseif(isset($content))
        {
            foreach($content as $line)
            {
                echo $line;
            }
        }
        ?>
iemand een oplossing voor
 
Als je besgtande upload mag je *NOOIT* de originele bestandsnaam gebruiken als bestandsnaam op je server. Gewoon helemaal nooit, ook niet na zogenaamde "sanitize()" slagen. Waarom: hackers zijn slimmer dan jij en weten hoe ze de bestandsnaam zo kunnen manipuleren dat jij hun bestand over jouw index.php heen schrijft.

Een bekende en bewezen manier om met veel bestanden om te gaan is om uiteraard de bestandsinformatie in een database op te slaan, daar ga je niet aan ontkomen, en het ID dat het invoeren van een record in de database oplevert te gebruiken als de bestandsnaam, want die genereer je zelf en die is dus veilig.
Het is niet mogelijk om alle bestanden allemaal in dezelfde map te zetten, dat trekt je filesysteem botweg niet, maar daar kun je eenvoudig omheen werken door submappen te maken op basis van het ID van het bestand. Bestand nummer 14536572 staat dan b.v. in map 14/53/65/72. Zo heb je per map maximaal 100 submappen (00-99) en in de diepste map staan maximaal 100 bestanden.
 
het zegt mijn niks vincent dit voor erst dat ik het doei
ik weet wel dat allss ik klaar ben alles encrypte op website plaats
en dit gedeelte is alleen bestemd voor de admin alleen uploaded files zijn voro klanten bestemd
 
ik heb een script liggen wat auto matische bestanden een code voor zeg zit loopt vanaf (111111,999999) of dit de juiste manier is weet ik ook niet
moet i n iedeergeval in data base komen ivm dat makkelijk op vraagbaar is
vele script al zitten bekijken en zal al bij enetje dat function was dat er een bestand zodra hij gepost is bij de klant informatie komt dat factuur online staat staat
ik moet script nog verder optimaliseren ivm nu kunen ere nog jpg files en andere digen gepost worden dit moet allemaal uit en moet enkeld pdf zijn
 
het zegt mijn niks vincent dit voor erst dat ik het doei

Het is toch simpel :-) Als i een bestand naar jouw server upload met de naam "../index.php" en jij gaat dat bestand in de map "public_html/donwloads/" wegschrijven, dan wordt de hele naam dus "public_html/downloads/../index.php" Oftewe: "public_html/index.php" en poef, je website is gehackt.



ik weet wel dat allss ik klaar ben alles encrypte op website plaats

en dit gedeelte is alleen bestemd voor de admin alleen uploaded files zijn voro klanten bestemd

Dat maakt niet uit, admins maken ook fouten en hackers kunnen ook bij admin accounts komen.

ik moet script nog verder optimaliseren ivm nu kunen ere nog jpg files en andere digen gepost worden dit moet allemaal uit en moet enkeld pdf zijn

Dat zag ik in je andere topic ook, end at kun je niet afdwingen door naar de extentie te kijken want ik kan een .exe bestand eenvoudig hernoemen naar .pdf en dan heb je een probleem.

Over het omgaan met uploads zijn honderden tutorials geschreven, het is echt belangrijk dat je er een aantal van leest want het kan erg gevaarlijk zijn.
 
in geval zal de administrator alleen kunnen uploaden ik zal nog eens over hebben of hij dit echt wil hij kan beter eerst alles uploaden en daarna in database voeren wel zo veiliger
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan