Variablen aus Formfeld übernehmen und in HREF verwenden

Oh ja glaub schon! Genau das richtige für so einen Super PHP Amateur wie mich^^

Wenn du es nicht verstehst wer dann? Was fragst du mich :-)

Also die momentane index.htm ist von mir. Post die mal kurz....

Code:
<html>
<head>
</head>
<body div background="skin/background.jpg" onloadset="icon_genre1" text="#D4E7F7" link="#CCCCCC" vlink="#CCCCCC" alink="#56A0C7" class="oneColLiqCtr">
<font face= "arial"></font>
</body>
<table width="100%" align="center">
<tr>
<td height="150" align="center">
<img src="skin/logo.png" width="721" height="150">
</td>
</tr>
</table>
<table width="100%" align="center">
<tr>
<td height="405" valign="bottom" align="center">
<a href="http://localhost:8088/stream/file=/share/Apps/MusicVideoBox/form.html.php?dir=/share/Moviez/Music Vidz/Deutsch HipHop&dummy=.jsp" vod="playlist" name="icon_genre1" id="thumbimage"><img src="skin/icon_genre1.png" border="0" alt="" onfocussrc="skin/icon_genre1_on.png"/></a>
<td height="405" valign="bottom" align="center">
<a href="http://localhost:8088/stream/file=/share/Apps/MusicVideoBox/normal.php?dir=/share/Moviez/Music Vidz/Englisch HipHop&dummy=.jsp" vod="playlist" name="icon_genre2" id="thumbimage"><img src="skin/icon_genre2.png" border="0" alt="" onfocussrc="skin/icon_genre2_on.png"/></a>
<td height="405" valign="bottom" align="center">
<a href="http://localhost:8088/stream/file=/share/Apps/MusicVideoBox/normal.php?dir=/share/Moviez/Music Vidz/Rock&dummy=.jsp" vod="playlist" name="icon_genre3" id="thumbimage"><img src="skin/icon_genre3.png" border="0" alt="" onfocussrc="skin/icon_genre3_on.png"/></a>
<td height="405" valign="bottom" align="center">
<a href="http://localhost:8088/stream/file=/share/Apps/MusicVideoBox/normal.php?dir=/share/Moviez/Music Vidz/Others&dummy=.jsp" vod="playlist" name="icon_genre4" id="thumbimage"><img src="skin/icon_genre4.png" border="0" alt="" onfocussrc="skin/icon_genre4_on.png"/></a>
</td>
</tr>
</table>
<table width="100%" align="center">
<tr>
<td height="75" valign="bottom" align="left">
<td valign="bottom" align="center" >
<a href="http://localhost:8088/stream/file=/share/Apps/MusicVideoBox/normal.php?dir=/share/Moviez/Music Vidz&dummy=.jsp"  name="icon_small_playall" id="thumbimage"><img src="skin/icon_small_playall.png" border="0" alt="" onfocussrc="skin/icon_small_playall_on.png"/></a>
<td valign="bottom" align="center" >
<a href="http://localhost.drives:8883/HARD_DISK/Moviez/Music Vidz"  name="icon_small_browser" id="thumbimage"><img src="skin/icon_small_browser.png" border="0" alt="" onfocussrc="skin/icon_small_browser_on.png"/></a>
<td valign="bottom" align="center" >
<a href="index_shuffle.htm" name="icon_small_shuffleoff_light" id="thumbimage"><img src="skin/icon_small_shuffleoff_light.png" border="0" alt="" onfocussrc="skin/icon_small_shuffleon_on_light.png"/></a>
<td  valign="bottom" align="right">
</td>
</tr>
</table>
</body>
</html>

Das läuft soweit alles. Ich Rufe diese direkt über einen intergrierten Browser auf und los gehts.

Ich denke wenn ich aus dieser nun eine reine PHP machen (wie auch immer ich das anstelle) und sie dann über
Code:
<meta http-equiv="refresh" content="0;http://localhost:8088/stream/file=/opt/sybhttpd/localhost.drives/HARD_DISK/index.php">
aufrufe sollte das alles funktionieren.

Hab nun mal probiert die form.htm mit dem komischen link zu verwenden (Allerdinsg immer noch meine index.htm.

Code:
  <form action="http://localhost:8088/stream/file=/share/Apps/MusicVideoBox/normal.php" method="post">
  <table border="0" cellpadding="0" cellspacing="4">
    <tr>
      <td align="right">Vorname:</td>
      <td><input name="location" type="text" size="30" maxlength="30"></td>  <input type="submit" value="OK">
    </tr>

das die normal.php:
Code:
<?php
$dir = $_POST['location'];
file_put_contents("settings.conf", $dir);
?>

Allerdings schmeisst er dann

Fatal Error Call to undefined function file_put_contents() ....lalala.../normal.php on line 3


Was ne Geburt! mir ist schon ganz schwindelig. Sitz hier schon wieder den ganzen Tag. Aber komme der Sache näher! Also... das habe ich gefunden was anscheinend die Lösung ist bei dem Ding....

HTM File mit <meta http-equiv="refresh" content="0;http://localhost.drives:8883/HARD_DISK/index.cgi">

CGI Scrpt mit dem Header:
Code:
#!/mnt/syb8634/server/php5-cgi
<?php

....

?>

Schon startet er das Script. Allerdings sagte er nun in meinem Fall NO OUTPUT FILE DEFINED.
 
Zuletzt bearbeitet:
Oh ja glaub schon! Genau das richtige für so einen Super PHP Amateur wie mich

Wenn du es nicht verstehst wer dann? Was fragst du mich
Es ist immer schwer mit einem unbekannten System zu arbeiten und da du davor sitzt, muss ich dich fragen ;)


Die 1. Fehlermeldung verwirrt mich etwas. Wenn da wirklich PHP5.x.x drauf läuft, muss es diese Funktion geben.

Ersetze file_put_contents() mit
PHP:
$fh = fopen('settings.conf', 'w');
fwrite($fh, $dir);
fclose($fh);

Wenn du die index.htm mit einem integrierten Browser aufrufst, wie sieht der Aufruf dann aus? Wie in einem normalen Browser, wo du oben den Pfad eingeben musst? Wenn ja, sollte es ja kein Problem sein, dort auch direkt ein PHP-Script aufzurufen.

CGI muss nicht sein, da PHP ja funktioniert, sonst würde es ja zu keiner PHP-Fehlermeldung kommen. Probier es mal mit dem oben geposteten Ersatz.
 
Geniel das geht schonmal! Musste noch schnell die Rechte verändern mit Telnet. So nun muss ich aus der index htm ne php bauen oder?

Du kannst Browsen aber findet nur gefilterte Dateien. Wenn ich die HTM öffnen habe ich rein nur den Grafikteil. Keine Adresszeile oben. Allerdings startet die kiste eine HTML nach dem start wo ich 6 Links setzten kann wo drauf ich auch immer will.
 
Zuletzt bearbeitet:
OK, wenn er PHP für den direkten Aufruf rausfiltert, dann mache das mit der automatischen Weiterleitung. Also index.htm aufrufen und dann per Meta-Refresh auf eine index.php leiten. Wenn das so funktioniert, dann sollten wir am Ziel sein.

Deine index.htm wird dann einfach in index.php umbenannt und an der pssenden Stelle der PHP-Code eingefügt, welcher dir den einstellbaren Link anzeigt. Die neue index.htm mit der Weiterleitung musst du dann noch erstellen.

file_get_contents() müsstest du dann wohl auch noch ersetzen, wenn file_put_contents() schon nicht ging:
PHP:
$fh = fopen('settings.conf', 'r');
$dir = fread($fh, 256);
fclose($fh);
Die zu lesende Länge (hier 256) müsstest du noch vergrößern, falls es größere Pfade gibt.
(Mach ja ein Image von der Kiste wenn du fertig bist, sonst darfst du, wenn es dumm laufen sollte, irgendwann nochmal alles neu machen xD)
 
Ja funktioniert supi! :-)

Nun bin ich nur zu doof meine index.htm ind ne PHP umzuschreiben:

Code:
<?PHP
echo"<td height='405' valign="bottom" align="center">
<a href='http://localhost:8088/stream/file=/share/Apps/Test/normal.php?dir='.$dir.'&dummy=.jsp" vod="playlist" name="icon_genre1" id="thumbimage"><img src="skin/icon_genre1.png" border="0" alt="" onfocussrc="skin/icon_genre1_on.png"></a></td>";
?>

wo da falsch dran?
 
ahnernoch hat gesagt.:
wo da falsch dran?

Deine Anführungszeichen sind leicht durcheinander gekommen ;)
PHP:
<?php
echo '<td height="405" valign="bottom" align="center">
	<a href="http://localhost:8088/stream/file=/share/Apps/Test/normal.php?dir='.$dir.'&dummy=.jsp" vod="playlist" name="icon_genre1" id="thumbimage">
		<img src="skin/icon_genre1.png" border="0" alt="" onfocussrc="skin/icon_genre1_on.png">
	</a>
</td>';
?>

Wobei folgende Variante besser sein sollte:
PHP:
<td height="405" valign="bottom" align="center">
	<?php
	echo '<a href="http://localhost:8088/stream/file=/share/Apps/Test/normal.php?dir='.$dir.'&dummy=.jsp" vod="playlist" name="icon_genre1" id="thumbimage">';
	?>
		<img src="skin/icon_genre1.png" border="0" alt="" onfocussrc="skin/icon_genre1_on.png">
	</a>
</td>

Oder noch kürzer: (muss man aber lange suchen, bis man so die PHP-Teile findet. wenn mal was geändert werden muss^^)
PHP:
<td height="405" valign="bottom" align="center">
	<a href="http://localhost:8088/stream/file=/share/Apps/Test/normal.php?dir=<?php echo $dir; ?>&dummy=.jsp" vod="playlist" name="icon_genre1" id="thumbimage">
		<img src="skin/icon_genre1.png" border="0" alt="" onfocussrc="skin/icon_genre1_on.png">
	</a>
</td>
Statt
PHP:
<?php echo $dir; ?>
kann man auch
PHP:
<?=$dir?>
nehmen, was aber nur mit aktiven short_open_tags funktioniert. Rate also davon ab, wollte es nur einmal erwähnen, dass es das auch gibt :-P
 
So hab nun in der index.php

Code:
<?php
$dir = file_get_contents('settings.conf');
?>
<html>
<head>
</head>

</body>
<td height="405" valign="bottom" align="center">
    <a href="http://localhost:8088/stream/file=/share/Apps/Test/normal.php?dir=<?php echo $dir; ?>&dummy=.jsp" vod="playlist" name="icon_genre1" id="thumbimage">
        <img src="skin/icon_genre1.png" border="0" alt="" onfocussrc="skin/icon_genre1_on.png">
    </a>
</td>
</body>
</html>

Die Settings.config ist im selben Verzeichnis und gefüttert.
Code:
/share/moviez/Music Vidz/Deutsch HipHop

Aber irgendwie startet er nicht? Sieht aus als würde er die Daten con der config nicht bekommen
 
Kannst du dir, zusätzlich zu dem Bild in dem Link, auch noch $dir dort ausgeben lassen? Dann weiß du, ob er einen Wert in $dir stehen hat. Oder, falls es möglich ist, schau dir einfach den Quelltext und damit den Link an, ob der richtig ist.
 
okay hab nun ('settings.conf') ind ("settings.conf") geändert und es geht! :-) Frag mich nicht warum.

So nun brauch ich aber diesen Setting Wert 5 verschiede. Die können doch gewiss auch benannt werden beim einschreiben und abrufen auch benannt werden oder?

Settings.php so....
Code:
<?php
$dir = $_POST['location'];
$gn1 = $_POST['genre1'];
$gn2 = $_POST['genre2'];
$gn3 = $_POST['genre3'];
$gn4 = $_POST['genre4'];
$fh = fopen('settings.conf', 'w');
fwrite($fh, $dir, $gn1, $gn2, $gn3, $gn4);
fclose($fh);  
?>

Und die halt die input name="whatever" ist klar.
 
Zuletzt bearbeitet:
Hab dir mal eine kleine Klasse zusammengeschustert, die mindestens PHP 5.1.0 benötigt (sollte also laufen, wenn die Infos vor einigen Posts stimmt)

PHP:
class Settings
{
	private $settings;
	
	// Konstruktor der Klasse. Diese Funktion wird automatisch durch "new Settings()" aufgerufen.
	public function __construct()
	{
		$this->settings = parse_ini_file('settings.conf');
	}
	
	// Diese Funktion wird automatisch aufgerufen, sobald $settings->KEY aufgerufen wird. $key nimmt dann den Wert KEY an
	public function __get($key)
	{
		if(array_key_exists($key, $this->settings))
		{
			return $this->settings[$key];
		}
		
		return false;
	}
	
	// Diese Funktion wird automatisch aufgerufen sobald $settings->KEY = VALUE aufgerufen wird. $key nimmt dann den Wert KEY und $value den Wert VALUE an.
	public function __set($key, $value)
	{
		$this->settings[$key] = $value;
		$this->writeToFile();
	}
	
	// Diese Funktion wird bei unset($settings->KEY) aufgerufen. $key nimmt dann den Wert KEY an
	public function __unset($key)
	{
		if(array_key_exists($key, $this->settings))
		{
			unset($this->settings[$key]);
			$this->writeToFile();
		}
	}

	// Diese Funktion wird bei isset($settings->KEY) aufgerufen. $key nimmt dann den Wert KEY an	
	public function __isset($key)
	{
		return array_key_exists($key, $this->settings);
	}
	
	// Diese Funktion wird nur intern aufgerufen, um die Änderungen in die Datei zu schreiben.
	private function writeToFile()
	{
		$write = array();
		foreach($this->settings as $k => $v)
		{
			$write[] = $k . " = ". $v;
		}
		
		$fh = fopen('settings.conf', 'w');
		fwrite($fh, implode("\n", $write));
		fclose($fh);
	}
}
Speichere diese Klasse am besten in einer eigenen PHP-Datei, die du dann per include einbinden kannst.

Nun kannst du ganz einfach deine Einstellungen bearbeiten
PHP:
include ('settings.class.php');
$settings = new Settings();

$settings->KEY_1 = VALUE_1;
$settings->KEY_2 = VALUE_2;
// ...
und auch wieder auslesen
PHP:
include ('settings.class.php');
<?php
$settings = new Settings();

echo $settings->KEY_1 ;
echo $settings->KEY_2;
// ...

Der Name des KEYs kann dabei beliebig gewählt werden. Musst also nur noch die bestehenden Dateien anpassen, damit diese Klasse benutzt wird. Wie, sollte dir anhand der Beispiele klar werden (sollst ja auch was lernen und nicht nur kopieren ;) )

EDIT:
Hier noch eine Version, die auch in PHP 4.x.x funktioniert, jedoch ohne die direkte isset() und unset() Funktionalität.
PHP:
<?php
class Settings
{
    var $settings;
    
    // Konstruktor der Klasse. Diese Funktion wird automatisch durch "new Settings()" aufgerufen.
    function Settings()
    {
        $this->settings = parse_ini_file('settings.conf');
    }
    
    function get($key)
    {
        if(array_key_exists($key, $this->settings))
        {
            return $this->settings[$key];
        }
        
        return false;
    }
    
    function set($key, $value)
    {
        $this->settings[$key] = $value;
        $this->writeToFile();
    }
        
    function writeToFile()
    {
        $write = array();
        foreach($this->settings as $k => $v)
        {
            $write[] = $k . " = ". $v;
        }
        
        $fh = fopen('settings.conf', 'w');
        fwrite($fh, implode("\n", $write));
        fclose($fh);
    }
} 
?>
Verwendung:
PHP:
<?
require_once('settings.class.php');

$settings = new Settings();

$settings->set('KEY', 'VALUE');
echo $settings->get('KEY');
?>
 
Zuletzt bearbeitet:
Zurück