Datenbankwechsel-Problem !

  • Zitat

    Also wenn das mit PHP 5.2 läuft und 5.4 nicht, dann würde ich mir hier als erstes mal das error.log ansehen


    gibt es nicht


    Zitat

    Ansonsten versuche mal die Changelogs von 5.3 und 5.4 durchzugehen.

    PHP: Backward Incompatible Changes 5.3 - Manual
    PHP: Backward Incompatible Changes 5.4 - Manual

    Bin ich bei, ohne es aber wirklich zu 100% zu verstehen.
    Das Formular läd sich mit "submit" einfach leer neu - bin dabei es einzugrenzen, wird wohl heute ne lange Nacht werden,

    Frei nach Dieter Nuhr
    Das Internet ist zum Lebensraum der Dauerbeleidigten geworden, die immer einen Grund finden, anderen irgendetwas vorzuwerfen, um sich selbst moralisch zu erhöhen.

  • Zitat

    Das Formular läd sich mit "submit" einfach leer neu - bin dabei es einzugrenzen, wird wohl heute ne lange Nacht werden,


    Poste doch mal das Formular... Hört sich für mich nun fast so in den Bereich Register_Globals an oder so. Oder meinst Du mit "leer neu" eine weiße Seite?

    Edit: Deprecated seit 5.3...

    register_globals (This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.)
    register_long_arrays (This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Zitat von Alex07;40964

    hmm wenns bei dir kein error log gibt, frag mal den hoster, der hat sicherlich eins, bzw kann es schnell einrichten


    Jo, Alex hab ich, "ham wa nicht" war die Antwort, nach dem der Support erst nachfragen musste - Ist ein Uraltpaket bei 1&! - vermutlich so was wie beim Fridolin.

    Zitat

    Hört sich für mich nun fast so in den Bereich Register_Globals an oder so.

    nein kommr kein"register" im Quelltext vor - ich vermute es entweder bei :

    PHP
    mysql_connect($host, $user, $pass) ;
    mysql_select_db($dbase) or die ("MySQL-Error");
    mysql_query($sql);
    $sql = "SELECT ********FROM ".$pre."******* ORDER BY ******* DESC";
    $result = mysql_query($sql);
    $zeile = mysql_fetch_row($result);
    $******* = $zeile[0];

    Wobei ich das mysql_connect schon gegen mysql_select_db ausgetauscht hatte, - das Problem ist, dass ich keine Fehlermeldung ausgeworfen bekomme und das script nicht mal eben 2 Stunden abschalten kann.
    Ich hab mir jetzt erst mal eine vergleichbare Plattform geschaffen auf der ich probieren kann.

    Frei nach Dieter Nuhr
    Das Internet ist zum Lebensraum der Dauerbeleidigten geworden, die immer einen Grund finden, anderen irgendetwas vorzuwerfen, um sich selbst moralisch zu erhöhen.

  • Fehlermeldungen anzeigen. Ganz oben ins Script:

    Code
    error_reporting(E_ALL);   // in PHP 4.x E_ALL
    ini_set('error_reporting', E_ALL);
    ini_set("display_errors", "1");
    ini_set("log_errors", "0");

    Connent und Select_DB muss beides vorhanden sein. Das eine verbindet ja nur mit dem Server, das andere wählt die Datenbank aus.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Wobei, ich sehe da was... Ist der Code so, wie Du ihn geschrieben hast?

    In Zeile 3 ist ein "mysql_query($sql);", da wird also eine Query abgesetzt. Nur, eine Query, also ein $sql ist vorher gar nicht zu sehen. Wenn da nichts anderes vorher kommt, also $sql nicht vorher belegt wird, dann ist die Zeile überflüssig.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Ich hab Dir mal ne mail geschickt und rufe Dich gegen Abend mal an - Das script will ich hier nicht offenlegen.

    Frei nach Dieter Nuhr
    Das Internet ist zum Lebensraum der Dauerbeleidigten geworden, die immer einen Grund finden, anderen irgendetwas vorzuwerfen, um sich selbst moralisch zu erhöhen.

  • So, ohne das Script nun gesehen zu haben, war nur auf der Testumgebung.... Ganz oben kommen schon Warnungen...

    Code
    Notice: Undefined variable: HTTP_POST_VARS in


    Genau dieses HTTP_POST_VARS hängt mit register_long_arrays zusammen.
    *** Link veraltet ***

    HTTP_POST_VARS sollte schon lange nicht mehr verwendet werden und wurde nun gänzlich aus dem Core entfernt.
    Das Ding heißt nun also nicht mehr HTTP_POST_VARS['irgendwas'], sondern $_POST['irgendwas'].

    Selbiges auch mit möglichen HTTP_GET_VARS, die heißen einfach $_GET oder HTTP_SERVER_VARS, welche nun einfach $_SERVER sind.

    Weiter in der Zeile 2 und 3 der Fehlermeldungen:

    Code
    Notice: Undefined index: name


    Du greifst da also irgendwo auf einen Index "name" zu, den es nicht gibt. Das kann ein größeres Problem sein, aber auch ein Schönheitsfehler.

    Zeile 1 ist jedenfalls kritisch, denn die gesendeten Daten per Form sind im $HTTP_POST_VARS nicht mehr zu finden, sondern im $_POST. Somit funktioniert auch der Insert nicht, da die Formularwerte nicht verfügbar sind und der Rest eben auch, da alles irgendwie auf HTTP_POST_VARS zugreift.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Lösung:

    An allen Stellen im Code die entsprechenden Stellen ersetzen.
    $HTTP_POST_VARS -> $_POST
    $HTTP_GET_VARS -> $_GET

    Und das mit dem "vor Zeile 320 liegen". Der Fehler liegt überall, siehe oben.

    Zeile 328 prüft ja, ob die Variable $HTTP_POST_VARS["formular"] vorhanden ist, welche als Hidden-Feld beim Submit übertragen wird. Wenn die nicht vorhanden ist, wird das Formular wieder angezeigt. Nur, wie oben geschrieben, $HTTP_POST_VARS gibt es nicht mehr und es kommt somit immer das Formular (isset liefert immer false). Daher auch keine Prüfung, ob die Werte vorhanden sind und stimmen, denn die "Sende-Prüfung" kommt ja zuvor ;)

    Code
    if(!isset($HTTP_POST_VARS["formular"]))
            showform();

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Danke, bin Dir (mal wieder) was schuldig. Die ersten Fehlermeldungen in der Testumgebung sind "logisch" da das Formular ja noch nicht ausgefüllt ist und sich die fehlenden Variablen ergeben. Bin jetzt erst mal für eine Weile afk.

    Frei nach Dieter Nuhr
    Das Internet ist zum Lebensraum der Dauerbeleidigten geworden, die immer einen Grund finden, anderen irgendetwas vorzuwerfen, um sich selbst moralisch zu erhöhen.