mysql_fetch_array FEHLER

Citral

Grünschnabel
Hi Leute!

Bin am verzweifeln - entweder zu dumm oder ich seh den Wald vor lauter Bäumen nicht mehr.

Also: Ich mach eine stinknormale Datenbankanfrage wie folgt:

PHP:
include("dbconnect.php");
     $content=@mysql_query("SELECT ID, button, text, header, pic, logo FROM content WHERE ID=$id");
     if (!$content) {
     exit();    }
     while ($con=@mysql_fetch_array($content)) {

     $button = ($con["button"]);
     $text = ($con["text"]);
     $header = ($con["header"]);
     $pic = ($con["pic"]);
     $logo = ($con["logo"]);
     $id = ($con["ID"]);
		 }

So. In diesem Fall ist es aber so, daß fetch_array nicht wirklich angebracht ist, da sowieso jeweils nur 1 Datensatz pro Seite ausgegeben wird.

Hatte das Problem auf dem Space, auf dem die Seite vorher (Demo-Stadium) lag, nicht. Jetzt bin ich mit der Seite umgezogen - und da dürfte anscheinend eine andere PHP-Version installiert sein (obwohl gleicher Provider).

Auf alle Fälle bekomm ich jetzt die Fehlermeldung "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/td000001/www/home/tdm/dbconnect.php on line 7".

Frage: Muss mein Provider irgendwas umstellen oder muss ich an meiner Anfrage irgendwas ändern?
Sollte ICH was ändern müssen - WAS? Hab bis jetzt nur mit mysql_fetch_array gearbeitet und auch all meine Dokumentationen beziehen sich darauf. Es ist mir ja klar, daß bei nur EINEM Datensatz danach nix mehr zu verarbeiten ist, aber wieso checkt das die eine PHP-Version und die andere nicht?

Bitte um Support bzw. Info.

Danke. LG, Citral
 
versuche es mal so:

PHP:
include("dbconnect.php"); 
     $content=mysql_query("SELECT ID, button, text, header, pic, logo FROM content WHERE ID=$id"); 
     if (!$content) { 
     exit();    } 
     while ($con=mysql_fetch_array($content)) { 

     $button = ($con["button"]); 
     $text = ($con["text"]); 
     $header = ($con["header"]); 
     $pic = ($con["pic"]); 
     $logo = ($con["logo"]); 
     $id = ($con["ID"]); 
    }

Ich hoffe, dass Dir das weiterhilft - und dass es funktioniert! *thumbsup*

Ach so - anstatt mysql_fetch_array(); könntest Du ja auch mysql_fetch_row(); benutzen, nur macht das beim parsen kaum einen Unterschied, wie ich noch heute gelesen habe.
mysql_fetch_array(); hält mehr Informations-Abfragen bereit und ist ein neuerer Befehl.

Mal ne Frage meinerseits......Was macht denn der Klammeraffe "@" vor dem mysql_fetch_array();-Befehl?
 
aber um diese dennoch abfragen zu können, falls du z.B. einen Fehler in deinem mysql_query Statement hast, würde ich dir vor dem mysql_fetch_wasauchimmer folgendes empfehlen:

PHP:
( ! is_ressource($content) ) ? ( die("mySQL-Fehler: ".mysql_error()) ) : NULL;
 
Danke für eure Rückmeldungen - das eigentliche Problem lag aber bei meinem Provider.

Falls das mal wer braucht - in der php.ini muss folgendes stehen:

register_globals = on

Ist standardmäßig aus Sicherheitsgründen auf "off" gestellt.

LG, Citral
 
Original geschrieben von Citral
Danke für eure Rückmeldungen - das eigentliche Problem lag aber bei meinem Provider.

Falls das mal wer braucht - in der php.ini muss folgendes stehen:

register_globals = on

Ist standardmäßig aus Sicherheitsgründen auf "off" gestellt.

LG, Citral
Hilfe, mir stehen die Haare zu Berge.

Da lag das Problem weniger beim Provider als bei dir, weil du Code produziert hast der seit PHP 4.2.0 nicht mehr dem Status Quo in Sachen Sicherheit und Standard nachkommt. :)

Also denk mal drüber nach, ob du nicht lieber dein Script umbaust und den Hoster register_globals wieder auf off setzen lässt. ;)

Dass der Hoster das überhaupt auf on gestellt hat, versteh ich auch irgendwie nicht :rolleyes:
 
Ok, das hab ich verdient. Hab mich jetzt ein wenig über register_globals informiert - sorry für meine Falschmeldung.

Frage: Wie kann ich meine Datenbankanfrage abändern, daß sie unter register_globals off funktioniert. Sind das grossräumige Änderungen oder nur eine Kleinigkeit?

Das Problem ist, daß in meinem PHP-"Lehrbuch" mit globals on gearbeitet wurde. Dann hab ich meinen lokalen Server so eingerichtet und natürlich keinerlei Fehlermeldungen bei meinen Abfragen erhalten...

Shit. Vielleicht bist du ja so nett und bringst mich auf die richtige Spur - wär dir sehr dankbar.

LG, Citral
 
Ok Mysql Abfragen haben nix mit der Register Globals einstellung zu tun

Die Fehlermeldung lässt darauf schliessen das keine Daten bei deinem Query erzeugt werden.

Fehlersuche:
Mach hinter jeden Mysql Befehl eine Errorausgabe (auch in der dbconnect.php)

Ich vermute mal das dort schon ein Fehler autritt nach dem Motto keine Datenbank oder so

statt den:
$content=mysql_query("SELECT ID, button, text, header, pic, logo FROM content WHERE ID=$id");
if (!$content) {
exit(); }
das:
$content=mysql_query("SELECT ID, button, text, header, pic, logo FROM content WHERE ID='$id'")
or die(mysql_error());
 
Geschafft! Also, falls jemand mal das selbe Prob hat > hier die (bzw. meine) Lösung. Ist sicher noch verbesserungswürdig, aber es workt.

PHP:
include 'dbconnect.php'; 
     $id=$_REQUEST['id'];
     $PHP_SELF = $_SERVER['PHP_SELF'];
     $content="SELECT ID, button, text, header, pic, logo FROM content WHERE ID=$id";
     $cont = mysql_query($content) OR die(mysql_error());
	 while ($con = mysql_fetch_array($cont)) {
     $button = ($con["button"]);
     $text = ($con["text"]);
     $header = ($con["header"]);
	 $pic = ($con["pic"]);
	 $logo = ($con["logo"]);
	 $text = preg_replace( "/(?<!<a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i", "<a href=\"\\0\" target='_blank'>\\0 </a>", $text); 
     $text = stripslashes($text);
	 $text = nl2br($text);
	 }

LG, Citral
 
Zurück