The PHP/MySQL-FAQ

Status
Für weitere Antworten geschlossen.
Delmar

Delmar

Aktives Mitglied
Thread Starter
Dabei seit
28.09.2002
Beiträge
829
Reaktionspunkte
1
Hallo zusammen,

in diesem Thread sind Antworten auf Fragen gesammelt, die in schöner Regelmäßigkeit
im PHP & MySQL-Forum auftauchen. Sinn dieses Beitrags ist zum einen, die Antwort auf
diese Fragen zu erleichtern (mit einem schnell zu erstellenden Link 'das steht
<link>hier</link>'), zum anderen auch die eitle Hoffnung, daß wenigstens einige der
Fragestellenden diese FAQ vor dem Posten entdecken! ;)

Dieser Thread bleibt geschlossen; Anmerkungen, Ergänzungen, Fragen, etc. zur FAQ
schickt bitte per PN an mich.
 
Zuletzt bearbeitet:
Frage: Wie kann ich PHP / MySQL auf meinem Mac OS installieren und einrichten?


Antwort: Den Server (Apache) liefert Apple mit seinem Mac OS von Haus aus mit.
Somit ist eine vorhergehende Installation eines http Servers nicht notwendig.


PHP ist zwar ebenfalls standardmäßig bei Mac OS in der Version 4.3.2 dabei, sollte
aber, um zu gewährleisten auf einer aktuellen Version zu entwickeln, von Zeit zu Zeit
einem Update unterzogen werden.

Unter folgendem Link kann man sich eine .dmg Datei herunterladen und wie ein
normales Programm installieren. Link: http://www.entropy.ch/software/macosx/php/


Aktiviert man nun unter Systemeinstellung -> Sharing -> "Personal Web Sharing", kann
man über den verwendeten Browser unter der Adresse

http://localhost/~DeinBenutzername/

das Verzeichnis des Webservers aufrufen. Dieses Verzeichnis kann bequem über den
Finder im eigenen Verzeichnis "DeinBenutzername/Webseiten/" erreicht werden.


MySQL kann über den folgenden Link auf dem Rechner installiert werden:
http://www.serverlogistics.com/mysql.php.

Das Package installiert MySQL und stellt darüber hinaus auch ein Modul zur Verfügung,
um MySQL aus den Systemeinstellungen heraus zu administrieren.

Ist MySQL installiert, empfiehlt es sich, über das erwähnte Admin-Modul ein "root"
Passwort für MySQL zu vergeben. ACHTUNG: Dieses Passwort nicht verlegen!


Der Datenbankserver kann nun über:

Datenbankserver: "localhost"
Benutzer: "root"
Passwort: eigenes

erreicht werden.


Zur Verwaltung von Datenbanken empfiehlt sich das kostenlose Tool: phpMyAdmin
 
Zuletzt bearbeitet von einem Moderator:
Frage: Wie kann ich, mit einem Formular oder in der URL, Werte an mein Skript
übergeben und auf diese zugreifen?


Antwort: Seit der PHP-Version 4.2 ist die Behandlung von Eingaben, die aus einem
Formular oder in der URL stammen, geändert worden. Bis dahin wurden die Werte ein-
fach in den globalen Variablenraum kopiert. Beispiel: Was im Formularfeld

PHP:
<input type="text" name="meineVariable">

eingegeben wird, stand einfach als normale Variable zur Verfügung:

PHP:
echo "Eingegeben wurde: " . $meineVariable;

Das Problem bei der Sache war, dass durch diese Methode bei ungeschickter Programmie-
rung schwere Sicherheitslücken auftreten konnten. Deshalb landen die Eingaben seit PHP
4.2 in einem der superglobalen (überall verfügbaren) Arrays $_GET oder $_POST. Das
obige Beispiel muß also ab PHP 4.2 lauten:

PHP:
<input type="text" name="meineVariable">

PHP:
Eingegeben wurde: " . $_GET['meineVariable']; 
// oder 
Eingegeben wurde: " . $_POST['meineVariable'];

Ob die Werte in $_GET oder $_POST landen, entscheidet die gewählte Übertragungsme-
thode (das method-Attribut im form-Tag). Die Übertragung von Werten per URL, z. B.:

PHP:
meinSkript.php?variable=wert

ist die GET-Methode; die Werte landen also in $_GET.

Es ist möglich, auch ab PHP 4.2 durch das Ändern eines Eintrags in der Konfigurationsda-
tei php.ini ('REGISTER_GLOBALS' von OFF auf ON) das alte Verhalten wieder herzustel-
len; davon kann ich aber nur abraten, weil das die oben erwähnten Sicherheitsrisiken
wieder eröffnet.
 
Frage: Wenn ich versuche, ein per mysql_query() geholtes result set weiterzu-
verarbeiten, kommt die Fehlermeldung:

supplied argument is not a valid MySQL result resource in ...

Woran liegt das, und wie bekomme ich es weg?


Antwort: rsache des Fehlers ist, daß mysql_query() anstelle eines result sets
einfach 'false' zurückgeliefert hat. Wenn du versuchst, das weiter auszuwerten (mit
mysql_fetch_array(), mysql_num_rows(), etc.), kommt diese Fehlermeldung.

mysql_query() liefert dann 'false' zurück, wenn MySQL mit deiner Anfrage irgendein
Problem hatte. Das kann ein falsch geschriebener Feldname sein, ein Fehler in der SQL-
Syntax, fehlende Rechte für die gewünschte Operation, u.s.w. Was die Datenbank zu
meckern hatte, erfahrt ihr mit der Funktion mysql_error()

PHP:
$result = mysql_query("SELECT FROM tabelle;"); // eine syntaktisch falsche Anfrage 
echo "Datenbank-Fehler: " . mysql_error(); // den letzten in der Datenbank aufgetretenen Fehler ausgeben

Generell liefert mysql_query nur bei den SQL-Statements SELECT,SHOW,EXPLAIN und
DESCRIBE ein result set zurück. Bei allen anderen wird nur 'true' oder 'false' geliefert, so
dass das oben geschilderte Problem ebenfalls auftreten kann.
 
Frage: Ich bekomme eine Fehlermeldung, in der etwas von

headers already sent (output started at ...) in ...

steht. Woran liegt das, und wie kann ich es beheben?


Antwort: Dieses Problem kann in Situationen auftreten, in denen du etwas zu den
HTTP-Headern hinzufügen willst, beispielsweise beim Umgang mit Sessions, Cookies oder
der Header-Funktion. Die HTTP-Header sind bestimmte Felder am Anfang der Übertra-
gung deiner Seite vom Server zum Browser.

Diese Übertragung startet jedoch, sobald die erste Ausgabe erfolgt. Das bedeutet, wenn
der Parser auf irgendetwas stößt, das auch auf der endgültigen Seite erscheinen wird,
gehen die Header auf die Reise, und du kannst ihnen natürlich nichts mehr hinzufügen.
Wenn du es trotzdem versuchst, kommt eine entsprechende Fehlermeldung.

Als "Ausgaben" in diesem Sinn gelten nicht nur Aufrufe von echo oder print, sondern
beispielsweise auch Situationen wie diese

PHP:
<html> 
<head></head> 

<body> 
<?php 
// das alles oben wird ausgegeben, d. h. hier kann nichts mehr an den Headern gemacht werden 
...

Zum Beheben gibt es einmal die Möglichkeit, die gewünschten Header-Manipulationen
vor alle Ausgaben zu verlagern. Praktischerweise sagt dir die Fehlermeldung mit 'output
startet at ...', wo das erstemal etwas ausgegeben wird. Zum anderen kannst du mit der
Funktion ob_start() die Ausgaben puffern lassen, den Header setzen und danach mit der
Funktion ob_end_flush() den Pufferinhalt ausgeben lassen.
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten