Seite 1 von 1

Problem mit Funktion

Verfasst: 23.11.2008 11:49
von porfavor
Hallo,

ich schreibe Funktionen in eine Datei functions.php

Will ich nun diese aber aufrufen, wird sie zwar anscheinend ausgeführt, jedoch wird nichts ausgegeben. Die Funktion ist

Code: Alles auswählen

function getevents()
{
	$verbindung = mysql_connect("localhost","root","");
mysql_select_db("jgr", $verbindung);
$result1 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 0,6");
$result12 = mysql_fetch_array($result1);
$titel1 = $result12['titel'];
$weekday1 = $result12['weekday'];
$day1 = $result12['day'];
$month1 = $result12['month'];
$year1 = $result12['year'];
$time1 = $result12['zeit'];
$description1 = $result12['description'];

$result2 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 1,6");
$result22 = mysql_fetch_array($result2);
$titel2 = $result22['titel'];
$weekday2 = $result22['weekday'];
$day2 = $result22['day'];
$month2 = $result22['month'];
$year2 = $result22['year'];
$time2 = $result22['zeit'];
$description2 = $result22['description'];

$result3 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 2,6");
$result32 = mysql_fetch_array($result3);
$titel3 = $result32['titel'];
$weekday3 = $result32['weekday'];
$day3 = $result32['day'];
$month3 = $result32['month'];
$year3 = $result32['year'];
$time3 = $result32['zeit'];
$description3 = $result32['description'];

$result4 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 3,6");
$result42 = mysql_fetch_array($result4);
$titel4 = $result42['titel'];
$weekday4 = $result42['weekday'];
$day4 = $result42['day'];
$month4 = $result42['month'];
$year4 = $result42['year'];
$time4 = $result42['zeit'];
$description4 = $result42['description'];

$result5 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 4,6");
$result52 = mysql_fetch_array($result5);
$titel5 = $result52['titel'];
$weekday5 = $result52['weekday'];
$day5 = $result52['day'];
$month5 = $result52['month'];
$year5 = $result52['year'];
$time5 = $result52['zeit'];
$description5 = $result52['description'];

$result6 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 5,6");
$result62 = mysql_fetch_array($result6);
$titel6 = $result62['titel'];
$weekday6 = $result62['weekday'];
$day6 = $result62['day'];
$month6 = $result62['month'];
$year6 = $result62['year'];
$time6 = $result62['zeit'];
$description6 = $result62['description'];

$result7 = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 6,6");
$result72 = mysql_fetch_array($result7);
$titel7 = $result72['titel'];
$weekday7 = $result72['weekday'];
$day7 = $result72['day'];
$month7 = $result72['month'];
$year7 = $result72['year'];
$time7 = $result72['zeit'];
$description7 = $result72['description'];


mysql_close($verbindung);
}
Der Inhalt der Funktion selbst in die Datei x geschrieben wird dann angezeigt.

Woran könnte das liegen?

Verfasst: 23.11.2008 12:06
von Balint
Hallo!

Abgesehen vom Code, der um ein vielfaches vereinfacht werden könnte, sehe ich einfach nicht, wo du Rückgabewerte definierst...

http://de.php.net/return


Viele Grüße,
Bálint

Verfasst: 23.11.2008 12:37
von porfavor
Ich nutze ein Templatesystem. Die Ausgabe geschieht also nicht per php-befehl sondern per {$var} in html

return; bringt rein gar keine Änderung

Dass man den Code vereinfachen könnte ist mir klar...

Verfasst: 23.11.2008 13:22
von porfavor
Noch eine andere Frage:

Wie bekomme ich es hin, dass hier alle Einträge aus der Spalte titel und nicht nur einer ausgegeben werden?

Momentan habe ich das per echo zwar hinbekommen, packe ich das aber in eine andere variable und lasse diese per {$resultat} im template ausgeben liefert es nur "Array"

Code: Alles auswählen

$results = mysql_query("SELECT * FROM events ORDER BY year, month, day ASC LIMIT 0,10;");
while($results2 = mysql_fetch_assoc($results)){
{
echo $results2['titel']." ";
$resultat = array($results2['titel']);
}
};
Ich komm nicht dahinter wie ich es schaffe das array in $resultat auszugeben.
$results2['titel'] kann ich im template nicht ausgeben, das wird als text angezeigt.

Folgendes in php geht jedoch:

Code: Alles auswählen

echo $resultat[0];
Aber eben nicht im html-file {$resultat[0]}

Verfasst: 23.11.2008 14:36
von DanielHeinrich
Hi!
das ist ein Witz, oder?

Ok, gehen wirs an:

Fehler Nr. 1:
Ich nutze ein Templatesystem.
Damit sagst du effektiv so gut wie nichts. Nicht mal den Namen des Template-Systems verrätst du uns. Damit ist es effektiv unmöglich dir zu helfen da wir nichtmal wissen womit wir es hier eigentlich zu tun haben.


Fehler Nr. 2:
Der Inhalt der Funktion selbst in die Datei x geschrieben wird dann angezeigt.
und das ist nicht nur richtig sondern auch gut so!
Bedenke: du schreibst innerhalb deiner Funktion auf Variablen die von aussen nicht sichtbar sind. Entweder du definierst die in der Funktion genutzten Variablen als global oder du kannst das so vergessen.
am besten du liest dir hier das Manual von php.net zum Geltungsbereich von Variablen durch.


Fehler Nr. 3:
return; bringt rein gar keine Änderung
Siehe Rückgabewerte


(Verständnis)Fehler Nr. 4:
Momentan habe ich das per echo zwar hinbekommen, packe ich das aber in eine andere variable und lasse diese per {$resultat} im template ausgeben liefert es nur "Array"
Fehler Nr. 1...


bis bald

Daniel Heinrich

Verfasst: 23.11.2008 17:42
von porfavor
Ok also das mit der Funktion hat sich demnach erledigt. Ich wollte das eben nur so machen, weil ich das gleiche auf mehreren Seiten benötige...

Das template system war nicht von mir. Hier mal der Code:

Code: Alles auswählen


////////TEMPLATE_SYSTEM/////////
function template($name) { 
	$path = $_SERVER['DOCUMENT_ROOT'].'/templates/'.trim($name);
	if(file_exists($path)) {
		if(trim(file_get_contents($path)) != '') {
			$cachepath = $_SERVER['DOCUMENT_ROOT'].'/cache/'.trim($name).".php";
			if(!file_exists($cachepath) || filemtime($path)>filemtime($cachepath)) {
				$handle = fopen($path, 'r');
				$data = fillVars(fread($handle, filesize($path)));
				fclose($handle);
				$cachehandle = fopen($cachepath, 'w');
				fwrite($cachehandle,$data);
				fclose($cachehandle);
			}
			return $cachepath;
		} else {
			echo 'Das Template '.$name.' ist leer!';
			die();
		}
	} else {
		echo 'Das Template '.$name.' wurde nicht gefunden!';
		die();
	}
}

function fillVars($data) {
	$data = str_replace('<?php ','<? ',$data);
	$data = preg_replace('/([^\\\])\{\$([\w.]*)\}/U',
						'\1<?php echo $\2; ?>',
						$data);					//normale Variablen
	$data = preg_replace('/([^\\\])\{\+([\w.]*)\}/U',
						'\1<?php include $\2; ?>',
						$data);					//normale Variablen
	$data = preg_loop('/([^\\\])\{\?([\w.]*)[\s<](.*)([^\\\])\?\}/Us',
						'\1<?php if ( $\2 ) {?>\3\4<?php }?>',
						$data);					//nur wenn Variable gesetzt
	$data = preg_loop('/([^\\\])\{!([\w.]*)[\s<](.*)([^\\\])!\}/Us',
						'\1<?php if (!( $\2 )) {?>\3\4<?php }?>',
						$data);					//nur wenn Variable NICHT gesetzt
	$data = preg_loop('/([^\\\])\{§([\w.]*)(\[(\w*)\])?>(\w*)(\s|<)(.*)([^\\\])§\}/Us',
						'\1<?php if ( $\2 ) {if (!is_array($\2))$templatetemp =array($\2); else $templatetemp= $\2; foreach($templatetemp as $\4=> $\5) {?>\6\7\8<?php }} ?>',
						$data);					//foreach mit und ohne Key
	$data = preg_loop('/<\?php(.*)\$=>(.*)\?>/Us',
						'<?php\1\2?>',
						$data);					//Ergänzung für foreach ohne Key
	$data = preg_loop('/<\?php\s([^<]*)\$([^\s;)]+)\.([^\s.;[\-)]*)([[\-][^\s;)]*)?([\s;)<])(.*)\?>/U',
						'<?php \1(is_object($\2) ? $\2->\3\4 : (is_array($\2) ? $\2["\3"]\4 : false))\5\6?>',
						$data);					//Arrays und Objekte
	$data = preg_loop('/<\?php\s([^<]*)\s\$([^\s;.=\-)]*)(\s|;)(.*)\?>/U',
						'<?php \1(isset($\2) ?$\2: false)\3\4?>',
						$data);					//Probe, ob Variablen existieren
	return $data;
}
Ich nehme an, dass ich für die Lösung bei Arrays und Objekte suchen muss, kann aber auf Anhieb den Code nicht durchblicken, bin halt php-minderbemittelt ;)

Verfasst: 24.11.2008 16:08
von porfavor
Ideen was ich da dazu schreiben müsste, dass ich im Template einzelne Werte des Arrays ausgeben lassen kann?

Was ich möchte:

Es sind Eventeinträge...diese werden in die DB geschrieben, jetzt möchte ich diese gerne ausgeben lassen und dann einen link zum löschen anbieten.