Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

php programmieren mit templates

Empfohlene Antworten

Veröffentlicht

hi,

ich programmier ein webinterface, das mir daten aus einer mysql db anzeigen soll.

soweit funktioniert das auch alles.

aber er bringt mir einen template fehler:

Notice: Undefined index: b in d:\programme\apache\htdocs\include\template.inc on line 210

wisst ihr was dass für ein fehler is?

danke korea1

hier der code von meinem html-tpl:


<html>

	<head>

		<title></title>

	</head>

<body>

<table border="1">

	<tr>

		<th width="80">ID</th>

		<th width="80">BMK</th>

		<th width="80">BG-Name</th>

		<th width="80">ArtNr.</th>

		<th width="80">PDF</th>

	</tr>

<!-- BEGIN a -->

	<tr>

		<td width="80">{TBL1ID}</td>

		<td width="80">{BMK}</td>

		<td width="80">{BGNAME}</td>

		<td width="80">{ARTNR}</td>

		<td width="80">{PDF}</td>

	</tr>

<!-- END a -->

</table>

</body>

</html>

hier der code von meinem php script:


<?php
include ("../include/template.inc");
$servername ="localhost";
$benutzer = "******";
$passwort = "******";
$db = "test";
$conID = mysql_connect($servername, $benutzer, $passwort);
if(! $conID) {
print ("Keine Verbindung zu MySQL!!!");
}
mysql_select_db($db)or die ("Konnte Datenbank: $db nicht oeffnen");
$tpl = new Template;
$tpl->set_root("../templates");
$tpl->set_file(array("uebersicht" => "uebersicht.tpl.htm"));

switch($_REQUEST["action"]){
//############ ANZEIGEN ############
case "anzeigen":
$tpl->set_block("uebersicht","a","b");

$sql_query = "SELECT tbl1_ID, tbl1_bmk, tbl1_bgname, tbl1_artnr, tbl1_pdf FROM tbl_1";

$result = mysql_query($sql_query,$conID);

while($row = mysql_fetch_array($result)){

$tpl->set_var(array("TBL1ID" => $row["tbl1_ID"],
"BMK" => $row["tbl1_bmk"], "BGNAME" => $row["tbl1_bgname"], "ARTNR" => $row["tbl1_artnr"], "PDF" => $row["tbl1_pdf"]
));
print "blubb";
$tpl->parse("b","a",true);
}
break;
}
$tpl->parse("Ausgabe","uebersicht");
$tpl->p("Ausgabe");
mysql_close($conID);
?>
[/PHP]

und hier die template.inc:

[PHP]
function get_var($varname) {
if (!is_array($varname)) {
return $this->varvals[$varname];
} else {
reset($varname);
while(list($k, $v) = each($varname)) {
$result[$k] = $this->varvals[$k];
}

return $result;
}
}

Hi,

in Zeile 210 in template.inc wird ein array-schlüssel "b" angesprochen, der nicht definiert ist.

Schreib mal die Zeilennummern vor den Codeschnipsel aus der template.inc.

Dieser Fehler ist aber unproblematisch für die Ausführung und kann in der ini deaktiviert werden. Das wird immer ausgegeben wenn Variablen zuvor nicht definiert wurden oder eben nicht existieren.

MfG

hier nochmal die template.inc:


208 function get_var($varname) {
209 if (!is_array($varname)) {
210 return $this->varvals[$varname];
211 } else {
212 reset($varname);
213 while(list($k, $v) = each($varname)) {
214 $result[$k] = $this->varvals[$k];
215 }
216
217 return $result;
218 }
219 }

[/PHP]

ok und nu?

wo kann ich dass genau in der php.ini ausschalten?

und bitte wenn möglich mit syntax? bin mir gerade noch unschlüssig obs richtig is.

korea1

Also abschalten kann man das so:

aus der Zeile

error_reporting = E_ALL

machst du

error_reporting = E_ALL & ~E_NOTICE

Das schaltet die Notice-Meldungen während der Laufzeit ab.

Steht aber in der ini auch nochmal alles beschrieben

Was aber die Ursache des nicht vergebenen Array-Schlüssels ist, lässt sich so leider kaum sagen. Um da dahinter zu kommen solltest du die Template-Funktionen mal alles ausgegeben lassen womit die arbeiten sollen.

MfG

Also in $varname steht "b" aber $this->varvals hat keinen Index b.

Da läuft was schief ...

MfG Spoom

ok danke, mit dem error_reporting klappt das jetzt und ich bekomm die meldung nich mehr.

mit der template.inc kenn ich mich nicht so aus, die versteh ich auch nicht so richtig, da das mit klassen programmiert is, welche ich noch nicht wirklich beherrsche.

korea1

Also prinzipiell würde ich in der Entwicklung sogar Notices einblende!

Einfach keine Fehler anzeigen und hoffen, dass es trotzdem geht ist ziemlich unsauber ...

Original geschrieben von Spoom

Also prinzipiell würde ich in der Entwicklung sogar Notices einblende!

Einfach keine Fehler anzeigen und hoffen, dass es trotzdem geht ist ziemlich unsauber ...

Das kann man so nicht unbedingt sagen. Sicher ist es sinnvoll alle Meldungen los zu werden, aber immer geht es nicht. Gerade bei Arrays die mit Datenbankwerten gefüllt werden kann diese Ausgabe ziemlich nerven, wenn ein Datensatz nicht komplett war oder ähnliches.

Bei Variablen kam es auch schon zu eigenartigen Ausgaben bei einer älteren Shopsoftware, bei der Übergabewerte aus dem Script im Script selber ausgewertet wurden. Beim ersten Aufruf waren die natürlich noch nicht gesetzt. Auch da kann die Meldung sehr störend sein.

MfG

aber immer geht es nicht.

Natürlich gehts immer!

Es gibt nur Leute die sind zu faul irgendwelche fehler abzufangen...

MfG Spoom

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.