Nach Server update nur noch php Fehler

  • Bplaced hat umgebaut .Auf https und man kann jetzt die php Version aussuchen . Habe 7.1 ausgewählt ( Vorher wahr 5.6 ) und nun geht kaum noch ein Script.

    Habe mitlerweile fast alles beheben können ,nur bei ein Fehler weiß ich nicht was los ist bzw wie man es beheben kann.


    Es geht um diese Zeile

    Code
    if($checkentry2 < 1 && !$errorC && $spam_schutz == 1 OR $checkentry2 < 1 && $spam_schutz == 0){
    bla bla
    }

    und bekomme den Fehler

    Code
    Notice: Object of class mysqli_result could not be converted to int in /users/sebastian1012/www/homepagebasti1012/shoutbox/shout.php on line 358

    Irgendwie passt das doch nicht zusammen oder ?

    Das bla bla habe ich auch schon auskomentiert und der Fehler kommt trotzdem,weil ich erst dachte es könnte dadran liegen weil da mysqli Daten drinne sind

  • Das Problem ist, dass du anscheinend ein Objekt der Klasse mysqli_result mit einem Integer vergleichst.


    Die Frage ist für uns natürlich, um welche Variable es sich handelt. Ein wenig mehr Code wäre hilfreich.


    Es wird auf jeden Fall an der Variable $checkentry2 oder an $spam_schutz liegen.


    Und warum zum Teufel schreibst du "bla bla" in deinen Code? :D


    Das ist gleich der nächste Fehler.

  • JR Cologne

    Ja die Info hat mir schon gereicht ,ich konnte den Fehler jetzt beheben.

    Komische sache das es bei php5.6 noch ging und php 7 macht das nicht mehr mit. Nagut das werde ich wohl nie verstehen.


    Das bla bla habe ich da reingeschrieben weil der Code da zwischen wohl nicht zum Fehler beitrug und auch etwas übersichlich und lang gewesen wäre hier zu posten.

    Aber dank dir

  • Nagut der vollständigkeit zur liebe

    Es sah so aus

    Code
    $spam_schutz=0;
    
    $checkentry ="SELECT * FROM ".$mysql_table['shoutbox']." WHERE uid='".mysqli_real_escape_string($db,$_POST['uid'])."' OR time>='".$aktime."' AND ip='".mysqli_real_escape_string($db,$_SERVER['REMOTE_ADDR'])."'";
      
    
                 $checkentry2 = mysqli_query($db, $checkentry)  or die ("MySQL-Error: " . mysqli_error($mysqli));
    
        if($checkentry2 < 1 && !$errorC && $spam_schutz == 1 OR $checkentry2 < 1 && $spam_schutz == 0){
    bla blub
            }

    Unter php konnte man auch noch echo $checkentry2; schreiben da kam ja ne 1 raus oder so.Jetzt kommt da gleich nee Fehlermeldung das man es nicht in einen String Convertieren kann.

    Wahrscheinlich geht deswegen die if abfrage nicht .

    Kann man $checkentry2 irgendwie in ein String umwandeln und dann die if abfrage stellen ?


    vorher wahr es noch @mysql (vorm update)

  • Was liefert den mysqli_query den FALSE wenn es nicht klappt? Mein Englisch ist nicht gut.

    Aber wenn false oder true zurück kommen sollte verstehe ich ich aber die if abfrage nicht . wie kann false den kleiner als 1 sein ?

    Also muß doch eine Zahl geliefert werden ?


    $checkentry2 = mysqli_query($db, $checkentry) or die ("MySQL-Error: " . mysqli_error($mysqli));

    Habe ich übersehen ,es wahr vorher noch mysql und das lief ja gar nicht mehr

  • Was liefert den mysqli_query den FALSE wenn es nicht klappt? Mein Englisch ist nicht gut.

    Meine Güte, schon mal was vom google-Translator gehört?

    Zitat

    Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.

    Damit liefert der Translator:

    Zitat
    Code
    Gibt bei einem Fehler FALSE zurück. Für erfolgreiche SELECT-, SHOW-, DESCRIBE- oder EXPLAIN-Abfragen gibt mysqli_query () ein mysqli_result-Objekt zurück. Für andere erfolgreiche Abfragen gibt mysqli_query () TRUE zurück.

    Ist das wirklich so schwer?

  • Aber wenn false oder true zurück kommen sollte verstehe ich ich aber die if abfrage nicht . wie kann false den kleiner als 1 sein ?

    Also muß doch eine Zahl geliefert werden ?

    Du solltest weniger raten und die mehr Doku lesen.

    mysqli_query() liefert für SELECT u.a. einen Resultset, was streng genommen ein Objekt ist.

    Nur in allen anderen Fällen, bspw. INSERT u.ä. wird true geliefert ( bei Erfolg! ).

    Ohne Erfolg wird false geliefert.


    Mit Integer hat das nichts zu tun.

    Da PHP eine Typ schwache Sprache ist, kann man mit

    prüfen, ob es geklappt hat, denn PHP castet eine gültige Resource/Objekt in dem Fall zu true bzw. zu !false, was true repräsentiert.

  • Dann habe ich das doch richtig verstanden mit false,also wahr das Englisch noch gut genug.

    Wenn du deine eigene if-Abfage nicht verstehst................

    Ne ist nicht meine. Das ist ein Fertiges Script was mal zum Download da wahr. Ich hätte das mit mysqli gebaut und nicht mit den alten @mysql.

    Und so eine if abfrage hätte ich wohl auch nicht gebaut weil die für mich kein sinn ergibt.


    wenn ich

    Code
    if($checkentry){
    ok
    }else{
    }

    kommt immer ok raus und die if Abfrage trifft immer zu ,und die eigentliche sinn der if Abfrage ,nicht spamen zu können funktioniert so nicht.

    Ich kann jetzt spamen wie ich will.Vorher ging das spamen nicht

  • Das Verhalten hat sich Versions übergreifend nicht geändert! Wenn es jetzt nicht mehr funktioniert, liegt/lag es an etwas anderem.

    IF ist in 7.x genau wie in 5.6.x und mysqli_query() liefert in den Versionen auch das gleiche!

  • Wenn $checkentry2 die Rückgabe aus einem mysqli_query() enthält, ist die IF-Bedingung von jemandem mit Halbwissen erstellt worden.

    $checkentry2 < 1 kann nur false bedeuten, die Abfrage wäre also so rum aus meiner Sicht logischer:

    PHP
    <?php
    if ( !$checkentry2 )

    Warum oder weshalb das so gemacht wurde, kann ich Dir nicht sagen, ändert aber nichts daran, dass das Verhalten sich mit dem Versionwechsel nicht geändert haben kann!

  • Das Verhalten hat sich Versions übergreifend nicht geändert! Wenn es jetzt nicht mehr funktioniert, liegt/lag es an etwas anderem.

    IF ist in 7.x genau wie in 5.6.x und mysqli_query() liefert in den Versionen auch das gleiche!

    Das könnte auch sein. Nur frage ich mich wie ich den Fehler finden soll in den großen Script?

    Leider schmeißt php keine Fehler mehr raus ,nachdem ist alles in Ordnung.

    Ich glaube ich baue es neu .Dann verstehe ich auch was da steht

  • Das ist immer eine Frage, wie der ErrorReport eingestellt ist:

    PHP
    <?php
    error_reporting ( -1 );
    ini_set ( 'display_errors', true );

    liefert Dir alle Fehler und bedeutet in allen Versionen das gleiche!

    Man muss manchmal auch erst Fehler beseitigen, um weitere zu sehen.


    Eine Notice ist allerdings kein Fehler!

  • die IF-Bedingung von jemandem mit Halbwissen erstellt worden.

    Ich habe mal in der Db geschaut was im select überhaupt abgefragt wird. Demnach fragt er doch im select ab wann die ip adresse den letzten Eintrag geschrieben hat und vergleicht ihn mit den jetztigen Eintrag. Wenn dann eine Zahl unter 1 rauskommt würde die ifabfrage ja stimmen und bei einer höheren Zahl wäre es Spam.


    Hat der Entwickler gedacht das $checkentry2 eine Zahl zurück gibt ?? Weil dann würde es doch sinn ergeben.Aber warum lief das den denn dan früher und bei php 7 nicht mehr ?

    Mal weiter kucken ,hatte jetzt schon 8 Fehler weggemacht. Wurde von php 5 auf 7 den soviel geändert ?

  • Ich habe mal in der Db geschaut was im select überhaupt abgefragt wird. Demnach fragt er doch im select ab wann die ip adresse den letzten Eintrag geschrieben hat und vergleicht ihn mit den jetztigen Eintrag. Wenn dann eine Zahl unter 1 rauskommt würde die ifabfrage ja stimmen und bei einer höheren Zahl wäre es Spam.

    Nochmal: mysqli_query() liefert im Erfolgsfall für SELECT eine Resource/Objekt auf eine Ergebnismenge!

    Den Wert, den Du zum Vergleich haben willst musst Du Dir erst aus der Resource holen, bspw mit mysqli_fetch().


    Hat der Entwickler gedacht das $checkentry2 eine Zahl zurück gibt ??

    Frag den Entwickler, woher sollen wir wissen, was in seinem Kopf vorging/-geht?!


    Weil dann würde es doch sinn ergeben.

    Ja klar, wenn eine Grundlage schon falsch ist, kann man sich ja auch eine Welt schaffen, in der die Grundlage wieder Sinn macht...

    :/


    Aber warum lief das den denn dan früher und bei php 7 nicht mehr ?

    Lief vermutlich genau so fehlerhaft, nur waren die Fehlerausgaben nicht aktiviert.

    Mancher macht es sich halt einfach. Dass dann nur zufällig alles scheinbar läuft, spielt keine Rolle.


    Wurde von php 5 auf 7 den soviel geändert ?

    Ja schon. Aber das ist nicht die Frage.

    In PHP 5, das zuvor installiert war, scheint die Fehlerausgabe gegen null eingestellt gewesen zu sein.

    Dann läuft alles erstmal ohne Meldung durch.


    Das Script war schon immer "kaputt".

  • Nur frage ich mich wie ich den Fehler finden soll in den großen Script?

    Ich bin mir da relativ sicher, dass ich dir das schon mal geschrieben habe.


    Richtig debuggen


    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!