Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Übergebene Variablen sind leer





Frage

Hallo, ich biete auf meiner Website www.qwertz182.de ein paar MP3s zum Downlodd an, und jetzt wollte ich mit PHP die Klicks auf einen Download zählen lassen. Jedoch wenn ich die URL zu den Downloads übergebe, ist die Variable URL trotzdem leer. Die Datenbank ist richtig angelegt. Was mache ich falsch? Hier der Code (Die Infos wie User etc hab ich geändert): [code] <?php $DBHost = "localhost"; $DBUser = "user"; $DBPassword = "password"; $DB = "database"; $TblDownloadCounter = "Downloads"; $EMail = "email"; if(@fopen($URL, "r")) { $DBPointer = @mysql_connect($DBHost, $DBUser, $DBPassword); @mysql_select_db($DB, $DBPointer); $LastAccess = date("Y-m-d H:i:s"); $ResultPointer = @mysql_query("SELECT Hits FROM $TblDownloadCounter WHERE URL=´$URL´", $DBPointer); if(@mysql_num_rows($ResultPointer) > 0) { @mysql_query("UPDATE $TblDownloadCounter SET Hits=Hits+1, LastAccess=´$LastAccess´ WHERE URL=´$URL´", $DBPointer); } else { @mysql_query("INSERT INTO $TblDownloadCounter (URL, Hits, LastAccess) VALUES (´$URL´, ´1´, ´$LastAccess´)", $DBPointer); } header("Location: $URL"); } else { @mail($EMail, "Defekter Download", "Der folgende Download ist defekt:\n$URL\nauf dieser Seite: ".$_SERVER[´HTTP_REFERER´], "FROM: $EMail"); echo "Der Download konnte nicht gefunden werden. Der Webmaster wurde darüber benachrichtigt!"; } ?> [/code] Meine Downloads liegen auf meinem Webspace im Ordner audio/ Aufrufen tue ich das ganze so: [code] <a href="http://www.qwertz182.de/download.php?URL=http://www.qwertz182.de/audio/lied.mp3">downloaden</a>[/code]

Antwort 1 von rabies

find´ das Script an sich schon was wirr... (ich seh den Grund für fopen nicht so ganz...)

Du solltest evtl. mal $_GET["URL"] anstatt $URL verwenden. - Ich gehe davon aus, dass register_globals auf off steht.

--rabies.

Antwort 2 von daneil

Mein Code sieht jetzt so aus:

<?php

$DBHost = "localhost";
$DBUser = "user";
$DBPassword = "password";
$DB = "database";
$TblDownloadCounter = "Downloads";
$EMail = "email";

if(isset($_GET["URL"]))
{
$DBPointer = @mysql_connect($DBHost, $DBUser, $DBPassword);
@mysql_select_db($DB, $DBPointer);
$LastAccess = date("Y-m-d H:i:s");
$ResultPointer = @mysql_query("SELECT Hits FROM $TblDownloadCounter WHERE URL=´$URL´", $DBPointer);

if(@mysql_num_rows($ResultPointer) > 0)
{
@mysql_query("UPDATE $TblDownloadCounter SET Hits=Hits+1, LastAccess=´$LastAccess´ WHERE URL=´$URL´", $DBPointer);
}
else
{
@mysql_query("INSERT INTO $TblDownloadCounter (URL, Hits, LastAccess) VALUES (´$URL´, ´1´, ´$LastAccess´)", $DBPointer);
}

header("Location: $URL");
}
else
{
@mail($EMail, "Defekter Download", "Der folgende Download ist defekt:\n$URL\nauf dieser Seite: ".$_SERVER[´HTTP_REFERER´], "FROM: $EMail");
echo "Der Download konnte nicht gefunden werden. Der Webmaster wurde darüber benachrichtigt!";
}

?>


Jetzt geht er scheinbar nicht mehr in den Else-Zweig, aber ich kriege auch nur eine leere Seite angezeigt! Und nun?

Antwort 3 von daneil

ah ich habs jetzt hingekriegt...aber jetzt gibts das problem, dass er es gleich im browser abspielt...wie kann ich das nun wieder beheben? wenn ich da per rechtsklick auf den link gehe, bietet er mir die php-datei als download an....

Antwort 4 von Nessus

Zitat:
wie kann ich das nun wieder beheben? wenn ich da per rechtsklick auf den link gehe, bietet er mir die php-datei als download an....


Hat die Datei überhaupt noch die Endung .php?
Fängt sie auch mit <?php an?

Nessus

Antwort 5 von daneil

Ja, die Datei heißt download.php.

Und der Inhalt beginnt mit <?php und endet mit ?>

Antwort 6 von daneil

Also ich hab meinen Fehler gefunden: bei mir wird das nur gleich abgespielt, weil ich es so im Browser eingestellt habe...also klappt der Download doch so wie ich möchte.

Aber noch eine andere Frage: ist das ein Sicherheitsrisiko, wenn ich quasi den Pfad wie oben beschrieben als Parameter mitgebe? da gabs doch so hackertricks die das ausnutzen können?

Antwort 7 von Nhuya

Da meine übergebenen Varaiblen auch leer sind, dachte ich, ich poste hier mal rein. Vielleicht könnt ihr mir ja helfen, die Lösung fehlte hier ja leider :)

Also folgendes:

Es sollen mir Details zu einem Datensatz angezeigt werden. Der PK ist ist das Datum (hier: $tdatum). Wenn ich mit der Maus auf den Link gehe, zeigt er mir unten auch den Inhalt von $tdatum an, aber klicke ich drauf, kommt nix raus, da die Variablem leer sind.
Hier der Code:

Der Link:

<a href=´detail.php?anz_tdatum=$tdatum´ target=details ONCLICK=window.open(´´,´details´,´scrollbars=yes,width=650,height=600´)><br><br><b>mehr...</b></a>

Der Inhat:

$abfrage="SELECT anz_tdatum,anz_var1,anz_var2,anz_var3 FROM tabelle WHERE anz_tdatum=´$tdatum´ ORDER BY anz_tdatum DESC";
$ergebnis=mysql_query($abfrage);

while(list($tdatum,$var1,$var2,$var3)=mysql_fetch_row($ergebnis)) {
if ($tdatum){
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $tdatum, $dat);
}
echo "<table width=100%>";
echo "<td colspan=2 align=center ><b><font>$tdatum $var2</td></tr>/table>";

Was mache ich falsch?

Antwort 8 von Nhuya

Witzig, oder auch nicht, aber vielleicht hilfreich ist, dass das hier funktioniert:

$abfrage="SELECT DISTINCT anz_tdatum,anz_beschreibung,anz_email,anz_text FROM termin ORDER BY anz_tdatum DESC";
$ergebnis=mysql_query($abfrage);

while(list($tdatum,$beschreibung,$email,$text)=mysql_fetch_row($ergebnis)) {
if ($tdatum){
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $tdatum, $dat);
}

Hier wird mir alles aufgegebn, was ich möchte, also alles. Die einzige Änderung zu oben ist, dass ich hier nicht nur den einen Datensatz mit dem richtigen Datum haben möchte :(

Antwort 9 von Nhuya

Ok, also ich habe mittlerweile herausgefunden, dass es daran liegt:

abfrage="SELECT anz_tdatum,anz_var1,anz_var2,anz_var3 FROM tabelle WHERE anz_tdatum=´$tdatum´ ORDER BY anz_tdatum DESC";

Genauer gesagt, ist wohl $tdatum in der WHERE-Abfrage schon leer. Wie kommt das bzw. was muss ich anders machen?

Antwort 10 von rabies

ehrm... anz_tdatum? an den Link angehangen. Guck mal genau hin $tdatum ist nach Deinem Script der WERT von anz_tdatum.

richtig wäre eher so: <a href="detail.php?tdatum=wert"> usw.

--rabies.

Antwort 11 von Nhuya

Also anz_tdatum ist das Feld in der Tabelle, in welcher dann der Wert $tdatum drin steht.

Was sollte ich denn in deinem Beispiel für "wert" eintragen?

Antwort 12 von rabies

Was würde sich denn anbieten? Evtl. das Datum, dass in die Datenbank soll? ...

Antwort 13 von Nhuya

Das ist eine Abfrage, keine Eingabe ^^

Das Datum, dass angezeigt werden soll, ist ja $tdatum.
Natürlich kann ich in der Ausgabe auch Where anz_tdatum=01.01.06 reinschreiben, das funktioniert. Aber ich will ja nicht nur einen Datensatz, sondern immer den Datensatz, der zu einem bestimmten aber von mir nicht festgelegten Datensatz gehört.

Beispiel:

Datensatz1: 01.01.06, Text, Beschreibung, Mailadresse
Datensatz2: 02.01.06, Text, Beschreibung, Mailadresse
Datensatz3: 03.01.06,Text, Beschreibung, Mailadresse

So, "DatensatzXY" ist jeweils der Link. Wenn ich da drauf klicke, z.B. auf Datensatz2, dann möchte ich alle Daten aus der Datenbank, die zum Datum 02.01.06 gehören.
Klicke ich auf Datensatz3, dann möchte ich dich Daten zum Datum 03.01.06 haben. Also kann ich ja wohl schlecht ein festes Datum einprogrammieren.

Antwort 14 von rabies

Äh... verwirrend - aber wenn Du dann die Datensätze dazu willst, musst Du ja trotzdem <a href="blabla.php?tdatum=02.01.06"> schreiben...

Antwort 15 von Nhuya

Also rabies, die Frage ist nicht böse gemeint, aber kann es sein, dass du noch weniger Ahnung davon hast als ich?

Nehmen wir an, ich verlinke die Seite so wie du vorgeschlagen hast:

Zitat:
<a href="blabla.php?tdatum=02.01.06">


Sollte dabei überhaupt etwas rauskommen, dann bekomme ich doch bei jedem Datensatz, bei dem ich die Beschreibung sehen will, IMMER die Beschreibung zum Datensatz vom 02.01.06.
Zudem ist $tdatum in diesem Link bereits das richtige Datum, das Problem ist blos die Übergabe zur Abfrage und abgefragt werden soll ja nicht $tdatum, sondern der Inhalt von anz_tdatum mit dem Wert $tdatum.

Also es wäre wirklich super, wnen mir jemand sagen kann, wo der Fehler liegt...

Antwort 16 von rabies

Ich denke schon, dass ich davon ein wenig Ahnung habe.

Ich glaube eher, dass das Problem beim Zusammensetzen Deines ganzen Scripts liegt.

Zitat:
Datensatz1: 01.01.06, Text, Beschreibung, Mailadresse
Datensatz2: 02.01.06, Text, Beschreibung, Mailadresse
Datensatz3: 03.01.06,Text, Beschreibung, Mailadresse


Fassen wir das noch einmal auf... Das holst Du doch sicher auch aus einer Datenbank, oder ist das hartkodiert im Quelltext? Wenn ja: Falsche Herangehensweise. - Haste Pech und musst jeden Link von Hand zusammensetzen. ... Wenn nicht - dann Bastel doch den Link einfach zusammen, wenn Du die "Datenübersicht" aus der Datenbank holst...

Nehmen wir also erst einmal ein bisschen Code, der die Übersicht zusammenbastelt:


$sql = "SELECT anz_tdatum, anz_beschreibung, anz_text, anz_mailadresse FROM tabelle ORDER BY anz_tdatum DESC";

$i=0;
while($row = mysql_fetch_assoc(mysql_query($sql))) 
{
   echo "<a href=\"detail.php?tdatum=".$row["anz_tdatum"]."\">Datensatz ".$i.": ".$row["anz_tdatum"]. "</a>, ".$row["anz_beschreibung"].", ".$row["anz_text"].", ".$row["anz_mailadresse"]."<br/>\n";
}


Und dann kommen wir mal zu der Detail.php:


$sql = "SELECT * FROM tabelle WHERE anz_tdatum = ".$_GET["tdatum"];

while($row = mysql_fetch_assoc(mysql_query($sql)))
{
   echo "<h1>Details zum Datensatz vom ".$row["anz_tdatum"]."</h1>\n";
   foreach($row as $key => $value) {
      echo $key." => ".$value."\n<br/>";
   }
   echo "<br/>\n\n";
}


Der Code ist weder komplett, noch in irgendeiner Weise getestet.

Probier halt rum... Und warum Deine Variable leer war, wenn Du detail.php aufgerufen hast -> Steht weiter oben. Sicher das Problem mit register_globals - und $_GET hast Du ja wahrscheinlich nicht verwendet.

--rabies.

Antwort 17 von rabies

Wat vergessen...

Nicht so:
$sql = "SELECT anz_tdatum, anz_beschreibung, anz_text, anz_mailadresse FROM tabelle ORDER BY anz_tdatum DESC";

$i=0;
while($row = mysql_fetch_assoc(mysql_query($sql)))
{
echo "<a href=\"detail.php?tdatum=".$row["anz_tdatum"]."\">Datensatz ".$i.": ".$row["anz_tdatum"]. "</a>, ".$row["anz_beschreibung"].", ".$row["anz_text"].", ".$row["anz_mailadresse"]."<br/>\n";
} 


Sondern so:
$sql = "SELECT anz_tdatum, anz_beschreibung, anz_text, anz_mailadresse FROM tabelle ORDER BY anz_tdatum DESC";

$i=0;
while($row = mysql_fetch_assoc(mysql_query($sql)))
{
echo "<a href=\"detail.php?tdatum=".$row["anz_tdatum"]."\">Datensatz ".$i.": ".$row["anz_tdatum"]. "</a>, ".$row["anz_beschreibung"].", ".$row["anz_text"].", ".$row["anz_mailadresse"]."<br/>\n";
$i++;
}

--rabies...


Nun aber ab ins Bett.

Antwort 18 von Nhuya

Hi Rabies,

habs heute Nacht noch selbst herausgefunden :) Wie kommts bloß, dass die globalen Variablen abgeschaltet sind? Wäre übrigens schön gewesen, wenn du das gleich gesagt hättest :)

Habe in meine detail.php nun dies eingefügt:

$tdatum=$_GET[´anz_tdatum´];
Und siehe da, es funktioniert. An dem restlichen Code war nichts falsch :)

Und natürlich bin ich nicht so blöd, das hartzukodieren ;) Die Beispiele waren die Schreibweisenbeispiele für die Links ;)

Trotzdem vielen Dank fürs Bemühen.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: