mysql_fetch_array(): Error Code ersetzen mit eigenen Error

xMiNe

Mitglied
Hallo mal wieder,
Wie kann ich den Error Code von mysql_fetch_array(): in mein eigenen error Code ändern.

Statt: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/... on line xx

Error bitte benachtigen sie den Webmaster.

wie kann ich das machen mit welchen Code?

mysql_fetch_array Da habe ich schon geguckt dort gibtes das auch net

Danke
 
Zuletzt bearbeitet:
Dein System sollte dich über Fehler benachrichtigen, nicht der Benutzer. Solche Fehlermeldungen sind auch nicht für die Benutzer gedacht, sondern für den Entwickler. Im Gegenteil sogar: diese Fehlermeldungen können kritische Informationen enthalten, die zum Auffinden und Ausnutzen von Sicherheitslücken missbraucht werden können.

PHP besitzt die set_error_handler()-Funktion, mit der ein eigene Fehlerbehandlungsfunktion angegeben kann, die beispielsweise bei bestimmten Fehlerlevel bestimmte Aktionen ausführen kann. Einige Fehlerlevel sind davon allerdings ausgeschlossen.
 
Hallo!

Also den Besucher dumm sterben zu lassen, halte ich nicht grundsätzlich für eine gute Idee.
Andernfalls drückt er evtl. minutenlang F5 und ist am fluchen warum "die schei* Seite" nichts (bzw. nicht alles) anzeigt.
Im schlimmsten Fall verlässt der Besucher dann die Seite und lässt sich nie wieder blicken.
Der Besucher sollte also schon darüber informiert werden, wenn ein Fehler auftritt.
Er sollte halt nur nicht wissen welcher Fehler aufgetreten ist.
Daher würde ich die MySQL Fehlermeldungen "unterdrücken".
Statt dessen würde ich dem Besucher ein plumpes "Die Seite kann zur Zeit nicht korrekt angezeigt werden, bitte versuchen Sie es später nochmal" aufs Auge drücken.

Darauf zu vertrauen dass andere Dich auf Fehler aufmerksamm machen, würde ich nicht.
Lass lieber das Script prüfen ob Fehler auftreten und dann ggf. z.b. die Mail-Funktionen von PHP zum verschicken eines Fehlerberichts nutzen.

Eigene Fehlermeldungen kannst Du mit die() realisieren.
Schaue Dir dazu einfach ein paar Scripte/Codeschnippsel (z.b. hier im Forum) an und suche dort nach "or die".

Gruss Dr Dau
 
Jo den "Die" befehl habe ich vorhin angeschaut.
Bin zu müde den jetzt nochmal zu schreiben mache ich Morgen.
Deswegen habe ich das Thema geöffnet, damit der Benutzer nicht doof darsteht.
Ich hätte das warscheinlich auch so gemacht das wenn ein Benuzer ein Error hat das mir ne Mail geschickt wird (ist dann besser :P).

Zum Beispiel: Ein Benuzer ist auf meiner Seite unter Team. Dort wird die Seite mit id abgerufen. Wenn aber keine id darsteht kommt dan der Error.

Naja wenn ich den Code morgen hinbekommen habe schreibe ich morgen nochmal :D

Gute Nacht,
 
Zuletzt bearbeitet:
Wenn aber keine id darsteht kommt dan der Error.
Dann machst Du schonmal grundsätzlich etwas verkehrt. ;)
Prüfe ob die Variable für die ID überhaupt übergeben wurde.
Anschliessend prüfst Du ob die Variable auch gefüllt ist und ob dessen Wert denn auch gültig ist (also ob es eine Zahl ist).
Erst dann machst Du die Datenbankabfrage.

Es würde dann zwar noch die Möglichkeit geben eine ID anzugeben die zwar gültig aber nicht in der Datenbank vorhanden ist, aber dieses kannst Du dann ja bei der Datenbankabfrage feststellen und entsprechend handeln.
 
Der Besucher sollte also schon darüber informiert werden, wenn ein Fehler auftritt.
Das habe ich auch nicht ausgeschlossen. Nur sagt dem Durchschnittsbenutzern die PHP-eigenen Fehlermeldungen auch nicht mehr als dass ein Fehler aufgetreten ist. Versierten Benutzern können sie aber schon wieder zu viel verraten, weswegen grundsätzlich keine Systemfehlermeldungen direkt ausgegeben werden sollten. Stattdessen sollten individuelle Fehlermeldungen ausgegeben werden, die nicht mehr Informationen als nötig preisgeben.
 
PHP:
<?php
if($_GET['action']=="sql") {

$id = $_GET['id'];
mysql_connect("localhost","root","") or die
("Keine Verbindung moeglich");
mysql_select_db("db") or die
("Die Datenbank existiert nicht");

$db2 = mysql_query("SELECT * FROM Seite WHERE `id` = $id  ORDER by id DESC");
while($db3 = mysql_fetch_array($db2)){ echo $db3[seite]; }
}
?>

Ich habe da kein fehler drinnen.

Die Seite wird so aufgerufen index.php?action=sql&id=1 # da kommt dann die Zahl hin

Das ist mein Code was ist falsch?
 
PHP:
if( isset($_GET['action']) && $_GET['action'] == "sql" ) {
	if( !isset($_GET['id']) || !validateInt($_GET['id']) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request');
		die('ID-Argument fehlt oder ist ungültig!');
	}
	mysql_connect("localhost","root","")
		or die("Keine Verbindung zum Datenbankserver möglich!");
	mysql_select_db("db")
		or die("Die Datenbank existiert nicht!");
	$result = mysql_query("SELECT * FROM Seite WHERE `id` = ".$_GET['id']." ORDER by id DESC")
		or die("Die Datenbankabfrage schlug fehl!");
	while( $row = mysql_fetch_assoc($result) ) {
		echo $row['seite'];
	}
}
Die Hilfsfunktion sieht wie folgt aus:
PHP:
function validateInt( &$var, $strict=false )
{
	$val = $var;
	if( $strict ) {
		return $val === ($var=(int)$var);
	} else {
		return $val == ($var=(int)$var);
	}
}
 
Zurück