Zur Navigation

PHP-Upload [5]

41 lava

Na, aber es geht mir doch gerade darum, wie ich dieses Array mit den Filenamen dann überhaupt erstellen kann !?
Kann ich das dann -clientseitig- mit Javascript?

13.01.2007 22:06 | geändert: 13.01.2007 22:14

42 Rudy

Du kannst mit Javascript keine Dateien von der Festplatte des Nutzers ermitteln und Du kannst File-Inputs einer Seite nicht mittels Skript vorbefüllen. Was sollte es also bringen, einen Array mit Dateinamen clientseitig zu erstellen? Der Nutzer muss immer selbst entscheiden, was er hochlädt - und zwar Datei für Datei, nicht ein ganzes Verzeichnis. Das geht nur mit FTP, dort übernehmen die FTP-Clients das Erstellen der Verzeichnisstruktur.

13.01.2007 22:55 | geändert: 13.01.2007 22:57

43 lava

Naja, wie am Beginn dieses Threads beschrieben, soll ja gerade der Sinn von diesem Upload-Script für mich sein, FTP zu ersetzen !!!

13.01.2007 23:06

44 lava

Na gut, aber soweit bin ich ja noch gar nicht. Ich bin dabei, Marcels Tip umzusetzen, meinetwegen auch erstmal nur für ein File. Ich hab jetzt eine Datei holmitschutz.php wie folgt geschrieben:

<?PHP session_start(); ?>
<head><title></title></head>
<body>
<?PHP
if (empty($_REQUEST["a"]))
echo ("Hallo, loggen Sie sich ein";)
else (echo "Scheiße, das war falsch. Nochmal versuchen?";};
include (security.php);
?>
</body></html>

wobei security.php die Password-Abfrage regeln soll und im Erfolgsfall zu einer dritten Datei holedatei.php weiterleiten soll.

In security.php steht derzeit daher im Head

<html><head><title></title></head>
<script language="javascript">

function neuerversuch()
{window.location.href = holmitschutz.php?a=1 ;}

function erfolgreich()
{window.location.href= holedatei.php ; }

</script>

und im Body-Tag steht das Formular für die Paßword-Abfrage.
Jetzt hänge ich an mehreren Stellen:

a) ist mir gerade nicht mehr klar, wie ich ggf. bei falscher Eingabe wieder zurück zu holmitschutz.php?a=1 komme aus der <?PHP ?> Auswertung heraus. Mir fiel nur die o.g. Javascript-Lösung ein, aber scheinbar ist die Syntax nicht richtig ?Ich will neuerversuch() aufrufen, aber wie mache ich das ohne Eventhandler ???
b) ist mir nicht klar, ob die in holmitschutz.php begonnene Session nun automatisch (auch in security.php und holedatei.php) weiterbesteht, also ob Session-Variablen jetzt global gelten. Ich würde nämlich jetzt in den Body-Bereich von security.php gern reinschreiben:

<?PHP
$_SESSION["eingeloggt"]=0;
if ($_REQUEST["usereingabe"] == XXX &&
$_REQUEST["passwordeingabe"] == YYY) {$_SESSION["eingeloggt"] =1 ; echo "javascript:erfolgreich()"; };
elseif (!empty($_REQUEST["usereingabe"])) {echo "javascript:neuerversuch()";}
?>

Aber dummerweise funktioniert der Aufruf der Javascript-Dateien irgendwie nicht richtig (d.h. das echo gibt mir derzeit wirklich dann javascript:neuerversuch() auf dem Bildschirm aus :(
und außerdem bin ich eben wegen der Session-Zuordnungen nicht sicher..... ? Kann dann holedatei noch erkennen, ob $_SESSION["eingeloggt"] in security auf 1 gesetzt wurde oder nicht?




13.01.2007 23:37 | geändert: 13.01.2007 23:52

45 Rudy

Muss die Umleitung denn per Javascript ablaufen? Du kannst auch
header("Location: http://domain.de/holmitschutz.php?a=1"); die();
verwenden, allerdings nur bevor jegliche Ausgabe an den Browser erfolgt ist oder mit angeschalteter Ausgabepufferung (ob_start() vor oder gleich nach session_start()).

Wenn Du im Body eine Javascript-Funktion durch Ausgabe mit PHP aufrufen willst, musst Du das als <script> kennzeichnen, also
<?PHP
$_SESSION["eingeloggt"]=0;
if ($_REQUEST["usereingabe"] == XXX && $_REQUEST["passwordeingabe"] == YYY) {
  $_SESSION["eingeloggt"] =1 ; 
?>
<script type="text/javascript">
  erfolgreich();
</script>
<?php
 } elseif (!empty($_REQUEST["usereingabe"])) {
?>
<script type="text/javascript">
  neuerversuch();
</script>
<?php
  }
?>
Ich würde der Header-Variante aber den Vorzug geben, der gesamte Code wird dadurch kürzer, die Funktionalität ist nicht von Javascript abhängig und der User erfährt durch Lesen des Codes nicht, was Dein Script im Erfolgs/Fehlerfall vorhat (bewahrt Script-Kiddies vor dummen Gedanken).

14.01.2007 00:04 | geändert: 14.01.2007 00:12

46 lava

Nun, header wär schon wieder etwas ganz neues, was ich nicht kenne. Die Javascript-Funktion wäre mir deshalb lieber, denn das ist die Methode, wie ich auch aus normalem HTML auf eine neue Seite wechseln würde. Aber ich hab das jetzt so implementiert, wie du es mir geschrieben hast, und es funktioniert nicht: Es wird jedesmal wieder holmitschutz.php in der Ursprungsversion geladen. Dürfen vielleicht die Javascript-Funktionen neuerversuch() und erfolgreich() dann nicht im <head> definiert sein, ist ja irgendwie auch doppeltgemoppelt wenn in derselben Seite mehrmals der script-Tag steht? Oder hab ich im window.location.href= noch einen Syntaxfehler?

P.S. Und wenn ich es mit dem Header probiere wie von dir vorgeschlagen (was macht eigentlich das die() ?) , dann krieg ich die Warnung: Cannot modify header information in security.php - header already sent by output startet at holmitschutz.php

14.01.2007 01:19 | geändert: 14.01.2007 01:51

47 Rudy

und es funktioniert nicht
etwas [code] wäre hilfreich bei der Fehlersuche... Das Javascript sollte unerheblich sein, was die serverseitig ausgelösten Redirects anbelangt, die haben Vorrang.

14.01.2007 01:45 | geändert: 14.01.2007 01:46

48 lava

Also, hier der Code von security.php :


<html>
<head> <title>Paßword-Login</title></head>

<script language="javascript" type="text/javascript">

function neuerversuch()
{alert("no");
window.location.href = holmitschutz.php?a=1;}

function erfolgreich()
{alert("yes");
window.location.href = holedatei.php ; }

</script>

<body>
<?PHP
if ($_REQUEST["usereingabe"] == XXX && $_REQUEST["passwordeingabe"]== YYY) {$_SESSION["eingeloggt"]=1; $_SESSION["sessionuser"] = $_REQUEST["usereingabe"]; $_SESSION["sessionpassword"] = $_REQUEST["passwordeingabe"] ;
?><script language="javascript" type="text/javascript"> erfolgreich(); </script><?PHP
}
elseif (! empty($_REQUEST["usereingabe"]))
{?><script language="javascript" type="text/javascript"> neuerversuch();</script><?PHP
} ?>

<form
action="<?PHP print $_SERVER['PHP_SELF'] ?>"
method="post" enctype="multipart/form-data">
Welcher User? <input type="text" name="usereingabe"><br>
Welches Pa&szlig;word? <input type="text" name="passwordeingabe"><br>
<input type="submit" value="Hochladen"></form>

</body></html>


und hier der Code von holmitschutz.php :

<?PHP session_start(); ?>
<head><title> Datei-Upload-Script mit Schutzfunktion </title></head>
<body>
<?PHP
if ( empty($_REQUEST["a"]) ) {echo "Hallo, loggen Sie sich ein";} else {echo "Schei&szlig;e, das war falsch. Nochmal versuchen?";};
include("security.php");
?>
</body></html>

14.01.2007 02:14

49 Rudy

Ich meinte eigentlich den Code mit den header-Redirects... aber nun gut. Du kannst das auch ohne redirects lösen, weil der code ja relativ kurz ist (die Upload-Geschichte fehlt noch, aber es sollte klar sein, wo die rein kommt)
<?PHP 
  session_start(); 
	$logintry = false;
	if ($_POST['logout']) {
	  $_SESSION["eingeloggt"] = $_SESSION["sessionuser"] = $_SESSION["sessionpassword"] = NULL;
	} elseif ($_POST['login']) {
	  $logintry = true;
	  if ($_POST["usereingabe"] == "hallo" && $_POST["passwordeingabe"]== "hallo") {
		  $_SESSION["eingeloggt"]=1; 
	    $_SESSION["sessionuser"] = $_POST["usereingabe"]; 
	    $_SESSION["sessionpassword"] = $_POST["passwordeingabe"];
		}
	}
	$loggedin = isset($_SESSION["eingeloggt"]) && ($_SESSION["eingeloggt"] == 1);
	
	if ($loggedin) {
	  if ($_POST["upload"]) {
		  //upload-logik
		}
	}
?>
<html>
<head>
  <title>Datei-Upload-Script mit Schutzfunktion </title>
</head>
<body>
<?PHP
if (!$loggedin && !$logintry) {
  echo "Hallo, loggen Sie sich ein";
} elseif ($logintry && !$loggedin) {
  echo "Schei&szlig;e, das war falsch. Nochmal versuchen?";
}
if (!$loggedin) { 
?>
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">
Welcher User? <input type="text" name="usereingabe"><br>
Welches Password? <input type="text" name="passwordeingabe"><br>
<input type="submit" name="login" value="Login">
</form>
<?php
} else {
?>
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
Datei? <input type="file" name="datei">
<input type="submit" name="upload" value="Hochladen">
</form>
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">
<input type="submit" name="logout" value="Logout">
</form>
<?php
}
?>
</body>
</html>

14.01.2007 02:54

50 lava

Okay, du hast das also jetzt gelöst, indem du gar keine separaten Dateien gemacht hast. Danke erstmal. Ausprobieren tu ich das erst morgen, hab den Rechner mit dem lokalen Server schon runtergefahren (Code posten ist ein bißchen schwierig, weil ich nur auf dem Linux-Rechner XAMPP habe und nur auf dem Windows-Rechner Internetzugang). Klingt aber alles logisch und denk mal, daß es dann funktioniert. Was ich jetzt aber falsch gemacht hab mit Javascript und Header (was ist eigentlich ein redirect? einfach das Neuaufrufen einer Seiten), weiß ich immer noch nicht... Ich poste dir morgen nochmal den Header-Code hierhin. Danke jedenfalls erstmal ganz heftig! Lava

P.S. Braucht man bei deinem Code-Vorschlag denn überhaupt eine Session ???

14.01.2007 03:10 | geändert: 14.01.2007 03:18