Problem mit Funktion

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Problem mit Funktion

Beitrag 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?
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
Balint
Mitglied
Beiträge: 1815
Registriert: 25.01.2003 21:43
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Meine MODs für phpBB 2.x und phpBB 3.x!
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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...
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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]}
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
DanielHeinrich
Mitglied
Beiträge: 188
Registriert: 05.04.2007 00:28
Wohnort: Bochum

Beitrag 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
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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 ;)
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Benutzeravatar
porfavor
Mitglied
Beiträge: 834
Registriert: 23.08.2006 00:35
Wohnort: Tuttlingen
Kontaktdaten:

Beitrag 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.
Lebe dein Leben solange du kannst.

Jugendgemeinderat-Tuttlingen
Antworten

Zurück zu „Coding & Technik“