# PHP Funktion bei Button-Klick aufrufen



## dsNDesign (11. April 2012)

Hei,
ich habe folgende Funktion in PHP:

```
function add($name) {
	$name = DB::getInstance()->real_escape_string($name);
	$datum = "00-00-00";
	if(mkdir("user/".$datum."/".$name, 755)) {
		$album_create = "INSERT INTO alben (name, datum) VALUES (".$name.", ".$datum.")";
		DB::getInstance()->query($album_create);
		echo "Album erstellt!";
	} else {
		echo "Fehler";
	}
}
```

Diese Funktion steht noch in einer Klasse "alben".
Aufrufen tu ich normalerweise eine solche Funktion und Klasse mit Hilfe des __autoload. Also:

```
$alben = new alben();
$alben->add(parameter);
```

Dann habe ich aber noch ein Formular. Wenn ich nun mit einem Klick auf einen Button das Formular bestätige/absende, soll die Funktion ausgeführt werden (und somit Ordner + SQL einträge erfolgen).

Das ganze würde ja ganz einfach gehen, indem ich dem Formular ein "POST" als Methode gebe. Ich möchte es aber ausführen, ohne die Seite neu zu laden.
Stichwort 
	
	
	



```
$("#button").click(function() {
});
```

Habe dazu schon Sachen mit Ajax gefunden, wo man eine Datei einbindet. Jedoch möchte ich ja keine extra Datei einbinden, da die Funktion ja quasi schon eingebunden ist.

Gibt es dazu eine Möglichkeit, das ganze so zu realisieren?

Gruß


----------



## Parantatatam (11. April 2012)

Wenn du es elegant haben willst, dann schau dir mal REST oder RESTful Applications an. Wenn du das dann noch mit AJAX verbindest, hast du das, was du wolltest.


----------



## dsNDesign (12. April 2012)

Hab mir jetzt mal REST ein bisschen angeschaut. Kannte ich vorher nicht und sieht wirklich interessant aus. Gibts ja viele verschiedene Seiten dazu. Kannst du mir evt. ein gutes Tutorial / einen guten Artikel dazu empfehlen?


----------



## Parantatatam (12. April 2012)

REST baut auf dem MVC-Entwurfsmuster (Model, View, Controller) auf und leitet die HTTP-Verben GET, POST, PUT und DELETE entsprechend auf einzelne Methoden weiter. GET und POST sind die beiden Methoden, die meistens im Web benutzt werden und die man nutzen kann. Die anderen beiden muss man simulieren.

*Model:* Ein Model ist beispielsweise deine Klasse Alben.
*View:* Ist in den meisten Fällen ein Template.
*Controller:* Ab hier wird es spannend, da du hier beispielsweise eine Methode _add_ definieren kannst:

Verzeichnis-Struktur

```
app
 +– models
 +– views
 +– controllers
```


```
# application.php
@list($controller, $action, $params) = explode('/', $_SERVER['QUERY_STRING'], 3);
$controller = empty($controller) ? 'application' : $controller;
$action     = empty($action)     ? 'index'       : $action;
$params     = empty($params)     ? array()       : explode('/', $params);
$class      = str_replace('_', '', $controller) . 'Controller';

if (!file_exists('app/controllers/' . $controller . '_controller.php'))
{
  throw new Exception('could not load controller');
}

if (!method_exists($class, $action))
{
  throw new Exception('page does not exist');
}

require_once 'app/controllers/' . $controller . '_controller.php';
$a = new $class();
$a->{$action}();
```


```
# app/controllers/application_controller.php
class ApplicationController
{
  public function index()
  {
  }
  
  # ...
}
```


```
# app/controllers/alben_controller.php
class AlbenController extends ApplicationController
{
  public function add()
  {
    $a = new Alben;
    $a->add($b);
  }
}
```


----------

