Script läuft nur bei Direktaufruf

ahykes

Erfahrenes Mitglied
Guten Tag!
Ich habe ein Problem mit dem folgendem Script. Wenn ich das Script per Pfadangabe aufrufe klappt alles super...genauso wie es soll. Ruf ich das Script nun als "action" meines Formulares auf. Dauert der Lauf total lange und endet dann in einem weißem Bild. Wie kann sowas sein? Hier das Script:

PHP:
  	include '../DB_CONNECTIONS/db_connect.php';
	if($_POST){
		for($y=0; $y<=$_POST; $y++)
		{
			if($_POST[$y]){
			$NEW_SONG_POSITION = $_POST[$y];
			$query = "UPDATE alexhykes_songs SET song_position_playlist = '$NEW_SONG_POSITION' WHERE song_id = '$y'";
			mysql_query($query);
			}
		}
	}
	
	$select_songs = "SELECT * FROM alexhykes_songs WHERE song_active = 1 ORDER BY song_position_playlist ASC";
	$arrSongs = mysql_query($select_songs);
	$STRING_TO_FILE = '';
	
	$STRING_TO_FILE = $STRING_TO_FILE."\n".'<?xml version="1.0" encoding="UTF-8"?><playlist version="1" xmlns="http://xspf.org/ns/0/">'."\n"."\n";
	$STRING_TO_FILE = $STRING_TO_FILE." \t".'<trackList>'."\n";
			
	while($rsSongs = mysql_fetch_assoc($arrSongs))
	{
		echo 'Verarbeite Song "'.$rsSongs['song_name'].'" ...<br>';
			
		$STRING_TO_FILE = $STRING_TO_FILE." \t".'<track>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \t"."\t".'<location>HALFSONGS/'.$rsSongs['song_file'].'</location>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \t"."\t".'<creator>Alex. Hykes</creator>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \t"."\t".'<album>Autumn Again</album>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \t"."\t".'<title>'.$rsSongs['song_name'].'</title>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \t"."\t".'<annotation>'.$rsSongs['song_name'].'</annotation>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \t".'</track>'."\n";
		$STRING_TO_FILE = $STRING_TO_FILE." \n";
		
	}

	$STRING_TO_FILE = $STRING_TO_FILE." \t".'</trackList>'."\n";
	$STRING_TO_FILE = $STRING_TO_FILE.' </playlist>';
	
	$FILENAME = "../../../SYS_AUDIO/half_playlist.xspf";
	if(file_exists($FILENAME)) { unlink($FILENAME); }
	$FILE = fopen($FILENAME,"a+");
	if(!fwrite($FILE , $STRING_TO_FILE)) {
		fclose($FILE);
		header("location: adm_edit_playlist.php?log=failure");
		exit;
	}
	else {
		fclose($FILE);
		header("location: adm_edit_playlist.php?log=success");
		exit;
	}
 
Zuletzt bearbeitet:
Wie Formular? Wie aussieht oder was? Das Script in der create_playlist.php...

HTML:
<form action="../ADM_CLASSES/create_playlist.php" name="form" method="post">
 
Er bleibt daran hängen:

PHP:
for($y=0; $y<=$_POST; $y++)

Dann wird er mit einer max executiontime oder memory limit hängen bleibtn. $_POST ist ein array und keine zahl, daher wird die bedinung niemals wahr sein.
 
Sehr gut!

Habe das jetzt mit
PHP:
for($y=0; $y<=count($_POST); $y++)
gelöst. Aber das Problem besteht weiterhin :-(
 
Ich habe jetzt mal den ganzen Block mit POST oben auskommentiert.
Meiner Meinung nach liegt es hier dran an den XML-Tags die ich in den String schreibe. Kann das sein? Muss ich das maskieren? Wie mache ich sowas?:rolleyes:
 
Ich habe das mal mit dem Error-Reporting gemacht und siehe da! Es kommt eine altbekannte Warnung:

Warning: Cannot modify header information - headers already sent by (output started at...

Alles klar....habe ich gedacht! machst ob_start() /eb_end_flush() aber nix da! Die Meldung bleibt!

Und überhaupt: In dem ganzem Script wird nicht eine Zeile ausgegeben! mann Mann mann. Ich habe keine Ahnung mehr, was das sein könnte.
 
ich habe das script gerade ein s zu eins in eine neue datei kopiert und jetzt geht es.
ich flippe aus.
das kann doch nicht wahr sein. Danke Euch allen.:mad:
 
PHP:
for($y=0; $y<=count($_POST); $y++)

Ist etwas unperformant, da [phpf]count[/phpf] bei jedem Durchgang wieder gezählt wird. Mach es lieber so:

PHP:
$cnt_post = count($_POST);
for($y = 0; $y < $cnt_post; $y++)


Mal als Beispiel:

PHP:
<?php
$testarray = array();
$testarray = array_pad($testarray, 100000, 0);

$start = microtime(true);
for($i = 0; $i < count($testarray); $i++)
{
  # do nothing
}
$end = microtime(true);

echo ($end - $start)."<br/>";
unset($start, $end);

$start = microtime(true);
$cnt_array = count($testarray);
for($i = 0; $i < $cnt_array; $i++)
{
  # do nothing
}
$end = microtime(true);
echo ($end - $start);
?>

Resultat:
0.0485281944275
0.0146629810333
 
Zurück