Stoppt die Vorratsdatenspeicherung! Jetzt klicken &handeln! Willst du auch an der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:

Navigation:

Besucherzähler:

  • Derzeit online: 2
  • Insgesamt: 47457

Spamfresser:

  • Spams: 11679

Top10 der PHP-Fragen

Kategorie PHP & MySQL

Datum: 02.04.2008, 15:24 - Autor: Manko10

Frage #1:

F: "Hilfe, ich bekomme immer die Fehlermeldung:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\datei.php on line xyz

Warum?"

A: Dieses Problem tritt immer auf, wenn im Query, den du mit mysql_query() gesendet hast, etwas schiefgelaufen ist. Um herauszufinden, was, benutze nach mysql_query() bitte
PHP-Code:
1:
echo mysql_error();
MySQL ist für tolle Fehlermeldungen zwar nicht gerade berühmt, aber es reicht meist, um den Fehler zu finden.
Es kann auch hilfreich sein, den gesamten Query mit eingesetzten Variablen vorher einmal auszugeben, um evtl. aufgetretene Syntax-Fehler sofort zu erkennen.

Hinweis: Wenn du die MySQLi-Schnittstelle benutzt, wird mysql_error() kein Ergebnis bringen. Nimm an dieser Stelle $dein_mysqli_objekt->error (OOP-Stil) oder mysqli_error($verbindungskennung) (Prozedural-Stil). Achte aber darauf, dass es sich bei der OOP-Variante um eine Eigenschaft, keine Methode handelt!

Frage #2

F: "Weshalb sagt PHP mir immer

Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\datei.php:xyz) in C:\Programme\xampp\htdocs\datei.php on line xyz

, wenn ich die Funktion header() benutze?"

A: Das kann sogar mehrere Gründe haben. Der häufigste ist der, dass du vor einem header()-, setcookie()- oder session_start()-Aufruf schon etwas ausgegeben hast (und sei es nur ein Leerzeichen). Prüfe also, ob du vorher schon irgendwelche echos, prints o.ä. geschrieben hast und ob vor sich dem <?php-Tag vielleicht noch Leerzeichen, Zeilenumbrüche oder gar HTML-Code befinden. Wenn ja, dann weg damit! :)
Es darf vorher keinerlei Ausgabe erfolgen.
Der zweite Grund könnte der sein, dass du als Zeichenkodierung für die Datei UTF-8 benutzt und sie mit BOM gespeichert hast. PHP bis zur Version 5 kommt mit dem BOM nämlich nicht klar. Das soll zwar in PHP 6 behoben werden, bis dahin musst du UTF-8 aber noch ohne BOM speichern.

Frage #3:

F: "Der User kann in ein Formular einen Text eingeben, der in der Datenbank gespeichert wird. Wenn ich ihn aber wieder ausgeben will, sind alle Zeilenumbrüche weg."
A: Bitte denke daran, was HTML-Browser mit normalen Zeilenumbrüchen machen: sie behandeln sie wie ein Leerzeichen.
Um Die Zeilenumbrüche durch ein <br /> zu ergänzen, gibt es die Funktion nl2br(). Da diese jedoch nur die Zeilenumbrüche \n (Linux) und \r\n (Windows) erkennt und nicht \r (Mac OS), solltest du das ganze ergänzen:
PHP-Code:
1:
$text str_replace("\r""<br />\r"nl2br($text));

Frage #4:

F: "PHP erkennt doch Variablen in Strings... Warum denn bei mir nicht?"
A: Ein häufig gemachter Fehler: im Gegensatz zu anderen Sprachen wie JavaScript, gibt es in PHP einen Unterschied zwischen Singlequotes ('...') und Doublequotes ("..."). Die Erkennung von Variablen innerhalb von Strings (Variablen-Interpolation) Funktioniert nur in Doublequotes, NICHT IN SINGLEQUOTES! Das gleiche gilt für die Verarbeitung von Escape-Sequenzen wie \n, \r, \r\n, \t usw.
Werden jedoch Singlequotes benutzt, werden Variablen wie Escape-Sequenzen einfach ohne Verarbeitung ausgegeben.

Frage #5:

F: "Mein Skript funktioniert nicht, ich bekomme aber auch keine Fehlermeldung angezeigt."
A: Je nach Konfiguration zeigt PHP nicht automatisch alle Fehlermeldungen an. Um jedoch während der Entwicklung, alle Fehler anzuzeigen, schreibe an den Anfang des Skripts
PHP-Code:
1:
error_reporting(E_ALL);
Sollte dies nichts bringen, so kann es sein, dass dein Hoster die Ausgabe von Fehlern unterdrückt hat. In diesem Falle kannst du folgendes versuchen:
PHP-Code:
1:
2:
ini_set('display_errors'1);
error_reporting(E_ALL);
Im Regelfall sollten jetzt die Fehler angezeigt werden.
Achtung: aus Sicherheitsgründen solltest du error_reporting() in der Produktivumgebung hingegen auf 0 setzen!

Frage #6:

F: "Wie kann ich Variablen mit JavaScript an PHP übergeben?"
A: Hierbei musst du bedenken, dass JavaScript clientseitig läuft und PHP serverseitig. Es besteht also keine direkte Möglichkeit, Variablen auszutauschen.
Die einfachste Möglichkeit ist die, mit dem location-Objekt bestimmte GET-Parameter zu übergeben:
Code:
1:
location.href = 'http://www.openwebboard.org/index.php?x=y';
Da hierbei jedoch ein Page-Reload nötig ist, wird das selten die vorzuziehende Methode sein.
Um Daten ohne Page-Reload austauschen zu können, gibt es das (derzeit sehr in Mode geratene) AJAX. AJAX heißt Asynchronous JavaScript and XML, also asynchrones JavaScript mit XML. Wer nichts von XML versteht, der sei beruhigt: es geht auch mit normalem Text.
Da das Thema jedoch zu umfangreich ist, um es hier erklären zu können, verweise ich an dieser Stelle auf Google. Ich denke, es wird demnächst aber auch ein Tutorial hier auf www.openwebboard.org zu dem Thema geben.

Frage #7:

F: "Ich bekomme immer die Fehlermeldung

Fatal error: Class 'mysqli' not found in C:\Programme\xampp\htdocs\datei.php on line xyz

, wenn ich die MySQLi-Schnittstelle benutzen möchte."

A: Das kann gut sein. Es ist dann ein Zeichen dafür, dass diese nicht geladen wurde. Um zu sehen, was geladen ist, benutze dieses kurze Skript:
PHP-Code:
1:
php_info();
Wenn du die Möglichkeit hast, die php.ini anzupassen, musst du das Semikolon vor folgender Zeile entfernen, um MySQLi nutzen zu können:
Code:
1:
;extension=php_mysqli.dll
Danach steht ein Neustart des Apache-Servers an.
Ansonsten bleibt dir nichts anderes übrig, als deinen Hoster zu fragen, ob es möglich wäre, dass...

Frage #8:

F: "Ich benutze die GDLib, um Grafiken mit PHP zu erstellen, aber die sind irgendwie komisch."
A: Auch ein sehr verbreitetes Problem. Es liegt wohl an den vielen veralteten Tutorials, die es im Netz zur GDLib gibt. Ich könnte wetten, dass du zum Erstellen der Grafik die Funktion imagecreate() genommen hast. Benutze stattdessen imagecreatetruecolor() und es sollte gehen (siehe auch mein Tutorial dazu).

Frage #9:

F: "Die PDFLib funktioniert nicht richtig oder macht nur Mist."
A: Ich kenne das Problem. Zudem hat die PDFLib den Nachteil, dass sie nicht überall installiert ist. Benutze stattdessen FPDF, das funktioniert und läuft ohne Installation. ;)

Frage #10:

F: "Wie kann ich mit PHP Daten von einem anderen Server abfragen?"
A: Für solche Sachen steht in PHP die Funktion fsockopen() zur Verfügung. Im folgenden ein Anwendungsbeispiel. Weiteres entnimm bitte dem PHP-Manual.
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
<?php
// URL verarbeiten
$url parse_url("http://www.example.com/index.html");
if (!isset(
$url['port'])) {
    
$url['port'] = 80;
}
$url['query'] =  '';
$url['protocol'] = $url['scheme'].'://';
$eol "\r\n";

// Header zusammenstellen (POST-Verbindung)
$headers =  "POST ".$url['protocol'].$url['host'].$url['path']." HTTP/1.0".$eol.
            
"Host: ".$url['host'].$eol.
            
"Referer: ".$url['protocol'].$url['host'].$url['path'].$eol.
            
"Content-Type: application/x-www-form-urlencoded".$eol.
            
"Content-Length: ".strlen($url['query']).$eol.$eol.$url['query'];

// Verbindung öffnen
$file = @fsockopen($url['host'], $url['port'], $errno$errstr30);

if (
$file) {
    
// aus Verbindung lesen
    
fputs($file$headers);
    
$result '';
    while (!
feof($file)) {
        
$result .= fgets($file500);
    }
    
fclose($file);
    
    
// prüfen, ob die Verbindung erfolgreich war
    
if (!stristr($result'200 OK')) {
        exit(
'Connection failed!');
    } else {
        
// HTTP-Header am Anfang des Strings entfernen und Ergebnis ausgeben
        
echo preg_replace('#^.*\r\n\r\n#s'''$result);
    }
}
?>

Seiten: (1/1) 1


War dieses Tutorial hilfreich?

Kommentar schreiben: