Problem mit IE: Link als Button vs Text

DEYS

Neuling
Thread Starter
Mitglied seit
11.05.2004
Beiträge
646
Ort
Berlin
Ich würde gern einen Link zu einem Download in Form eines Buttons darstellen.
Nur wenn ich diesen Button anklicke, funktioniert der Download im Internet Explorer nicht mehr.
Als Textlink klappts wunderbar.
Mit Firefox und Opera funktioniert der Button auch.

Hab IE 6.

Der URL hat zwar Leerzeichen drin, aber vorher hat's auch damit geklappt.

Ich bin ziemlich ratlos.

Kann ich das vielleicht mit einem JavaScript Event-Handler umgehen?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
weis zwar nicht ob das funktioniert aber wenn du per javascript ein neues fenster öffnest mit dem link auf die datei könnte es eigtl funktionieren ...
 
Ich denke mal du musst es entweder so machen:
Code:
<input type="button" value="download" name="download" onClick="javascript:top.location.href='../WidmannStandard.psd'">
oder aber du sendest ein Formular ab, und sendest anschließend den Header der Downloaddatei, durch die mit dem Formular übergebenen Infos. Dazu brauchst du aber z.B. PHP
 
Mir ist heute was eingefallen. :fresse:
onClick="javascript:window.location..."
Ein neues Fenster möchte ich ungern öffnen, der Download soll direkt vom Sende-Fenster aus gestartet werden.
Aus dem Grund würde ich auch ungern mit dem Header arbeiten wollen, da ich für den auch ein neues Fenster öffnen müsste (so wie ich das sehe).
Ich werde erst mal window.location ausprobieren und dann mit top.location.
Aber ist das nicht das gleiche?
Kenne JS kaum.

Aber danke schonmal für eure Antworten, mindestens eine Lösung wird auf jeden Fall klappen. :bigok:


edit:
Ok, ich hab das Problem gelöst.
Meine Lösung ist, die vorhin schon angesprochen window.location-Möglichkeit.
Da ich das mit PHP erzeugt habe, gab es zwar noch einige Probleme mit Anführungszeichen, aber das hab ich dann auch gelöst bekommen. :)
Danke für euere Hilfe!
 
Zuletzt bearbeitet:
Ok, ich hab nochwas, dafür wollte ich keinen neuen Thread aufmachen:

Wenn ich ein SQL-Query sende, wie kann ich während der Ausgabe der Datensätze prüfen, ob ich am Ende der Tabelle angelangt bin bzw. den letzten Datensatz lese?

Konkret sieht das Skript bisher so aus:

PHP:
$sql = "SELECT * FROM projekte ORDER BY id ASC";

$res = mysql_query("$sql");

while($data = mysql_fetch_array($res))
{
Blablabla Code
}
Innerhalb des Codes befindet sich aber eine Zeile, die beim letzten Datensatz nicht mehr ausgegeben werden soll.
Womit kann ich das erreichen?


edit:
Hat sich nun ein wenig geändert, da ich in der Ausgabe ein Limit eingestellt habe.
Die Frage heißt nun: Wie kann ich prüfen, ob der aktuelle Datensatz der letzte auszugebende ist?
 
Zuletzt bearbeitet:
PHP:
function get_views($sql)
{
	$res = mysql_query($sql) or die ("SQL Abfrage Fehler!");
	$rows =  array();
	while($row = mysql_fetch_object($res))
	{
		$rows[] = $row;
	}
	return $rows;
}
$views_Herst = get_views("SELECT Hersteller, count(Artikelname) as anz FROM artikel GROUP BY Hersteller ORDER BY Hersteller");
for($i = 0;$i < count($views_Herst); $i++){
	echo $views_Herst[$i]->Hersteller, " (", $views_Herst[$i]->anz, ")";
}
So löse ich das immer... einfach die Abfrage per function in ein Array mit Objekten zuweisen.
dann kannst das die länge des array mit "count()" bestimmen,
und mit der "for Schleife" perfekt durchlaufen, auch noch mit innerhalb der Schleife mit "if" oder "if not" Ausgaben verhindern.
gruß wario
 
Hab heut noch jemanden gefragt und es ist wiedermal einfacher als ich dachte: :fresse:
PHP:
$sql = "SELECT * FROM projekte ORDER BY id ASC LIMIT 5"; 

$res = mysql_query("$sql"); 
$i = 0;
while($data = mysql_fetch_array($res)) 
{ 
$i += 1;
Blablabla Code 
if($i=5)
 { und so weiter und sofort }
}
Also einfach noch eine Zählvariable einfügen.
Aber danke auch dir für deine Antwort.


Aber ich hab nochwas. ^^
Ich würde Besuchern, die etwas vom Server downloaden gern die Dateien über das FTP übertragen, nicht wie bisher über das HTTP.
Einfach FTP in den URL eingeben, kann ich ja nicht, weil der Server 'nen Login verlangt.
Gibt es da trotzdem ein Möglichkeit, den Download per FTP zu realisieren?

Weiter oben hatte ich noch das Problem, den Download auf einen Button zu legen.
Das habe ich bereits mit
PHP:
onClick="javascript:window.location.href='<?php echo $data['download-url'];?>'"
gelöst.
Kann ich auf irgendeine Weise im gleichen Atmezug die Anzahl der bisher gelaufenen Downloads erhöhen?
Ich dachte dabei an folgendes:
PHP:
onClick="javascript:window.location.href='<?php $data['anz_dls']+=1; echo $data['download-url'];?>'"
Aber das hat nicht funktioniert.
Hat jemand eine Idee, wie ich das lösen könnte?
 
Nein das kannst du so nicht machen:
PHP:
onClick="javascript:window.location.href='<?php $data['anz_dls']+=1; echo $data['download-url'];?>'"
Du hast anscheinend Grundlegende Verständnisprobleme mit PHP/JAVA Script.
PHP ist Serverseitig, verarbeitet befehle und generiert fertige Ausgaben die an den Client gesendet werden.
Javascript (dhtml) ist Clientseitig, und ändert dynamisch das erscheinungsbild am Client/Browser.

Wenn ich dich jetzt richtig verstehe, dann holst du aus der Datenbank eine Downloaddatei ($data['download-url']) und dazu den zugehörigen counter ($data['anz_dls']) wie oft die Datei heruntergeladen wurde.

Selbstverständlich musst du anschließend ja die Datenbank updaten und das "anz_dls" der entsprechenden "download-url" dort hochzählen. Und Nicht bei der ausgabe des Links!
Dies kannst du ja nur machen wenn du erneut diese Daten zum Server sendest. Deshalb empfielt es sich ja auch wie Oben schonmal geschrieben, per downloadlink die Downloaddateiinformationen per Get an den Server zu senden, um anschließend, mit diesen informationen, die Datenbank updaten und die Downloaddateien per Header zu senden!!

PHP:
<?php
include("db_connection.php");
if(isset($filename)){
	function download_file($filename){
		if( ! is_file($filename) || $filename[0] == '.' || $filename[0] == '/' ){
			echo $filename." : File not available!";
		}else{
			header("Pragma: public");
			header("Expires: 0");
			header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
			header("Content-Type: application/force-download");
			header("Content-Type: application/octet-stream");
			header("Content-Type: application/download");
			header("Content-Disposition: attachment; filename=".basename($filename).";");
			header("Content-Transfer-Encoding: binary");
			header("Content-Length: ".filesize($filename));
			readfile("$filename");
		}
	}
	download_file("downloads/".basename($filename));
	$upd_download = "INSERT INTO download (download-url, ipadr, download-time) VALUES ('{$filename}','".$GLOBALS['REMOTE_ADDR']."',now())";
	$download_res = mysql_query($upd_download) or die ("UPDATE_DOWNLOAD_FEHLGESCHLAGEN");
	exit;
}else{
	$sql = "SELECT download-url, count(id) as anz_dls FROM download GROUP BY download-url"
    $res = mysql_query($sql) or die ("SQL Abfrage Fehler!");
    $rows = array(); 
    while($row = mysql_fetch_object($res)) 
    { 
        $rows[] = $row;
    }
	for($x = 0; $x < count($rows); $x++)
	{
		echo "<input type='button' value='".$rows['download-url']."' onClick=\"javascript:window.location.href='".$_PHP_SELF."?filename=".$rows['download-url']."'\">";
		echo "<br />";
	}
}
?>
Ich habs jetzt nicht auf Fehler getest, diehnt nur aus Grundidee.
gruß wario
 
Zuletzt bearbeitet:
wario schrieb:
Selbstverständlich musst du anschließend ja die Datenbank updaten und das "anz_dls" der entsprechenden "download-url" dort hochzählen. Und Nicht bei der ausgabe des Links!
Arg, stimmt! :fresse:
Warum ist mir das nicht selbst aufgefallen!

Der Header scheint ja noch eine sehr umfangreiche Angelegenheit zu sein.
Hast du da einen Link, in welchem seine Funktionen genauer beschrieben sind, damit ich mich darüber informieren kann?

So wie ich das sehe, wird bei dem Skript als erstes geprüft, ob eine Downloadparamater übergeben wird.
Wenn ja, wird der Download gestartet (application/force-download?) und wenn nicht, wird der Button mit dem entsprechenden Verweis dargestellt.
Ist das soweit richtig?
Wenn nicht, guck ich mir das morgen nochmal genauer an.
 
Zuletzt bearbeitet:
so sorry, aber jetzt nach fünf Bier (ja in Bayern, je 0,5l) fällt mir inzwischen das Denken auch etwas schwerer...
Der Header ist ganz klar ein Kapitel für sich, was man mal (für sich selbst) abarbeiten sollte ;o)
Ansonsten mach der Header nichts anderes als dem Browser genau zu sagen, um welche "Datei" es sich handelt! Normalerweise, wenn du eine z.B. MS Office Datei wie Word, Excell oder Powerpoint im Browser öffnest, startet Windows NUR eine Office-Browser erweiterung, um diese Datei selbstständig im Word- oder Excell-Browser Modus zu starten. Dies merkst du indem der Browser nicht Selbstständig das Programm, mit dem die entsprechende Dateiendung verknüpft ist, öffnet, sondern nachfragt, ob er die Datei im entsprechenden Programm geöffnet werden soll, oder etwa gespeichert werden soll.

KLAR wird bei dem Script als erstes überprüft ob ein "Downloadparamater übergeben wird". UND WENN NICHT, handelt es sich um einen "default" Aufruf des Scripts, und das Script stellt NUR die download buttons/links bereit. Wenn jedoch beim "default" Aufruf ein downloadlink geklickt wird, übergibt das Script den "Downloadparamater" (an sich selbst) und sendet per Header die Datei-Informationen, sodas du ein popup Fenster mit den optionen "öffnen", "speichern" und "abbrechen" siehst, und gleichzeitig die Datenbank den potenziellen Download speichert.

Selbstverständlich musst du als Sicherheitsgründen noch diverse Abfragen, z.B. nach dem Pfad der Dateien einbauen, dass nur Dateien aus bestimmten Verzeichnissen downloadbar sind. Nicht das einer "download.php?filename=..\includes\db_connect.php" eingibt, und somit dein Connection File mit de, Datenbank passwort downloaded...

so long, and thanks for all the fish/shoes... wario xD
 
Aha, und dass da jemand etwas beliebiges eingibt verhinderst du mit dieser Abfrage, oder?
PHP:
if( ! is_file($filename) || $filename[0] == '.' || $filename[0] == '/' )

Na gut, mal sehen, was ich über den Header in Erfahrung bringen kann...
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh