Frage zu OOP für Anfänger

spectrum

Grünschnabel
Hallo leutz,
ich bin neu in der programmierung und in php.
Also ich hab jetzt angefangen mit php läuft soweit ganz gut, nur jetzt bin ich bei den thema oop mit php und mysql angekommen.
Ich will jetzt nen telefonbuch mit php/mysql schreiben mit oop, aber ich weiß nicht wie ich das genau mache. Klassen, Vererbung is ja so kein problem aber wie mach ich das, das über ein eingabeformular auf die DB zugreife und wie schreib bzw lese ich das in den Konstruktor ein?

Hoffe ihr könnt mir gute tips geben.

MFG
 
Also ich würde es mit 2 Klassen realisieren.
class Telefonbuch und
class Kontakt

Das Telefonbuch enthält ein Array von Objekten des Typs Kontakt.
Wenn du ein Objekt vom Typ Telefonbuch initialisierst, wird im Konstruktor das Array mit Kontakten, die in der Datenbank stehen gefüllt. (Das zu realisieren, sollte nicht schwer sein.).

Die Klasse Kontakt sollte eine Objektmethode save() besitzen, die den aktuellen Datensatz in die Datenbank schreibt.

Des Weiteren besitzt die Klasse Telefonbuch eine Objektmethode hinzufuegen() mit den nötigen Parametern um einen neuen Kontak anlegen zu können (nachname, vorname, telNr. ...). Ist der Kontakt angelegt, wird er über die saver()-Methode direkt gespeichert.

Wie man mit Formularen umgeht und in Datenbanken schreibt, erkläre ich an dieser Stelle nicht. Da findest du genug über die Forensuche oder http://www.google.de. Stichwörter: PHP Formular POST speichern Datenbank
 
PN:
Ich blick da nicht durch wie du das machen würdest. Kannst du mir evt. helfen
Alles was man findet über oop is ne klasse daraus wird ein objekt erstellt du das war´s.
Ich komm da irgendwie nicht weiter mit meinen telefonbuch.
THX für deine bemühen.
Hier das versprochene Beispiel.
Kannst du sehr gut erweitern.
PHP:
<?php

class Telefonbuch {
	var $kontakte;
		
	function Telefonbuch() {
		# manuelles Erzeugen von Kontakten
		# ersetzt mögliches Einlesen von Kontakten aus einer Textdatei / Datenbank
		$this->kontakte = array();
		$this->kontakte[] = new Kontakt("Mustermann", "Max", "12312/23546");
		$this->kontakte[] = new Kontakt("Schmidt", "Otto", "2341/324981");		
		$this->kontakte[] = new Kontakt("Schulze", "Thomas", "43552/23982");		
		$this->kontakte[] = new Kontakt("Herman", "Hannes", "34234/23523");					
	}
	
	function printAll() {
		# Alle Kontakte ausgeben
		foreach($this->kontakte as $kontakt)
			echo $kontakt->vorname." ".$kontakt->nachname." : ".$kontakt->telnr."<br>";
	}
	
	function hinzufuegen($nachname, $vorname, $telnr) {
		$this->kontakte[] = new Kontakt($nachname, $vorname, $telnr);
	}
		
}

class Kontakt {
	var $nachname;
	var $vorname;
	var $telnr;

	function Kontakt($nachname, $vorname, $telnr) {
		$this->nachname = $nachname;
		$this->vorname = $vorname;
		$this->telnr = $telnr;
		# wird ein neuer Kunde erstellt, wird er unmittelbar in die Datenbank geschrieben
		$this->save();
	}
		
	function save() {
		# schreibt Kontakt in die Datenbank
	}
}

$gelbeseiten = new Telefonbuch;
$gelbeseiten->printAll();
$gelbeseiten->hinzufuegen("Kontakt", "Neuer", "11880");
$gelbeseiten->printAll();

?>
 
Zuletzt bearbeitet:
Die foreach ohne { } ? Geht das? (Frage ohne es getestet zu haben :) )

PHP:
# Alle Kontakte ausgeben
foreach($this->kontakte as $kontakt)
echo $kontakt->vorname." ".$kontakt->nachname." : ".$kontakt->telnr."<br>";
 
Ja, das geht, meines Wissens nach wird dann nur eine Anweisung ausgeführt.
Das selbe ist ja auch mit if möglich!
PHP:
if ($nummer == 3)
    echo "Hallo Welt!";
 
Da kann man sich drüber streiten, was übersichtlicher ist :-)
Ich bin Freund von kompatem Quellcode und bei einer kleinen Anweisung spare ich mir dann gerne 2 Klammern...
 
PN:
Ich muß nochmal strören, das mit deinen 2 Klassen hab ich verstanden, aber auch hier hast du wieder 2 statische Objekte erzeugt.
Bis dahin ist das alles logisch für mir, ich würde das geren jetzt mit einen formular sehen in verbindung mit einer sql-DB.
Vielleicht kannst du ein tutorial draus machen und es unter http://www.tutorials.de/forum/php-tutorials/ legen damit jeder OOP-Anfänger was davon hat, und den OOP einstieg erleichtern kann.

MFG
Das mit dem Tutorial wäre eine gute Idee, aber da fehlt mir momentan wirklich die Zeit. Außerdem bin ich auch nicht wirklich sehr vertraut mit der OOP in PHP.

Dieses kleine Beispiel habe ich gerade auf die schnell geschrieben, müsste eigentlich funktionieren.

Code:
-- 
-- Tabellenstruktur für Tabelle `tblKontakte`
-- 

CREATE TABLE `tblKontakte` (
  `id` smallint(6) NOT NULL auto_increment,
  `nachname` varchar(50) NOT NULL,
  `vorname` varchar(50) NOT NULL,
  `telnr` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

-- 
-- Daten für Tabelle `tblKontakte`
-- 

INSERT INTO `tblKontakte` (`id`, `nachname`, `vorname`, `telnr`) VALUES 
(1, 'Mustermann', 'Max', '05234/41244');


index.php
PHP:
<?
	require("class.php.inc");
	
	# neues Objekt vom Typ Telefonbuch erzeugen, falls noch keins existiert (erster Seitenaufruf)
	$gelbeseiten = new Telefonbuch;
	
	if(isset($_POST['add']))
	{
		$gelbeseiten->hinzufuegen($_POST['nachname'], $_POST['vorname'], $_POST['telnr']);
		$gelbeseiten->saveNewKontakte();
	}
		
?>
<html>
<head>
	<title>Telefonbuch</title>
</head>
<body>

<p><b>Einen neuen Kontakt hinzufügen:</b></p>
<form method="post" action="index.php">
	<span>Nachname: </span><input type="text" name="nachname"><br />
	<span>Vorname: </span><input type="text" name="vorname"><br />
	<span>TelNr: </span><input type="text" name="telnr"><br />
	<input type="submit" name="add">
</form>
<br />
<p><b>Kontakte:</b></p>
<p>
<?
$gelbeseiten->printAll();
?>
</p>
</body>
</html>

class.php.inc
PHP:
<?php

function mysqlConnect() {
	$link = mysql_connect('localhost', 'your_user', 'your_password')
			or die(mysql_error());
	mysql_select_db('your_database') 
			or die(mysql_error());
	return $link;
}

class Telefonbuch {
	var $kontakte = array();
	var $newKontakte = array();
		
	function Telefonbuch() {
		$link = mysqlConnect();
		$result = mysql_query("SELECT * FROM tblKontakte");
		
		while($row = mysql_fetch_object($result))
		{
			$this->kontakte[] = new Kontakt($row->nachname, $row->vorname, $row->telnr);
		}
		
		mysql_close($link);
	}
	
	function printAll() {
			foreach($this->kontakte as $kontakt)
				echo $kontakt->vorname." ".$kontakt->nachname." : ".$kontakt->telnr."<br>";
	}
	
	function hinzufuegen($nachname, $vorname, $telnr) {
		$this->kontakte[] = new Kontakt($nachname, $vorname, $telnr);
		$this->newKontakte[] = new Kontakt($nachname, $vorname, $telnr);
	}
	
	function saveNewKontakte() {
		foreach($this->newKontakte as $kontakt)
			$kontakt->save();
	}
		
}

class Kontakt {
	var $nachname;
	var $vorname;
	var $telnr;

	function Kontakt($nachname, $vorname, $telnr) {
		$this->nachname = $nachname;
		$this->vorname = $vorname;
		$this->telnr = $telnr;
	}
		
	function save() {
		$link = mysqlConnect();
		$result = mysql_query("INSERT INTO tblKontakte(nachname, vorname, telnr) VALUES('".$this->nachname."', '".$this->vorname."', '".$this->telnr."')");
		mysql_close($link);
	}
}

?>
 
Zurück