PHP Variable mit URL übergeben

chris47803

Cadet 4th Year
Registriert
Apr. 2007
Beiträge
64
Hallo!

Im folgenden Script wird die Variable link_id leider nicht gefüllt.

Was mache ich falsch?

PS: Im PHPKIT lief das Script.

PHP:
<table border="1" width="100%">

<th><span style="color:white"><b><center>Werbepartner</b></center></span></th>

<table border="1" width="100%">
 
<th><span style="color:white"><b>Link</b></span></th>
<th><span style="color:white"><b>Art</b></span></th>
<th><span style="color:white"><b>Beschreibung</b></span></th>
<th><span style="color:white"><b>Klicks</b></span></th>

<?php
// Die Datenbankinformationen werden eingelesen
include('db-abfrage.php');
// Der Name der Datenbanktabelle
$table    = "werbepartner";    
// Datendefinition für die Clientausgabe
$start = (isset($_GET['start'])) ? abs((int)$_GET['start']) : 0;
$limit = 20;                     // Datensätze pro Ausgabeseite
// Feststellen der Anzahl der verfügbaren Datensätze.
$result = @mysql_query("SELECT COUNT(link) FROM ".$table);
$total    = @mysql_result($result,0);
// Ggf. $start korrigieren (falls Parameter in
// der URL manipuliert wurde)
$start    = ($start >= $total) ? $total - $limit : $start;
// Datenbankabfrage ausführen.
$query    = "SELECT id , link, linkname, art, beschreibung, klicks FROM ".$table 
            ." order by klicks desc LIMIT ".intval($start).",".intval($limit);
$resultID = @mysql_query($query);
// Ergebnisse lesen und an den Client ausgeben
while ($data = mysql_fetch_array($resultID))

{
echo '
  <tr class="feld">
    <td width="25%" bgcolor="#FFFACD" valign="top"><center><span style="color:black"><a href=http://www.personalbit.de/werbepartner/update_klick.php?link_id='.$data['id'].' target=_blank>'.$data['linkname'].'</a></span></center></td>   
    <td width="23%" bgcolor="#F0E68C" valign="top"><center><span style="color:black">'.$data['art'].'</span></center></td>
    <td width="45%" bgcolor="#FFFACD" valign="top"><center><span style="color:black">'.$data['beschreibung'].'</span></center></td>
	<td width="7%"  bgcolor="#F0E68C" valign="top"><center><span style="color:black">'.$data['klicks'].'</span></center></td>
  </tr>';  
}
?>
</table>
 
Zuletzt bearbeitet von einem Moderator: ([code] zu [php])
Hallo chris47803,

Bekommst du nur die ID nicht oder bekommst du von dem SQL Statement gar keine Daten.
Und am besten wenn du am entwicklen bist keine @-Zeichen vor einer Funktion verwenden. Dann siehts du direkt wenn irgendwo ein Fehler Auftritt.

MFG

tewes
 
Hallo!

Die Ausgabe funktioniert, aber in der update_klick.php steht mir die Variable $link_id nicht zur Verfügung, die Variable wird also nicht gefüllt.

Chris
 
Steht denn die ID im Link?

und schreib mal in die while - Schleife
PHP:
echo "<pre>";
print_r($data);
echo "</pre>";
Wenn dort ID nicht gesetzt ist, ist deine SQL abfrage falsch.

MFG

tewes
 
Hallo!

Die ID ist gesetzt und erscheint ja auch im Link.

Code:
Array
(
    [0] => 1
    [id] => 1
    [1] => http://formel1.personalbit.de
    [link] => http://formel1.personalbit.de
    [2] => Formel 1
    [linkname] => Formel 1
    [3] => Sport
    [art] => Sport
    [4] => Test
    [beschreibung] => Test
    [5] => 0
    [klicks] => 0
)
 
Mhh das ist echt Komisch.
Dann Poste mal dein Quellcode aus der Datei wo die Abgefragt wird.
 
Hallo!

Ich denke nicht, das es an der anderen Datei liegt.

Dort gebe ich als erstes diese Variable mit echo aus (als Test) und es steht nichts drin.

Aber bitte, hier ist der Code..............

PHP:
<?php

echo "Link-ID: $link_id<br><br>";


// Die Datenbankinformationen werden eingelesen
include('db-abfrage.php');
             // Einstellen der Sekunden nach dem der Benutzer weitergeleitet werden soll
             $dauer = 5;
             // Einstellen des Textes, den der Benutzer zu sehen bekommt
             $anzeigetext = '<center>
<img src="/images/site/logo.gif"><br><br>
<img src="/images/site/weiterleitung.gif">
<H2>Für den Inhalt der verlinkten Seiten sind ausschließlich
deren Betreiber verantwortlich.</H2> 

<br>
Wenn du nicht warten m&ouml;chtest oder dein Browser keine Weiterleitung unterst&uuml;zt <a class="heads" href=".$link."> klicke bitte hier.</a>

</center>';
// Wenn klick_id nicht leer ist
if($link_id != '' )
{                
             // Der Link wird ausgelesen
              $verb_link = mysql_connect ("$dbhost", $dbuser, $dbpass);
              mysql_select_db ($db_name, $verb_link);
              $sql_link = "SELECT link from werbepartner WHERE id='".$link_id."'";
              $abf_link =mysql_db_query($db_name, $sql_link, $verb_link);
              $result_link = mysql_query( $sql_link ) or die( mysql_error() );
              $link  = mysql_result( $result_link, 0 );
              mysql_close($verb_link);
            
             // Ausgabe
             echo ($anzeigetext);
             // Der Klick wird um 1 hochgezählt
             $verb_upd_klick = mysql_connect ("$dbhost", $dbuser, $dbpass);
               mysql_select_db ($db_name, $verb_upd_klick);
              $sql_upd_klick = "update werbepartner set klicks=klicks+1
                                  where id='".$link_id."'";
             $antwort_upd_klick = mysql_query ($sql_upd_klick, $verb_upd_klick);
             mysql_close($verb_upd_klick);
            
             // Der Benutzer wird weitergeleitet
             echo('<meta http-equiv="refresh" content="'.$dauer.'; URL='.$link.'">');
}
else echo "Fehlschlag";
echo "<br><br>Link_ID: $link_id";
?>
 
Zuletzt bearbeitet von einem Moderator: ([code] zu [php])
evtl. mal in der phpinfo() schauen, ob register_globals vllt auf off gestellt ist
dann $_GET['link_id'] verwenden...
 
Du bist der Held.

Dein erster Beitrag und schon die richtige Antwort.

Echt Bombe.

Vielen Dank, Chris:schluck:
 
Nachtrag.

Ich habe nun in diesem Verzeichnis eine .htaccess mit folgendem Inhalt

Code:
php_value register_globals 1

Mein Script läuft nun, aber wie sicher ist das?

Betrifft das nur dieses Verzeichnis, oder bekomme ich dann Ärger mit meinem Hoster, weil ich das per .htacces geändert habe?

Wenn ja, wie baue ich diesen Get-Befehl ein?

Danke, Chris
 
Hallo Chris47803,

regsiter_globals sollte ausgeschaltet beleiben da es ein riesen Sicherheistloch ist. Nachzulesen bei php.net

Die Get-Vaiable ist ein Globales Array, der alle in der URL Übergebenen Parameter enthält. Es gibt noch weiter wie POST, Files, SERVER etc...die erkennt man an dem Tiefstrich und Großgeschrieben Namen.

MFG

tewes

//Edit: Kleiner Tipp. Benutze keine mysql_fetc_array. Das ist langsamer als mysql_fetch_assoc.
 
Das es unsicher ist, dachte ich mir schon, aber ich weiß nicht, wie ich den Get-Befehll in mein Script einbaue.

Chris
 
$_GET ist ein superglobales assoziatives Array was vom Apache automatisch erstellt wird. Du kannst auf die Elemente wie bei jedem anderen Array über den Index zugreifen.
Wenn du zb den Link domain.de/index.php?id=5&Seite=xyz hast, kannst du $_GET['id'] schreiben und du bekommst den Wert 5.

Hoffe das hilft dir, ansonsten einfach fragen.

MFG

tewes
 
Hallo!

Ich habe mein Script nun angepasst und die Variable mit $_GET übergeben.
Nun klappt es auch mit dem Nachbarn. :D

Vielen Dank, Chris
 
AW: Neues Problem mit anderem Script

Hallo!

Folgendes Script gibt nach einer Suche die Daten aus der DB aus.
Code:
<?php
include "kopf.php";
echo '<br>';
//Formular

echo " <form name=formular method=post action='".$_SERVER['index.php']."'> ";
echo " <input class='formular' type='radio' name='spalte' value='titel' checked> Titel";
echo " <input class='formular' type='radio' name='spalte' value='laufzeit'> Laufzeit";
echo " <input class='formular' type='radio' name='spalte' value='genre'> Genre";
echo " <input class='formular' type='radio' name='spalte' value='darsteller'> Darsteller";
echo " <input class='formular' type='text' name='suche' maxlenght='255' size='20' value='".$_POST['suche']."'> ";
echo " <input class='formular' type='submit' name='Submit' value='Suchen'> ";

echo '<br>';
echo '<br>';

echo '
<table border="1" cellspacing="0" cellpadding="0" width="100%">


<tr>
<th width="25%" class="heads" bgcolor="#FFFF99"><p><span style="color:black">Titel</span></th>
<th width="25%" class="heads" bgcolor="#FFFF99"><p><span style="color:black">Darsteller</span></th>
<th width="10%" class="heads" bgcolor="#FFFF99"><p><span style="color:black">Laufzeit</span></th>
<th width="10%" class="heads" bgcolor="#FFFF99"><p><span style="color:black">Genre</span></th>
<th width="10%" class="heads" bgcolor="#FFFF99"><p><span style="color:black">FSK</span></th>
<th width="20%" class="heads" bgcolor="#FFFF99"><p><span style="color:black">Verliehen</span></th>
</tr>';



//Datei für die Datenbank-Verbindung
include("db-abfrage.php");

//Datenbank-Abfrage aus dem Formular
$erg = $_POST["spalte"];                  
switch($erg ){  
case "titel":                              
$daten = mysql_query("SELECT * FROM filme WHERE titel LIKE '%$_POST[suche]%'") or die(mysql_error());
break;
case "laufzeit":
$daten = mysql_query("SELECT * FROM filme WHERE laufzeit LIKE '%$_POST[suche]%'") or die(mysql_error());  
break;
case "genre":
$daten = mysql_query("SELECT * FROM filme WHERE genre LIKE '%$_POST[suche]%'") or die(mysql_error());  
break;
case "darsteller":
$daten = mysql_query("SELECT * FROM filme WHERE darsteller LIKE '%$_POST[suche]%'") or die(mysql_error());  
break;
default:
$daten = mysql_query("SELECT * FROM filme WHERE titel='".$_POST["suche"]."'") or die(mysql_error());  
}  


if(mysql_num_rows($daten) > 0) {
while($row = mysql_fetch_array($daten)) 


//Ausgabe der gefunden Daten aus der Datenbank

  {

echo '

<table border="1" cellspacing="0" cellpadding="0" width="100%">

 
 
  
  <tr class="feld">   
    <td width="25%" valign="top"><center><span style="color:black"><a href="einzeltitel.php?id='.$row['id'].'">'.$row['titel'].'</a></span></center></td>
    <td width="25%" valign="top"><center><span style="color:black">'.$row['darsteller'].'</span></center></td>   
    <td width="10%" valign="top"><center><span style="color:black">'.$row['laufzeit'].'</span></center></td>   
    <td width="10%" valign="top"><center><span style="color:black">'.$row['genre'].'</span></center></td>    
    <td width="10%" valign="top"><center><span style="color:black">'.$row['fsk'].'</span></center></td>   
    <td width="20%" valign="top"><center><span style="color:black">'.$row['datum'].'</span></center></td>   
  </tr>';  
} 
 

  
//Ausgabe, falls Nichts gefunden wurde
//Link zur Gesamt-Liste

} else 
{
echo "<br>";
echo "<br>";
echo "Datensatz nicht gefunden.";
echo "<br>";
echo "<br>";

}

echo "</table>";
?>

Das funktioniert auch.
Beim "Titel" wird ein Link erzeugt, der die "ID" an die "einzeltitel.php" weitergeben soll.
Dort möchte ich weitere Informationen zu diesen einen Film ausgeben.
Leider bekomme ich dort keine Variable übermittelt.

Hier ist die "einzeltitel.php"
Code:
<?
echo "ID: $id"; 
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>



<?



echo '
<table border="1" cellspacing="0" cellpadding="0" width="100%">

<tr>   
<td width="40%" valign="top"><center><span style="color:black">Titel'.$id.'</span></center></td>   
<td width="40%" valign="top"><center><span style="color:black">Darsteller'.$row['darsteller'].'</span></center></td>   
<td width="20%" valign="top"><center><span style="color:black">Genre'.$row['genre'].'</span></center></td>    
</tr>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td width="50%" valign="top"><center><span style="color:black">Inhalt'.$row['inhalt'].'</span></center></td>   

<td width="50%" valign="top"><center><span style="color:black">Cover'.$row['cover'].'</span></center></td> 
</tr>
';  
?>
</table>
 
wenn register_globals über eine htaccess-datei aktiviert wird, betrifft dies nur das verzeichnis, wo die datei drin ist.

der hoster sollte keine probleme deswegen machen, schliesslich gibt es möglichkeiten, die aktivierung über htaccess zu blockieren.

zu der sache mit dem riesigen sicherheitsloch muss ich nur sagen, dass das ganz auf das script draufankommt. wenn man sauber programmiert, ist es überhaupt kein sicherheitsloch.
 
Zurück
Oben