• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Total aus der Übung[arrays]

Status
Für weitere Antworten geschlossen.

philipp

Neues Mitglied
Hi, is schon länger her, was?

naja ich hab seit damals nix mehr mit web zu tun gehabt und hab heut wieder einen riesenauftrag bekommen. ich würd gern weniger mit datenbanken arbeiten und mehr mit arrays, aber das hab ich noch nie .... dabei konnt ichs ja eigentlich schon.

also, angenommen ich wollte eine kleine "datenbank" in einem array erzeugen. die sollte aber für jeden index mehrere werte tragen können. wie mach ich das am besten?

also zum beispiel mit personen:

ich will position, alter, name->vorname in einem array speichern.

abrufen tu ich dann den vornamen ja so:
array['index'][name][vorname]

aber wie lege ich das array nochmal an??

ich steh auf der leitung...
 
Lass das mit den Arrays bleiben. Beschäftige dich etwas mit der Objekt orientierten Programmierung und du wirst sehen wie komfortabel man mit Objekten arbeiten kann.
Wenn du ein komplexes Projekt hast, warum willst du dann auf eine Datenbank verzichten. Das ist eigentlich total wiedersinnig aber du wirst schon wissen was du tust ;-)
 
http://php.net/manual/de/function.array.php

ist alles bestens beschrieben...

PHP:
<?php

    $arr = array(
            array("name"=>"Mustermann","vorname"=>"Franz","position"=>"Chef"),
            array("name"=>"Schmidt","vorname"=>"Manfred","position"=>"Arbeiter")
           );
    // So gibt es den Vornamen
    echo $arr[0]['vorname'];
    // So gibt es den Nachnamen
    echo $arr[0]['name'];
?>

denke das hilf dir schon

gruss sven
 
morl schrieb:
Lass das mit den Arrays bleiben. Beschäftige dich etwas mit der Objekt orientierten Programmierung und du wirst sehen wie komfortabel man mit Objekten arbeiten kann.
Was das eine mit dem anderen zu tun hat ist mir an dieser Stelle nicht wirklich klar. Vor allem weil z.B. *_fetch_object() bedeutend langsamer ist als *_fetch_array().

Nur mal drüber nachdenken .. und alles nur am Rande. ;-)
 
...ist mir an dieser Stelle nicht wirklich klar.
Das scheint mir auch so ;-)

Was ich zum Ausdruck bringen wollte ist folgendes:

Als Array könnten die Daten zu einer Person wie folgt aussehen
PHP:
$person = array(
     'firstname' => 'Vorname',
     'lastname' => 'Nachname',
     'gender' => 'male',
     ....
);
Mit einem person-Objekt könnte es so aussehen
PHP:
class person {
 protected $firstname;
 protected $lastname;
 protected $gender;

 public function __construct() {}

 public function getFirstname() { return $this->firstname; }
 public function setFirstname($val) { $this->firstname = $val; }
 public function getLastname() { return $this->lastname; }
 public function setLastname($val) { $this->lastname = $val; }
 public function getGender() { return $this->gender; }
 public function setGender($val) {$this->gender = $val; }
}

Dem person-Objekt können nun Funktionen und Eigenschaften hinzugefügt werden. Das ganze hat den Vorteil, das man die Klasse person nur 1 mal erstellen muss und davon dann beliebig viele Instanzen erzeugen kann.
PHP:
$myPerson = new person();

Wenn dir der Umgang mit Objekten nicht geläufig sein sollte, lies besser noch etwas zum Thema bevor du dich dazu äusserst. Was allerding _fetch_object() oder fetch_array damit zu tun haben sollen ist mir schleierhaft.
 
morl schrieb:
Wenn dir der Umgang mit Objekten nicht geläufig sein sollte, lies besser noch etwas zum Thema bevor du dich dazu äusserst.
Brauchst mir nicht erklären, was Objektorientierung ist .. denke mal, dass ich das vor ein paar Jahren mal in einer Java-Schulung gelernt habe. *g*.


Auf *fetch_object/*_fetch_array kam ich, weil du im darauffolgenden Satz über die Nutzung einer Datenbank sprichst. Da hatte ich das irgendwie assoziiert.

Nu, is auch schnurz.
 
OOP ist bäh, vor allem wenn mans net unbedingt braucht. Und bei PHP/MySql kann man sich eigentlich immer elegant vor drücken.

OOP ist lahm, ist zeitaufwendig, man muss abstrakter denken uvm...

Bringt nur wirklich was, wenn man wirklich mit 20 Leuten ein Projekt verwirklicht oder wenn man ein Spiel o.ä. Programmiert, aber da nimmt man ja eh net PHP/MySql.
 
...hab heut wieder einen riesenauftrag bekommen
Für große Projekte macht das schon Sinn. Um selbst die Übersicht bei großen Projekten zu behalten würde ich auf jeden Fall dazu raten Objektorientiert zu arbeiten. Ich hab mich früher auch davor gescheut aber eigentlich nur weil ich nicht recht wusste wie man diese Technik effizient einsetzen kann.
Sicherlich muss man für ein schnödes Gästebuch nicht anfangen und endlos Klassen erstellen aber selbst da würde es schon Sinn machen, wenn man bedenkt wieviel Aufwand man mittlerweile betreiben muss um Herr über den ganzen Spam zu werden.

OOP ist lahm, ist zeitaufwendig, man muss abstrakter denken uvm...
-Lahm??? Auf keinen Fall. Lahm wirds nur wenn der Programmierer Mist verzapft ;-)
-Zeitaufwändiger ist es auf jeden Fall. Hat man sich aber ersteinmal eine Klassenbibliothek erstellt arbeitet man wesentlich schneller als vorher.
-Man muss abstakter denken? Denken hat noch niemandem geschadet...

Sicher kommt die Objektorientierung con höheren Programmiersprachen und PHP ist ja nur eine Skriptsprache aber da geben einem die PHP-Entwickler schon mächtige Werkzeuge in die Hand und man nutzt sie nicht. Die haben sich schon was dabei gedacht und eine Nachfrage muss es ja auch gegeben haben also kann es so schlecht nicht sein.
 
1. Tatsächlich ist die Codeausführung bei OOP langsamer als bei dem Standard-Struktiurierten-Code
2. Zeitaufwändig: Darüber lässt sich streiten. Bei RIESENprojekte ist halt die Wartung und kleiner Veränderungen besser und schneller zu realisieren. Aber keine - ich meine KEINE - normale Website, die Inhalt und Bilder anbietet, würde ich als ein RIESENprojekt bezeichnen, höchstens vielleicht ein professioneller Onlineshop, da kann OOP durchaus Sinn machen.
Wenn man von vornherein Inhalt von Struktur trennt und den Code sinnvoll aufteilt, dann ist selbst die Bearbeitung großer Projekte ohne OOP auch nicht schwer.
 
Ihr driftet vom Thema ab .. und ich entschuldige mich dafür, dass ich damit angefangen hab. :-)
 
Richtig ich bitte hier auch darum wieder zum thema zurückzukehren.

Zum Thema:
Du kannst keine Datenverwaltung ohne datenbank aufbauen. Arrays dienen nur dazu dem scripter/programmierer das arbeiten mit großen datenmengen zu vereinfachen und diese zu repräsentieren. Du kannst damit nicht das speichermedium (die datenbank) ersetzten.
Wie ben schon sagte solltest du dich auf der PHP.net seite oder in Google dazu informieren wie man sie einsetzt und verwendent. Hierzu war auch bereits die funktion mysql_fetch_array ein sehr gutes stichwort.

@morl: Dein objekt hier ist schwachsinnig weil es keine funktionalität bietet die das array nicht schon hatte. Ausserdem verlangsamt es die ausführungszeit des scriptes und ist in diesem fall nicht unbedingt einfacher zu behandeln. Du solltest dir nochmal überlegen wann oop angebracht ist und wann nicht. Es einfach überall zu verwenden ist vor allem bei evt. zeitkritischen anwendungen falsch! PHP ist ursprünglich prozedural aufgebaut und verarbeitet objekte daher nicht ganz so optimal wie andere (nicht scriptsprachen) wie zum beispiel Smalltalk oder Java.
 
Dein objekt hier ist schwachsinnig...
Welches Objekt. Das was ich in dem Post aufgezeigt habe ist lediglich ein Beispiel zur verdeutlichung. Es war nie die Rede davon, das man irgendwas so aufbauen sollte/könnte und ich würde es so ganz bestimmt auch nicht machen.
...weil es keine funktionalität bietet die das array nicht schon hatte
Schon klar, nur lässt sich das Objekt im gegensatz zum Array ganz leicht mit Funktionalitäten erweitern.
...Du solltest dir nochmal überlegen wann oop angebracht ist und wann nicht....
Da kann ich nur nocheinmal auf den ersten Beitrag hinweisen, in dem es um ein
"riesen Projekt" ging ;-)
...Es einfach überall zu verwenden ist vor allem bei evt. zeitkritischen anwendungen falsch!...
Zeitkritische Anwendungen? Im Web? Ich glaub nicht das es solch eine Anwendung in PHP gibt. Wenn es um Verarbeitungszeiten geht sind wohl höhere Programmiersprachen angebracht und nicht PHP.


Ich muss nochmal verrdeutlichen, das ich auch nicht auf dem Standpunkt stehe für jede Webanwendung ein Objektorientiertes Konzept zu Grunde zu legen. Ich kann nur aus Erfahrung sagen, das die meisten professionellen Anwendungen schnell über ihre eigentlich geplanten Grenzen hinauswachen und das man dann schnell vor Problemen steht. Man sollte hier von vorn herein gründlich abwägen, was für einen selbst und natürlich auch für den Kunden am sinnvollsten und auch kostengünstigsten ist. Da spielt dann eine Ausführungsgeschwindigkeit einen Skriptes weniger die Rolle. Vielmehr bewehren sich dann Konzepte wie Caching um damit Zeit zu sparen und den Server zu entlasten. Das Cachen der Seiten eines größeren Projektes würde ich aber nie im Leben prozedural aufbauen, weil das im Gegensatz zu einer objektorientierten Lösung einen extremen Mehraufwand an Programmierarbeit bedeuten würde.
Ich will mich hier für diese eigentlich sinnlose Diskussion entschuldigen und hoffe das zum eigentlichen Thema zurückgefunden wird. Ich bin draussen...
 
edit:bitte weiter unten lesen(edited)

ich weiss, dass eine DB besser ist aber ich kann mit arrays nicht gut arbeiten und wollte es mal besser lernen... schliesslich will ich auch besser werden .. ich hab das nun eh mit datanbanktabellen gelöst.

hab aber ein problem, dass mit einem array zu tun haben könnte. vielleicht könnt ihr mir da helfen

PHP:
<?php
		$anzahl = $_POST['anzahl'];
		$proof = array();
		echo "<p>Pr&uuml;fe Antworten...</p>";
		echo "<ul>";
		for ($i=0;$i<$anzahl;$i++) {
			if (isset($_POST['ktn_voting_answer'.($i+1).]) && $_POST['ktn_voting_answer'.($i+1)] !== '') {
				echo "<li>Antwort ".($i+1)." ist g&uuml;tig</li>";
				$prrof[($i+1)] = 1;
			} else {
				echo "<li>Antwort ".($i+1)." ist ung&uuml;ltig und wird nicht eingetragen</li>";
				$proof[($i+1)] = 0;
			}
		}
		echo "</ul>";
?>

auch wenn ich einen gültigen wert übergebe wird meine if-abfrage immer als false ausgewertet. das ganze script(was bisher fertig is):

PHP:
<?php 
//Verbinden mit MySQL
include "connect.inc.php";
switch($_GET['voting']) {
case "make": 
	//Voting erstellen//
	###################
	echo "<p>Voting erstellen</p>";
	switch ($_GET['mind']) {
	case "new":
		//Neue Umfrage erstellen setp1
		?>
		<form action="<?php echo $_SERVER['PHP_SELF']; ?>?go=intern&intern=voting&voting=make&mind=answers" method="post">
		<p>Umfrage(Tragen Sie hier ihre Frage ein[mit Fragezeichen]):<br/><input type="text" name="ktn_voting_quest" /></p>
		<p>Antowrten(Wieviele Antworten ben&ouml;tigen sie?<br/>&uuml;berlegen sie bitte <span style="color:red">VORHER</span>)<br />
		<input type="text" name="ktn_voting_count" /></p>
		<input type="submit" value="Weiter zu Schritt 2" />
		</form>
		<?php
	break;
	case "answers":
		//Pruefen ob Daten uebermittelt wurden
		if (isset($_POST['ktn_voting_quest'], $_POST['ktn_voting_count']) && $_POST['ktn_voting_quest'] !== '' && $_POST['ktn_voting_count'] !== '' && is_numeric($_POST['ktn_voting_count'])) {
			//Korrekte Daten uebermittelt
			//Umfrage anlegen
			$quest = nl2br(htmlentities($_POST['ktn_voting_quest']));
			$res = 	@mysql_query("INSERT INTO `kaerntnerin_votings` SET
					`frage` = '".$quest."', 
					`stimmen` = '0', 
					`status` = '0'");
			if ($res) {
				//Umfrage erfolgreich angelegt
				echo "<p>Die Umfrage konnte erfolgreich eingerichtet werden</p>";
				$res = mysql_fetch_array(@mysql_query("SELECT `ID` FROM `kaerntnerin_votings` ORDER BY `ID` DESC LIMIT 1"));
				$VID = $res['ID'];
				//Formular mit Antworten erzeugen
				echo "<p>Antworten:</p>";
				echo "<form action=\"".$_SERVER['PHP_SELF']."?go=intern&intern=voting&voting=make&mind=step3\" method=\"post\">";
				//Schleife initialisieren
				for ($i=0;$i<$_POST['ktn_voting_count'];$i++) {
					//Antwortfelder schreiben
					echo "<p>Antwort".($i+1).":<input type=\"text\" name=\"ktn_voting_answer".($i+1)."/\"></p>";
				}
				echo 	"<p><input type=\"hidden\" name=\"anzahl\" value=\"".$_POST['ktn_voting_count']."\"/>
						<input type=\"hidden\" name=\"vid\" value=\"$vID\"/>
						<input type=\"submit\" value=\"Weiter zu Schritt 3\"/></p>
						</form>";
			} else {
				//Umfrage konnte nicht angelegt werden
				echo	"<p>Die Umfrage konnte nicht angelegt werden</p>";
			}
		} else {
			//Daten inkorrrekt
			echo	"<p>Es liegt ein Problem mit den von ihnen &uuml;bermittelten Daten vor, das kann folgende Gr&uuml;nde haben:</p>
					<ul><li>Sie haben keine Daten oder unzureichende Daten gesendet</li>
					<li>Sie haben alphanumerische Daten statt numerischer Daten gesendet(Anzahl der Antworten)</li>
					<li>Der Server konnte die Daten auf Grund von Verbindungs- oder Berechtigungsproblemen nicht empfangen</li>
					</ul>";
		}
	break;
	case "step3":
		//Pruefen ob Eingaben gemacht wurden
		$anzahl = $_POST['anzahl'];
		$proof = array();
		echo "<p>Pr&uuml;fe Antworten...</p>";
		echo "<ul>";
		for ($i=0;$i<$anzahl;$i++) {
			if (isset($_POST['ktn_voting_answer'.($i+1).]) && $_POST['ktn_voting_answer'.($i+1)] !== '') {
				echo "<li>Antwort ".($i+1)." ist g&uuml;tig</li>";
				$prrof[($i+1)] = 1;
			} else {
				echo "<li>Antwort ".($i+1)." ist ung&uuml;ltig und wird nicht eingetragen</li>";
				$proof[($i+1)] = 0;
			}
		}
		echo "</ul>";
		//Antworten in Datenbank schreiben
		for ($i=0;$i<$anzahl;$i++) {
			if ( $proof[($i+1)] == 1 ) {
				$res = 		@mysql_query("INSERT INTO `kaerntnerin_answers` SET
							`answer` = '".$_POST['ktn_voting_answer'.($i+1)]."',
							`VID` = '".$_POST['vid']."', 
							`count` = '0'");
				if ( $res ) {
					echo "<p>Antwort ".($i+1)."eingef&uuml;gt</p>";
				} else {
					echo "<p>Antowrt ".($i+1)."konnte nicht eingef&uuml;gt werden</p>";
				}
			}
		}
	break;
	}
	echo "<p><a href=\"javascript:history.back();\">zur&uuml;ck</a></p>";
break;
case "overview":
	//Overview erstellen//
	#####################
	echo "<p>&Uuml;bersicht</p>";
	switch($_GET['do']) {
	case "del": break;
	case "close": break;
	case "open": break;
	default: 
		echo "<p>Fehler!<br/>Keine korrekte Variable in der URL &uuml;bergeben</p>";
	break;
	}
	echo "<p><a href=\"javascript:history.back();\">zur&uuml;ck</a></p>";
break;
default: ?>
<ul>
<li><a href="<?php echo $_SERVER['PHP_SELF'];?>?go=intern&intern=voting&voting=make&mind=new">Voting erstellen</a></li>
<li><a href="<?php echo $_SERVER['PHP_SELF'];?>?go=intern&intern=voting&voting=overview&do=del">Voting l&ouml;schen</a></li>
<li><a href="<?php echo $_SERVER['PHP_SELF'];?>?go=intern&intern=voting&voting=overview&do=close">Voting abschlie&szlig;en</a></li>
<li><a href="<?php echo $_SERVER['PHP_SELF'];?>?go=intern&intern=voting&voting=overview&do=open">Voting &ouml;ffnen</a></li>
</ul>
<p><a href="javascript:history.back();">zur&uuml;ck</a></p>
<?php break; } ?>

edit:
$_POST['ktn_voting_answer'.($i+1).]
hab ich schon ausgebessert, das war nicht der fehler...
edit2:
echo "<p>Antwort".($i+1).":<input type=\"text\" name=\"ktn_voting_answer".($i+1)."/\"></p>";
hab ich auch grad ausgebssert, mal schaun obs der fehler war
edit3: okay, DEN fehler hab ich, aber der nächste is schon da, und zwar:
die antworten werden nicht in die Datenbank geschrieben - codeauszug:
PHP:
		//Antworten in Datenbank schreiben
		for ($i=0;$i<$anzahl;$i++) {
			if ( $proof[($i+1)] == 1 ) {
				$res = 		@mysql_query("INSERT INTO `kaerntnerin_answers` SET
							`answer` = '".(nl2br(htmlentities($_POST['ktn_voting_answer'.($i+1)])))."',
							`VID` = '".$_POST['vid']."', 
							`count` = '0'");
				if ( $res ) {
					echo "<p>Antwort ".($i+1)."eingef&uuml;gt</p>";
				} else {
					echo "<p>Antowrt ".($i+1)."konnte nicht eingef&uuml;gt werden</p>";
				}
			} else {
				echo "<p>Antwort ".($i+1)." wurde nicht eingef&uuml;gt</p>";
			}
		}
 
Zuletzt bearbeitet von einem Moderator:
vergisst es.... alles nur schlampigkeits und schreibfehler..

sorry.
edit:
ganz komisches problem:
Code:
<input type=\"hidden\" name=\"VID\" value=\"".$vID."\"/>

das kommt nicht an!!! also das formular:
PHP:
				$res = mysql_fetch_array(@mysql_query("SELECT `ID` FROM `kaerntnerin_votings` ORDER BY `ID` DESC LIMIT 1"));
				$VID = $res['ID'];
				//Formular mit Antworten erzeugen
				echo "<p>Antworten:</p>";
				echo "<form action=\"".$_SERVER['PHP_SELF']."?go=intern&intern=voting&voting=make&mind=step3\" method=\"post\">";
				//Schleife initialisieren
				for ($i=0;$i<$_POST['ktn_voting_count'];$i++) {
					//Antwortfelder schreiben
					echo "<p>Antwort".($i+1).":<input type=\"text\" name=\"ktn_voting_answer".($i+1)."\"></p>";
				}
				echo 	"<p><input type=\"hidden\" name=\"anzahl\" value=\"".$_POST['ktn_voting_count']."\"/>
						<input type=\"hidden\" name=\"VID\" value=\"".$vID."\"/>
						<input type=\"submit\" value=\"Weiter zu Schritt 3\"/></p>
						</form>";

JA, auf der seite lässt sich $VID noch korrekt anzeigen, kommt aber nicht mehr bei ?go=intern&intern=voting&voting=make&mind=step3 an, dort is der wert $_POST['VID'] leer

(wenn was mit groß/kleinschreibung ned passt, dann weil ich wärend dem posten da was geändert hab..

edit:

AUCH das hab ich gelöst.... warum find ich die fehler immer erst kurz nachdem ich hier poste?

man man... sorry nochmal
 
Zuletzt bearbeitet von einem Moderator:
Wäre nett wenn du uns auch mitteilst woran es lag und wie du es gelöst hast damit spätere leser es auch noch hiervon profitieren. ;-)

Im übrigen besitzt diese forum spezielle html/php tags du benutzten solltest. Ich habe sie für dich hinein editiert.
 
es waren tippfehler, einfach mal ein punkt hier oder da die variable groß geschrieben... also was kann ich weitergeben:

die variablen bis zur wurzel zurückverfolgen is nie schlecht wenns probleme gibt.(zumindest die, die in der error-line sind)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben