---
title: "Simples Frontend-Plugin / Extension zum Lernen"
url: "https://www.typo3.net/d/9802-simples-frontend-plugin-extension-zum-lernen"
source: "typo3.net"
tags: ["Extensions","Entwicklung","PHP","Tipp"]
created: "2004-03-12"
last_reply: "2010-03-26"
replies: 2
solved: false
page: 1
pages: 1
lang: "de"
---

# Simples Frontend-Plugin / Extension zum Lernen

Extensions › Entwicklung · 2 Antworten · gestartet 2004-03-12

## Eröffnungsbeitrag

**parakarl** · 2004-03-12 · [Beitrag #1](https://www.typo3.net/d/9802-simples-frontend-plugin-extension-zum-lernen/1)

Hi,

ich hatte bis Dato erst ein Posting in diesem Forum und war über
die Resonanz recht enttäuscht. Damit mal ein wenig Schwung
in den Laden kommt paste ich eine funzende Lösung für eine
Frontend-Formularsteuerung mit Update/Create/Delete auf eine
private Tabelle hier rein, die ich als Übung zum Selbststudium
erstellt habe.

Wäre übrigens eine heftig gute Idee, wenn die Damen und Herren
Teilnehmer, falls sie doch mal auf eine Lösung stoßen, diese ab-
schließend veröffentlichen.

```php
<?php
/***************************************************************
*  Copyright notice
*  ...
*  Das ist lediglich ein schneller hack, um die Typo3-Umgebung auszuprobieren
*  und den Umgang mit globalen Daten, Tabellen und Formularen zu erlernen und
*  zu verstehen.
*
*  Das PHP-Coding bitte ich zu entschuldigen: das sind meine allerersten PHP-
*  Zeilen. Die BaSH und C++ liegen mir ansonsten besser :)
*
*  Das *Projektchen* ist zu klein und zu bescheiden, um es als eine Übungs-
*  Extension auf Typo3.org zu laden. Dennoch mag es einem Anfänger oder
*  Leuten (wie mir), die mit der Typo3-Dokumentation und der Resonanz und
*  den Inhalten des Entwicklerforums Typo3.net unzufrieden sind, einige wichtige
*  Hinweise für das Handling von Formularen in der Typo3-Umgebung liefern.
*
*  Um das Beispiel vollständig lauffähig zu verwenden, ist mit dem "Extension
*  Kickstarter" ein minimalistisches Frontend-Plugin mit dem Key "vaccess_profile"
*  als lokale Extension anzulegen. Es ist nur eine einzige Tabelle mit den Nutz-
*  Feldern 'lname' und 'fname' anzulegen:
*  
*  mysql> describe tx_vaccess_profile;
*  +-----------+---------------------+------+-----+---------+----------------+
*  | Field     | Type                | Null | Key | Default | Extra          |
*  +-----------+---------------------+------+-----+---------+----------------+
*  ...
*  | lname     | varchar(60)         |      |     |         |                | 
*  | fname     | varchar(60)         |      |     |         |                | 
*  +-----------+---------------------+------+-----+---------+----------------+
*
*  Bitte nicht vergessen das Kennzeichen "USER cObjects are cached..."
*  im Frontend-Plugin zu setzen. Es muss ferner in den Basis-Einstellungen
*  für Typo3 das "EXT Editing" zugelassen sein.
*
*  Um die Extnesion zu verwenden: dieses PHP-Script in die Datei
*  "pi1/class.tx_vaccess_pi1.php" einfügen, die Extension laden und
*  an beliebiger Stelle im Content als Plugin einfügen.
*
*  Dieses Beispiel bezieht sich auf eine multilinguale Single-Tree-Site mit
*  SSL-Verschlüsselung und authentisierten Frontend-Usern.
*  Falls dies nicht erforderlich/gewünscht ist: einfach die Zeilen zwischen
*  @BEGIN@ und @END@ löschen.
*
*  Viel Spaß und viel Erfolg!
*
***************************************************************************************
*  ...
*/

require_once(PATH_tslib."class.tslib_pibase.php");

class tx_vaccess_pi1 extends tslib_pibase {
	var $prefixId = "tx_vaccess_pi1";		// Same as class name
	var $scriptRelPath = "pi1/class.tx_vaccess_pi1.php";	// Path to this script relative to the extension dir.
	var $extKey = "vaccess";	// The extension key.

	/**
	 * für SQL-Statements auf unsichere Sonderzeichen prüfen
	 */
	function bad($st) { 
		if (strpos($st,';') || strpos($st,''') || strpos($st,'"')  ) { 
		   return true; 
		} else { 
		   return false; 
		} 
	}

	/**
	 * Handle für alle Aktionen auf dieser Site
	 */
	function main($content,$conf)  {

        		// Meldungen und Fehlermeldungen bilingual
		$MY_MESS = Array (
			0 => Array (
				"ERR_NOSEL" => "<h2>you didn't select a record!</h2><br>",
				"ERR_EXIST" => "<h2>this last name is already recorded!</h2><br>",
				"ERR_INSERT" => "<h2>error with table record insert!</h2><br>",
				"ERR_DELETE" => "<h2>error with table record delete!</h2><br>",
				"ERR_UPDATE" => "<h2>error with table record update!</h2><br>",
				"ERR_AUTH" => "<h2>you're not logged in!</h2><br>",
				"ERR_NODATA" => "<h2>no data found according to selection!</h2><br>",
				"ERR_SSL" => "<h2>no secure https connection!</h2><br>",
				"ERR_CHAR" => "<h2>illegal character!</h2><br>",
				"HINT_INIT" => "<h3>inquire records/create a new record</h3><br>",
				"HINT_HOME" => "reload this page"
			),
			2 => Array (
				"ERR_NOSEL" => "<h2>Sie haben keinen Datensatz ausgewählt!</h2><br>",
				"ERR_EXIST" => "<h2>dieser Nachname ist bereits definiert!</h2><br>",
				"ERR_INSERT" => "<h2>Fehler beim Neuantrag in die Tabelle!</h2><br>",
				"ERR_DELETE" => "<h2>Fehler beim Löschen von der Tabelle!</h2><br>",
				"ERR_UPDATE" => "<h2>Fehler bei der Tabellen-Aktualisierung!</h2><br>",
				"ERR_AUTH" => "<h2>Sie sind nicht angemeldet!</h2><br>",
				"ERR_NODATA" => "<h2>keine der Selektion entsprechenden Daten gefunden!</h2><br>",
				"ERR_SSL" => "<h2>keine sichere https-Verbindung!</h2><br>",
				"ERR_CHAR" => "<h2>unzulässiges Zeichen!</h2><br>",
				"HINT_INIT" => "<h3>Datensätze abfragen/neuen Datensatz anlegen</h3><br>",
				"HINT_HOME" => "seite neu laden"
			)
		);

		// globale Daten an das eigene Objekt übergeben
		$lang = $GLOBALS["TSFE"]->sys_language_uid;
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();

		// @BEGIN@
		// Sammelfehlerkennung für nachfolgende Session-Prüfungen
		$illegal = 0;

		// Benutzer angemeldet?
		if ($GLOBALS["TSFE"]->fe_user->user == NULL) {
		   $content=$MY_MESS[$lang][ERR_AUTH];   // nicht angemeldet
		   $illegal = 1;
		   }

		// Server/Browser-informationen lesen
		$headers = apache_request_headers();
		// überprüfen, ob eine SSL-Session besteht
		$https=$headers["Referer"];
		if (substr($https,0,5) <> 'https') {
		   $content=$MY_MESS[$lang][ERR_SSL];   // keine sichere Verbindung
		   $illegal = 1;
		   }

		// Sammelfehler aufgetreten?
		if ($illegal) {
		   $content.='<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		   return $this->pi_wrapInBaseClass($content);
                   }
		// @END@

		/**********************************************************************************************************************************
		    Dialog-Auswertung: der Submit-Button wurde auf der Seite gedrückt bzw. die Seite wurde erstmalig aufgerufen
		**********************************************************************************************************************************/

		/**********************************************************************************************************************************
		    Event: SEARCH_BUTTON nach INIT

				der eingegebene Suchstring wird als Match auf 'lname' verwendet. Die Suchergebnisse werden in
				einer Tabelle mit Radio-Buttons zur Auswahl ausgegeben.
				
		    Folge-Events: SELECT_BUTTON, REMOVE_BUTTON, EXIT_BUTTON

		    IN:	"[lname]" als Suchstring

		    OUT: "[AUSWAHL] := lname" aus einem Radio-Button
		**********************************************************************************************************************************/
		if (isset($this->piVars[search_button])) {
		   // Protokollierung der gewählten Aktion
		   $content='<H2>SEARCH['.$this->piVars['DATA']['lname'].']</H2><BR>';
		   // unzulässige Sonderzeichen enthalten?
		   if ($this->bad($this->piVars['DATA']['lname'])) {
  	  	      $content.=$MY_MESS[$lang][ERR_CHAR].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		   }
		   // mit dem Namensfragment ähnliche Namen auslesen
		   $query = "SELECT * FROM tx_vaccess_profile WHERE lname like '%".$this->piVars['DATA']['lname']."%' ORDER BY lname";
		   $res = mysql(TYPO3_db,$query);
		   $records = mysql_num_rows($res);
		   // keine entsprechenden Daten gefunden
		   if (!$records) {
		      $content.=$MY_MESS[$lang][ERR_NODATA].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // Kopf der Auswahlliste mit Radio-Buttons in einer Tabelle wegschreiben
		   $content.='
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>';
		   // Zeilenzähler für Positionierung der Buttons
		   $rcount = 0;
		   // je Datensatz einen Radio-Button setzen
		   while ( ($row=mysql_fetch_assoc($res)) ) {
		      $rcount++;
		      $content.='
				<tr>
				<td>
				<input type="radio" name="'.$this->prefixId.'[DATA][AUSWAHL]" value="'.$row["lname"].'">
				<spacer type="horizontal" size="20">
				</td>
				<td>
				<b>'.$row["lname"].'</b>
				</td>
				<td>
				<b>'.$row["fname"].'</b>
				<spacer type="horizontal" size="20">
				</td>
				<td>
				</td>';
			// Ändern, Löschen- und Fertig-Button auf der ersten und letzten Zeile (wenn mehr als 20 Datensätze) ausgeben
		      if ($rcount == 1|| ( $rcount == $records && $records > 20) ) {
		         $content.='
				<td style="vertical-align: top;">
				<input type="submit" name="'.$this->prefixId.'[edit_button]" value="Aendern">
				</td>
				<td style="vertical-align: top;">
				<input type="submit" name="'.$this->prefixId.'[remove_button]" value="Loeschen">
				</td>
				<td style="vertical-align: top;">
				<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
				</td>';
			 } else {
		         $content.='
				<td>
				</td>
				<td>
				</td>
				<td>
				</td>';
			 }
		      $content.='</tr>';
		      }
			// Tabelle und Formular abschließen
		    $content.='
				</tbody>
				</table>
				</form>';
		}

		/**********************************************************************************************************************************
		    Event: NEW_BUTTON nach INIT

				Es wird ein Eingabedialog für einen neuen Nachnamen und Vornamen aufgebaut.
				
		    Folge-Events: INSERT_BUTTON, EXIT_BUTTON

		    IN: -/-

		    OUT: [lname] und [fname] aus 2 Input-Feldern
		**********************************************************************************************************************************/
		else if (isset($this->piVars[new_button])) {
		   $content='
			<H2>NEW</H2><BR>
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<b><input type="text" name="'.$this->prefixId.'[DATA][lname]" value=""></b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[insert_button]" value="Einfuegen">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					First Name<br>
					</td>
					<td style="vertical-align: top;">
					<b><input type="text" name="'.$this->prefixId.'[DATA][fname]" value=""></b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
		}

		/**********************************************************************************************************************************
		    Event: INSERT_BUTTON nach NEW_BUTTON

				der neu eingegebene Datensatz wird eingetragen und eine Meldung ausgegeben
				
		    Folge-Events: EXIT_BUTTON

		    IN: static [lname] aus einem hidden und [fname] aus einem text-Feld
				
		    OUT: -/-
		**********************************************************************************************************************************/
		else if (isset($this->piVars[insert_button])) {
		   $content='<H2>INSERT['.$this->piVars['DATA']['fname'].','.$this->piVars['DATA']['lname'].']</H2><BR>';
		   // unzulässige Sonderzeichen enthalten oder Leereingabe?
		   if ($this->bad($this->piVars['DATA']['fname']) || !strlen($this->piVars['DATA']['fname']) ||
  	  	       $this->bad($this->piVars['DATA']['lname']) || !strlen($this->piVars['DATA']['lname'])) {
  	  	      $content.=$MY_MESS[$lang][ERR_CHAR].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		   }
		   // ist der Name bereits eingetragen?
		   $query = "SELECT * FROM tx_vaccess_profile WHERE lname = '".$this->piVars['DATA']['lname']."'";
		   $res = mysql(TYPO3_db,$query);
		   // Datensätze gefunden?
		   if (mysql_num_rows($res)) {
		      $content.=$MY_MESS[$lang][ERR_EXIST].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // neuen Datensatz eintragen
		   $query = "INSERT INTO tx_vaccess_profile ( lname, fname ) VALUES ( '".strtoupper($this->piVars['DATA']['lname'])."', '".strtoupper($this->piVars['DATA']['fname'])."' )";
		   $res = mysql(TYPO3_db,$query);
		   if ($res <> 1) {
		      $content.=$MY_MESS[$lang][ERR_INSERT].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // Ergebnis anzeigen
		   $content.='
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.strtoupper($this->piVars['DATA']['lname']).'</b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					First Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.strtoupper($this->piVars['DATA']['fname']).'</b>
					</td>
					<td style="vertical-align: top;">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
		}

		/**********************************************************************************************************************************
		    Event: EDIT_BUTTON nach SEARCH_BUTTON

				Es wird ein Eingabedialog für den neuen Vornamen aufgebaut.
				
		    Folge-Events: UPDATE_BUTTON, EXIT_BUTTON

		    IN: "[AUSWAHL] := lname" aus einem Radio-Button

		    OUT: static [lname] aus einem hidden und [fname] aus einem text-Feld
		**********************************************************************************************************************************/
		else if (isset($this->piVars[edit_button])) {
		   $content='<H2>EDIT['.$this->piVars['DATA']['AUSWAHL'].']</H2><BR>';
		   if ($this->piVars['DATA']['AUSWAHL'] == '') {
		      $content.=$MY_MESS[$lang][ERR_NOSEL].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // einzelnen Datensatz lt. angegebenem Namen lesen
		   $query = "SELECT * FROM tx_vaccess_profile WHERE lname = '".$this->piVars['DATA']['AUSWAHL']."'";
		   $res = mysql(TYPO3_db,$query);
		   // kein exakter Treffer bzw. keinen Datensatz gefunden?
		   if (mysql_num_rows($res) <> 1) {
		      $content.=$MY_MESS[$lang][ERR_NODATA].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   $row=mysql_fetch_assoc($res);
		   $content.='
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<input type="hidden" name="'.$this->prefixId.'[DATA][lname]" value="'.$row["lname"].'">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.$row["lname"].'</b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[update_button]" value="Aendern">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					First Name<br>
					</td>
					<td style="vertical-align: top;">
					<input type="text" name="'.$this->prefixId.'[DATA][fname]" value="'.$row["fname"].'">
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
		}

		/**********************************************************************************************************************************
		    Event: UPDATE_BUTTON nach EDIT_BUTTON

				der eingegebene Vorname wird im Datensatz 'lname' aktualisiert und eine Meldung ausgegeben
				
		    Folge-Events: EXIT_BUTTON

		    IN: static [lname] aus einem hidden und [fname] aus einem text-Feld
				
		    OUT: -/-
		**********************************************************************************************************************************/
		else if (isset($this->piVars[update_button])) {
		   $content='<H2>CHANGE['.$this->piVars['DATA']['fname'].']</H2><BR>';
		   // unzulässige Sonderzeichen enthalten oder Leereingabe?
		   if ($this->bad($this->piVars['DATA']['fname']) || !strlen($this->piVars['DATA']['fname'])) {
  	  	      $content.=$MY_MESS[$lang][ERR_CHAR].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		   }
		   // den einzelnen Datensatz lt. angegebenem Namen testlesen
		   $query = "SELECT * FROM tx_vaccess_profile WHERE lname = '".$this->piVars['DATA']['lname']."'";
		   $res = mysql(TYPO3_db,$query);
		   // kein exakter Treffer bzw. keinen Datensatz gefunden?
		   if (mysql_num_rows($res) <> 1) {
		      $content.=$MY_MESS[$lang][ERR_NODATA].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // den Datensatz aktualisieren
		   $query = "UPDATE tx_vaccess_profile SET fname= '".strtoupper($this->piVars['DATA']['fname'])."' WHERE lname = '".$this->piVars['DATA']['lname']."'";
		   $res = mysql(TYPO3_db,$query);
		   if ($res <> 1) {
		      $content.=$MY_MESS[$lang][ERR_UPDATE].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // Ergebnis anzeigen
		   $content.='
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.$this->piVars['DATA']['lname'].'</b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					First Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.strtoupper($this->piVars['DATA']['fname']).'</b>
					</td>
					<td style="vertical-align: top;">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
		}

		/**********************************************************************************************************************************
		    Event: REMOVE_BUTTON nach SELECT_BUTTON

				der ausgewählte Datensatz wird angezeigt und eine Löschbestätigung angefordert.

		    Folge-Events: DELETE_BUTTON, EXIT_BUTTON

		    IN: "[AUSWAHL] := lname" aus einem Radio-Button
				
		    OUT: static [lname] und [fname] aus 2 hidden Feldern
		**********************************************************************************************************************************/
		else if (isset($this->piVars[remove_button])) {
		   $content='<H2>REMOVE['.$this->piVars['DATA']['AUSWAHL'].']</H2><BR>';
		   if ($this->piVars['DATA']['AUSWAHL'] == '') {
		      $content.=$MY_MESS[$lang][ERR_NOSEL].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // einzelnen Datensatz lt. angegebenem Namen lesen
		   $query = "SELECT * FROM tx_vaccess_profile WHERE lname = '".$this->piVars['DATA']['AUSWAHL']."'";
		   $res = mysql(TYPO3_db,$query);
		   // kein exakter Treffer bzw. keinen Datensatz gefunden?
		   if (mysql_num_rows($res) <> 1) {
		      $content.=$MY_MESS[$lang][ERR_NODATA].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   $row=mysql_fetch_assoc($res);
		   $content.='
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<input type="hidden" name="'.$this->prefixId.'[DATA][lname]" value="'.$row["lname"].'">
				<input type="hidden" name="'.$this->prefixId.'[DATA][fname]" value="'.$row["fname"].'">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.$row["lname"].'</b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[delete_button]" value="Loeschen">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					First Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.$row["fname"].'</b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
		}

		/**********************************************************************************************************************************
		    Event: DELETE_BUTTON nach REMOVE_BUTTON

				der angegebene Datensatz 'lname' wird gelöscht und es wird eine Meldung ausgegeben.
				
		    Folge-Events: EXIT_BUTTON

		    IN: static [lname] und [fname] aus 2 hidden Feldern
				
		    OUT: -/-
		**********************************************************************************************************************************/
		else if (isset($this->piVars[delete_button])) {
		   $content='<H2>DELETE['.$this->piVars['DATA']['lname'].']</H2><BR>';
		   // den einzelnen Datensatz lt. angegebenem Namen testlesen
		   $query = "SELECT * FROM tx_vaccess_profile WHERE lname = '".$this->piVars['DATA']['lname']."'";
		   $res = mysql(TYPO3_db,$query);
		   // kein exakter Treffer bzw. keinen Datensatz gefunden?
		   if (mysql_num_rows($res) <> 1) {
		      $content.=$MY_MESS[$lang][ERR_NODATA].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // den Datensatz löschen
		   $query = "DELETE FROM tx_vaccess_profile WHERE lname = '".$this->piVars['DATA']['lname']."'";
		   $res = mysql(TYPO3_db,$query);
		   if ($res <> 1) {
		      $content.=$MY_MESS[$lang][ERR_DELETE].'<BR><BR>'.$this->pi_linkToPage($MY_MESS[$lang][HINT_HOME],$GLOBALS["TSFE"]->id).'</P>';
		      return $this->pi_wrapInBaseClass($content);
		      }
		   // Ergebnis anzeigen
		   $content.='
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.$this->piVars['DATA']['lname'].'</b>
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[exit_button]" value="Fertig">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					First Name<br>
					</td>
					<td style="vertical-align: top;">
					<b>'.$this->piVars['DATA']['fname'].'</b>
					</td>
					<td style="vertical-align: top;">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
		}

		/**********************************************************************************************************************************
		    Event: INIT

				initialer Aufruf der Seite: Es wird ein Eingabedialog für für einen Suchstring oder eine Neueingabe aufgebaut.
				
		    Folge-Events: NEW_BUTTON, SEARCH_BUTTON, EXIT_BUTTON

		    IN: -/-

		    OUT: "[lname]" als Match-String
		**********************************************************************************************************************************/
                else {
		   $content='
			<H2>INIT</H2><BR>
			<form action="'.$this->pi_getPageLink($GLOBALS["TSFE"]->id).'" method="POST">
				<input type="hidden" name="no_cache" value="1">
				<table cellpadding="2" cellspacing="2" border="0" style="text-align: left;">
				<tbody>
				<tr>
					<td style="vertical-align: top; ">
					Last Name<br>
					</td>
					<td style="vertical-align: top;">
					<input type="text" name="'.$this->prefixId.'[DATA][lname]" value="">
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[search_button]" value="Suchen">
					</td>
				</tr>
				<tr>
					<td style="vertical-align: top; ">
					</td>
					<td style="vertical-align: top;">
					</td>
					<td style="vertical-align: top;">
					<input type="submit" name="'.$this->prefixId.'[new_button]" value="Neu">
					</td>
				</tr>
				</tbody>
				</table>
			</form>';
                }
		return $this->pi_wrapInBaseClass($content);
	}
}

if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vaccess/pi1/class.tx_vaccess_pi1.php"])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vaccess/pi1/class.tx_vaccess_pi1.php"]);
}

?>
```

## Antworten

### [#2](https://www.typo3.net/d/9802-simples-frontend-plugin-extension-zum-lernen/2) · Bladerunner · 2004-04-06

dank dir !

die extension ist sehr informativ  8-)  ,da kann ich mir 'ne menge rausziehen.

### [#3](https://www.typo3.net/d/9802-simples-frontend-plugin-extension-zum-lernen/3) · Cheeesi · 2010-03-26

Hallo Parakarl,

auch wenn das Tutorial jetzt schon etwas älter ist, hat es mir sehr sehr weitergeholfen einen ersten Überblick zu bekommen was wie wo gemacht werden kann. :-)

Vielen Vielen Dank dafür!

---

Quelle: „Simples Frontend-Plugin / Extension zum Lernen“, typo3.net, https://www.typo3.net/d/9802-simples-frontend-plugin-extension-zum-lernen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
