Unterschiede in PHP Varianten

Godstyle

Erfahrenes Mitglied
Hallo Leute,

seid einer längeren Zeit arbeite ich wie dem ein oder anderen hier aufgefallen ist mit PHP, wenn ich am Anfang auch nur teilweise dumme fragen gestellt habe, so kann ich inzwischen dank eurer hilfe und dem Lesen anderer Threads teilweise auch auf fragen anderer Nutzer antworten.
Dafür möchte ich mich an dieser Stelle einmal bei euch allen bedanken.

Ich bin jetzt an einem Punkt, wo ich PHP etwas genauer verstehen möchte und Stelle mal die fragen die mich beschäftigen, ich werde euch auch bsp codes zeigen, diese sind bei einem direkten Vergleich jedoch für andere Dinge zuständig und dienen nur der Unterstützung mich klar auszudrücken.

Frage 1:

Man kann PHP auf mehrere Arten Mitteilen etwas in eine DB zu speichern und ich habe erfahren das es sogar verschiedene Namen dafür gibt, als bsp:

Meine ART:

PHP:
$aendern = "UPDATE ow_user_data
				Set 
				vorname = '".$_POST['vorname']."',
				WHERE userid  = '".$_SESSION["usid"]."'";
$update = mysql_query($aendern);

und nun eine völlig andere ART:

PHP:
$log_data = '#	INSERT INTO 
				ow_login 
				(username, email, passwort, confirmcode, ip, sicherheit, antwort) )
	VALUES
				(?, ?, ?, ?, ?, ?,?)';
	
	$stmtt = $db2->prepare($log_data);
	$stmtt->bind_param('ssssiss', $username, $email, $passwort, $confirmcode, $user_ip, $sicherheitsfrage, $antwort);
	if(!$stmtt->execute()) {
		echo "Fehler";
	}

worin liegt der Unterschied ( ausser der schreibweise), was ist sicherer und morderner?

Frage 2)

worin liegt der unterschied zwischen:
include()
require()
require_once()

es mag sein das es nur zufall ist aber bisher konnte ich die 3 Funktionen nach belieben verwenden und habe immer das gewünschte ergebniss erhalten.


Frage 3:

Funktionen, immer wieder sehe ich hier das jemand eine Funktion schreibt nach bspw. folgendem Aufbau:

PHP:
function get_values_from_album($albenarray, $album_id){
    $value = false;
    foreach($albenarray AS $album){
        if($album['id'] == $album_id){
            $value = $album;
        }
        if(isset($album['childs'])){
            $value = get_values_from_album($album['childs'], $album_id);
        }
    }
    return $value;
}

wie Ordne ich funktionen an? mache ich das auch in einer anderen Datein, die mehrere Funktionen beinhalten kann und include diese datei um immer die abrufen zu können die ich brauche?

Bisher habe ich unter anderem DB abfragen die ich mehrfach brauche in eigener eigenen Datei gespeichert und geincludet um sie nicht immer erneut schreiben zu müssen.

Frage 4

Aufbau größerer Seiten, wie sieht das aus, wenn ich mehrere Seiten habe und diese richtig aufrufen möchte, ich habe bisher ein ajaxscript welches einen link entgegennimmt, aus diesem einen wert entnimmt und ein einen Div Tag weiterleitet um diesen neu zuladen und dann wird dort auch die neue seite reingeladen.
Die aufgerufene datei beinhaltet nur inzwischen unmengen an inglude seiten:

PHP:
elseif($prof == 2){ include("includes/home/mails.php"); }
elseif($prof == 3){ echo "matches"; }
elseif($prof == 4){ echo "Gruppen"; }
elseif($prof == 5){ echo "Mitglieder Home"; }
elseif($prof == 6){ echo "Mein Bereich"; }
elseif($prof == 8){ include("includes/com/pages/own_bereich/prof_bild.php"); }
elseif($prof == 9){ include("includes/com/pages/own_bereich/my_prof.php"); }
elseif($prof == 10){ include("includes/com/pages/own_bereich/pro_data_up.php"); }


ist das so eine gängige Lösung oder wird es generell anders gemacht?

So, das ist derzeit das was mich mit am meisten beschäftigt und vlt hilft es auch anderen einen Überlblick zu bekommen wie man etwas aufbaut.

ganz lieben gruß
 
Hi

Frage 1:
Das Erste sind die dir bekannten mysql-Funktionen,
das Zweite ist die objektorientierte Variante mysqli.

Neuer/Moderner ist das Zweite.

Beim zweiten werden außerdem noch Prepared Statements verwendet.
Die hängen nicht unbedingt mit mysqli zusammen
(man kann trotzdem wie beim Alten ein normales insert machen,
nur eben mit den objektorientierten Klassen).

Bei den Prep.Statements macht man einmal ein prepare mit ? im Query
und kann dann mit bind_param Werte "einsetzen" und das Ganze mit execute ausführen.

Der Sinn dahinter: Für eine prepare-te Anweisung kann man beliebig viele binds/executes
machen; die DB spart sich dabei die erneute Verarbeitung der Anweisung selbst.
Im Vergleich zu mehreren kompletten inserts/selects/... ist das daher um einiges schneller.

Weiterer, sicherheitsbezogener Vorteil:
Das String-escapen (mysql_real_escape_string...) spart man sich bei den Einsetzwerten auch.
Man kann es also auch nicht vergessen und dadurch die Seite angreifbar machen.

Frage 2:
require ist ein include, dass beim Nicht-finden der Datei das ganze Script abbricht.

Die once-Varianten passen auf, ob die gleiche Datei schon mal eingebunden wurde,
und machen in dem Fall nichts.
Drei includes mit der gleichen Datei binden diese also dreimal ein,
drei include_once binden die Datei nur einmal ein
(analog für require).

Frage 3:
Zwingende Regeln gibt es da nicht;
PHP ist es komplett egal was wie in Funktionen/Dateien aufgeteilt ist.

Die Frage ist nur, was "schöner" Programmierstil ist.
Und wenn man unbedingt einen haben will, als Erstes mit Klassen vertraut machen.

Frage 4:
Wiewowas? :suspekt:
Was genau wilst du erreichen?

Gruß
 
Also sheel, super antwort, vor allem das mit include etc habe ich nun das erste mal wirklich Top verstanden, Frage 1 klingt logisch und ich werde mich damit mal vertraut machen, zum 3ten, klassen werd ich mir ebenfalls genauer ansehen.

Frage 4:

ich include in einem <div> die Datei main.ink.php, diese beinhaltet einen verweis zu allen Dateien, die ich dort einbinden muss, je nachdem was denn user angeklickt hat, sagen wir es gib einen link auf meiner seite wie folgt:
<a href="?page=1" link="1">Home</a>

die datei main.ink.php erhält über $_GET['page'] den wert 1 nun sucht die main.ink.php in den if abfragen wo page == 1 ist und include die entsprechende Datei.

Das Mache ich bei größeren Seiten bisher immer so, das eine Datei über GET den wert empfängt den Sie laden soll.
 
Hallo,

Frage 1:

An dieser Stelle möchte ich einmal wieder auf mein Tutorial über Prepared-Statements hinweisen: http://www.tutorials.de/content/434-sichere-datenbankzugriffe-durch-prepared-statements.html (ich werde es demnächst mal überarbeiten, es ist grottig, was die Formatierung und teilweise den Satzbau angeht - erklärt aber, was es mit PS auf sich hat - allerdings mit PDO statt mit MySQLi)


Frage 3:

Wenn du eine gute IDE wie z.B. Eclipse+PDT hast, kannst du dir bei der Source-Code-Formatierung helfen lassen. Es gibt Coding-Styles. Mit STRG+i kann man die Einrückung (Indention) korrigieren lassen. Nur wie man die Klammern setzt, und Zeilenumbrüche gestaltet bleibt leider Java-Source-Code vorbehalten. Vielleicht erbarmt sich eines Tages mal jemand und baut das ebenfalls in PDT ein :)

Frage 4:

Die eine Million includes sind sehr unschön. Prinzipiell benutze ich im Fall der Fälle Zend Framework und lasse sowas durch einen Controller-Filter laufen. Ich weiß jetzt nicht, wie weit du mit OOP gediegen bist und ob für dich ein Framework wie Zend bereits in Frage kommt, ich poste trotzdem mal den Link zum Quick-Start: http://framework.zend.com/manual/de/learning.quickstart.intro.html

Das ist nur zum zeigen, das man es auch anders machen kann. Frameworks wie Zend lösen diese Anwendungsfälle auf der Ebene der Konfiguration statt einem programatischem.
 
@saftmaster,

mit OOP bin ich noch nicht vertraut, werde mir ZEND mal ansehen, ich wollte zunächst immer nur verschiedene DInge lernen um zu verstehen wie bestimmte DInge aufgebaut sind, wie sprachen miteinander Aggieren, in die tieferen Programmier Punkte steige ich jetzt langsam ein.

Ich persönlich fand es sinnvoll zunächst die Grundlegenden Dinge zu verstehen ehe ich mich an größere Sachen herranwage.

Die nächsten 1-2 Wochen werde ich damit verbringen mir all das anzusehen was hier genannt wird und vor allem zu verstehen wie es funktioniert. Dann denke ich, das ich mal versuchen werde mich an ein etwas größeres zu setzen um zu sehen wieviel ich wirklich gelernnt habe ;)
 
Ich fand es am Anfang immer recht praktisch, die verschiedenen Sachen anhand von Beispielen zu lernen. Sei es ein Gästebuch oder ein etwas komplexeres System (Blog).

OOP ist sehr angenehm, was den Source-Code angeht, zu lesen. Mit unter sind Programmabläufe in OOP auch schneller als in funktionaler Schreibweise.

Wenn du wirklich einen Schritt weiter gehen willst, sollst du dir OOP ansehen.
 
PHP:
$aendern = "UPDATE ow_user_data
				Set 
				vorname = '".$_POST['vorname']."',
				WHERE userid  = '".$_SESSION["usid"]."'";
$update = mysql_query($aendern);

Wenn du DAS hier gelernt hast, hast du dir deine Infos definitiv beim falschen User geholt, es sollte jedem klar sein, das Variablen (aus dem kompletten _REQUEST-Scope (+ _FILES + _SESSION) entschärft und und auf richtigen Inhalt geprüft werden sollten


Ich fand es am Anfang immer recht praktisch, die verschiedenen Sachen anhand von Beispielen zu lernen. Sei es ein Gästebuch oder ein etwas komplexeres System (Blog).

OOP ist sehr angenehm, was den Source-Code angeht, zu lesen. Mit unter sind Programmabläufe in OOP auch schneller als in funktionaler Schreibweise.

Wenn du wirklich einen Schritt weiter gehen willst, sollst du dir OOP ansehen.

Finde ich auch, der Umstieg von PHP4 auf PHP5 OOP war für mich viel leichter, als ich zuerst angenommen habe ...heute Pürogrammiere ich nur noch OOP :)
 
Zuletzt bearbeitet:
Wenn du DAS hier gelernt hast, hast du dir deine Infos definitiv beim falschen User geholt, es sollte jedem klar sein, das Variablen (aus dem kompletten _REQUEST-Scope (+ _FILES + _SESSION) entschärft und und auf richtigen Inhalt geprüft werden sollten

ich habe wie beschrieben lediglich kleine ausschnitte verwendet um die sachlage zu verdeutlichen, ich bin nichtmal sicher ob die scripte die ich hier eingesetzt habe überhaupt so funktionieren was aber auch für die frage wie ich denke unwesentlich ist ;)

Mit OOP und Klassen beschäftige ich mich grade auch wenn ich schon an meinem ersten wirklich kleinen script am verzweifeln bin und seid 2 std in 12 zeilen den Fehler nicht finde ;)
 
ok, ich höhre euch schon durch die i-net leitung lachen ;)

PHP:
class User
{
		var $recht_status;
		function setzBerechtigung($var)
		{
			$this -> recht_status = $var;
		}
}

$user = new User ;
$user = setzBerechtigung('unreg');

print_r($user);

Fehlermeldung lautet:

Fatal error: Call to undefined function setzBerechtigung() in C:\xampp\htdocs\com_classes\classes\user_class.ink.php on line 12


EDIT, Problem ist gelöst saftmeister hat mir schon geholfen ;)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück