Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Mysteriöser Fehler (https://www.delphipraxis.net/123141-%5Bphp%5D-mysterioeser-fehler.html)

DenSchub 28. Okt 2008 11:29


[PHP] Mysteriöser Fehler
 
Hallo.

Ich habe diese PHP-Funktion.

Auszug mysql.fnc.php (Zeile 15-21)
function load_article($id)
{
$result = mysql_query("SELECT ID, short_title, title, content FROM articles WHERE ID = " . $id);
$result = mysql_fetch_assoc($result);
return $result;
}


Das eine mal rufe ich sie in dateia.php auf, einfach mit:
Code:
$article = load_article("2");
Da geht alles einwandfrei.

In einer anderen Datei mache ich exakt dasselbe, dann kommt aber der Fehler:
Code:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\server\htdocs\dsCMS\functions\mysql.fnc.php on line 18
:wall: Was soll das?

PS: Zeile 18 is die Funktion oben, dort beim mysql_fetch_assoc

Grüße, Dennis

[Edit]
Hier mal die ganze Aufruf-Datei (mit fehler). Vielleicht seht ihr mehr als ich..
Code:
/* Include required files */
require_once '../includes/confic.inc.php';
require_once '../functions/mysql.fnc.php';
require_once '../class/template.class.php';
include_once './fckeditor/fckeditor.php';

mysql_connect(CONFIG_MYSQL_HOST, CONFIG_MYSQL_USERNAME, CONFIG_MYSQL_PASSWORD);

$getid = htmlspecialchars($_GET['id']);

$current_article = load_article($getid);
PS: $getid ist 2
[/edit]

Xong 28. Okt 2008 11:41

Re: [PHP] Mysteriöser Fehler
 
Hi!
Deine Fehlerbehandlung ist grauenhaft.
Wenn die SQL-Abfrage keine Datensätze zurückliefert, enthält $result den boolschen Wert "false". Auf den musst du prüfen, da mysql_fetch_assoc() sonst eben jene Fehlermeldung provoziert.
Desweiteren sollte man ab PHP 5 mit der MySQLi-Klasse arbeiten. Die mysql-Funktionen sind veraltet.

LG,
Xong

Die Muhkuh 28. Okt 2008 11:48

Re: [PHP] Mysteriöser Fehler
 
Und man sollte id noch auf int casten:

Code:
 mysql_query("SELECT ID, short_title, title, content FROM articles WHERE ID = " . intval($id));
Sicher ist sicher.

DenSchub 28. Okt 2008 11:50

Re: [PHP] Mysteriöser Fehler
 
Zitat:

Deine Fehlerbehandlung ist grauenhaft.
Jo, hier ist das aber auch eher unwichtig.
Nur warum bekommt er keine Datensätze wenn alles stimmt?
Der Parameter wird übergeben, die ID ist vorhanden und ja beim anderen Aufruf geht ja alles.

Zitat:

Desweiteren sollte man ab PHP 5 mit der MySQLi-Klasse arbeiten.
Schön und gut, wenn das Skript nicht auf PHP4 laufen müsste...

@manu: Danke, das hab ich verdrängt.

Xong 28. Okt 2008 11:59

Re: [PHP] Mysteriöser Fehler
 
Ja, richtig! =)

Generell: Bei einem Kontextwechsel (in diesem Fall PHP->MySQL) sind Daten generell als ungefährlich zu maskieren.
Für SQL-Abfragen ist dafür die Methode real_escape_string() zuständig.
Diese Maskierung kann entfallen, wenn man z. B. explizit auf einen Integer castet.

Aber nutze von außen kommende Daten nie (N-I-E) ohne Überprüfung in kritischen[1] Codesegmenten.

LG,
Xong

[1] Mit kritisch ist hier alle gemeint. Dann machst du auch nichts falsch. ^^

DenSchub 28. Okt 2008 12:03

Re: [PHP] Mysteriöser Fehler
 
:roll:

Fehler gefunden:
In der Connect-Funktion wähle ich schon die Datenbank aus, das geht auch immer, bis auf die Stelle. Wenn ich die DB nochmal extra wähle, geht alles. grml...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz