Hoi daar opnieuw,

Ik moet voor school met een groepswerk een project maken. Daarvoor heb ik een klein siteje gemaakt waar we onze files kunnen uploaden etc.

Ik beveilig ze met cookies. Ik weet ondertussen ook dat dat niet echt veilig is, maar het is nog altijd mijn eerste inlogsysteempje.
Ik had Jan K. zijn tutorial over sessions zien staan en heb dat proberen toe te passen op die site. Alles werkte, totdat ik op de upload pagina zelf kwam.

Ik post even de code hieronder. Kan iemand me eevn zeggen waar het fout gaat?

MET COOKIES

<html>
<head>
<title>File Management</title>
<link href="includes/stylesheet.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="content">


<?
include ('includes/config.php');
if((isset($_COOKIE['ProjectUsername'])) && ($_COOKIE['ProjectRank'] >= 2)){
echo '<table width="100%" height="100%" cellpadding="5" cellspacing="0">';
echo '<tr>';
echo '<td width="70%" height="100%" valign="top">';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
global $_FILES;

$filename = $_FILES['userfile']['name'];

$allow[0] = "jpg";
$allow[1] = "gif";
$allow[2] = "bmp";
$allow[3] = "doc";
$allow[4] = "txt";
$allow[5] = "xls";
$allow[6] = "wmv";
$allow[7] = "avi";
$allow[8] = "rar";

if ($_POST["newname"])
    $uploadname = $_POST['newname'];
else
    $uploadname = $_FILES['userfile']['name'];

$extentie = substr($uploadname, -3);

for ($i = 0; $i < count($allow); $i++)
{
    if ($extentie == $allow[$i])
    {
        $extentie_check = "ok";
        $i = count($allow) + 5; // om loop te beindigen
    }
}

if ($extentie_check)
{
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        move_uploaded_file($_FILES['userfile']['tmp_name'], "files/" . $uploadname);

        echo "Het bestand is geupload onder de naam: $uploadname";
        echo '<br>De map van bestanden is <a href="files"><b><u>hier</u></b></a> te vinden.';
        $datum = date("Y-m-d");
        mysql_query("INSERT INTO projectbestanden (id, uploadname, datum) VALUES ('', '$uploadname', '$datum')") or die(mysql_error());
    }
}
else
{
    echo "Error: De extentie van het bestand is niet toegelaten!";
}
}else{
  echo '
   <p>Je kunt de <b>naam om up te loaden leeg laten</b>. <br>
   Dan wordt de naam zoals het bestand om het moment zelf heet.</p><br>
   De toegelaten extenties zijn: jpg, gif, bmp, doc, txt, xls, wmv, avi.<br>
   <form enctype="multipart/form-data" action="uploads.php" method="post">
   <p>
   <input type="hidden" name="MAX_FILE_SIZE" value="51200" />
   Selecteer een bestand: <input name="userfile" type="file"><br />
   Naam om up te loaden: <input name="newname" type="text"><br />
   <input type="submit" value="Upload" />
   </p>
   </form>
   <br><br>';
  echo '</div>';
}
echo '</td>';
echo '<td width="30%" height="100%" valign="top">';
echo '<div id="divtasks">';
include ('tasks.php');
echo '</div>';
echo '<div id="divlinks">';
include ('links.php');
echo '</div>';
echo '</td>';
echo '</tr>';
echo '</table>';
}else{
  echo '<div id="contentout" align="center"><br><br><br><br><br><br><br><br>';
  echo 'ACCESS DENIED!<br>';
  echo '<a href="login.php">Please Login!</a><br><br>';
  echo 'Authentication Required!<br><img src="images/print.png" border="0">';
  echo '</div>';
}
?>

</body>
</div>
</body>
</html>



MET SESSIES

<?
require ('includes/auth.php');
?>
<html>
<head>
<title>File Management</title>
<link href="includes/stylesheet.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="content">


<?
echo '<table width="100%" height="100%" cellpadding="5" cellspacing="0">';
echo '<tr>';
echo '<td width="70%" height="100%" valign="top">';
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
global $_FILES;

$filename = $_FILES['userfile']['name'];

$allow[0] = "jpg";
$allow[1] = "gif";
$allow[2] = "bmp";
$allow[3] = "doc";
$allow[4] = "txt";
$allow[5] = "xls";
$allow[6] = "wmv";
$allow[7] = "avi";
$allow[8] = "rar";

if ($_POST["newname"])
    $uploadname = $_POST['newname'];
else
    $uploadname = $_FILES['userfile']['name'];

$extentie = substr($uploadname, -3);

for ($i = 0; $i < count($allow); $i++)
{
    if ($extentie == $allow[$i])
    {
        $extentie_check = "ok";
        $i = count($allow) + 5; // om loop te beindigen
    }
}

if ($extentie_check)
{
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        move_uploaded_file($_FILES['userfile']['tmp_name'], "files/" . $uploadname);

        echo "Het bestand is geupload onder de naam: $uploadname";
        echo '<br>De map van bestanden is <a href="files"><b><u>hier</u></b></a> te vinden.';
        $datum = date("Y-m-d");
        mysql_query("INSERT INTO projectbestanden (id, uploadname, datum) VALUES ('', '$uploadname', '$datum')") or die(mysql_error());
    }
}
else
{
    echo "Error: De extentie van het bestand is niet toegelaten!";
}
}else{
  echo '
   <p>Je kunt de <b>naam om up te loaden leeg laten</b>. <br>
   Dan wordt de naam zoals het bestand om het moment zelf heet.</p><br>
   De toegelaten extenties zijn: jpg, gif, bmp, doc, txt, xls, wmv, avi.<br>
   <form enctype="multipart/form-data" action="uploads.php" method="post">
   <p>
   <input type="hidden" name="MAX_FILE_SIZE" value="51200" />
   Selecteer een bestand: <input name="userfile" type="file"><br />
   Naam om up te loaden: <input name="newname" type="text"><br />
   <input type="submit" value="Upload" />
   </p>
   </form>
   <br><br>';
  echo '</div>';
}
echo '</td>';
echo '<td width="30%" height="100%" valign="top">';
echo '<div id="divtasks">';
include ('tasks.php');
echo '</div>';
echo '<div id="divlinks">';
include ('links.php');
echo '</div>';
echo '</td>';
echo '</tr>';
echo '</table>';
?>

</body>
</div>
</body>
</html>


Mvg Jens
Wat gaat er eigenlijk precies fout?
Bij het COOKIES-systeem werkt alles OK.
Bij het SESSIES-systeem wordt de te uploaden file niet geupload, en bij gevolg wordt ook de naam niet in de database gezet.

Jens
Zit het hele session-verhaal in require ('includes/auth.php');
Post die dan ook even.
De auth.php

<?php
session_start ();

// de gegevens voor de DB connectie
require 'config.php';

// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
sleep (1);
header ('Location: HIER STAAT DE LINK NORMAAL GEZIEN ;)'); // NIET VERGETEN AAN TE PASSEN!!!
}

function check_login ($username, $password) {
// query opstellen
// je tabel kan er heel simpel uitzien:
// id INT(11) auto_increment
// username VARCHAR 64
// password VARCHAR 64. Het password sla je op in je DB met een SHA1 hash
// daarom staat SHA1 dus ook in de query
$sql = "
SELECT id
FROM projectmembers
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}

// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>
Ziet er naar mijn idee netjes uit.
Zet wel voor de zekerheid een exit() na regel 10.
cva, maar dan is dat upload probleem niet weg eh. Dat was eerst het "primaire" doel van de site...
Je hebt daar niet echt iets aan verandert toch? Alleen die cookie regels verwijdert.
Jep, en beneden op de pagina waar hij het uigelogde gedeelte weergeeft bij de cookies
Dan zie ik het ook even niet.
Kom je wel op die pagina, dus langs de require ('includes/auth.php');
Hee, wat een mooie stijl van programmeren heb je daar, in auth.php!

Doe eens dit bovenaan je uploadpagina:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo '<pre>';
print_r ($_FILES);
echo '</pre>';
}
?>
Wat zie je dan, na een uploadpoging?

Reageren