Problem mit Skript bei Umstellung von PHP5.6 auf PHP7

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Skript bei Umstellung von PHP5.6 auf PHP7

    guten Tag miteinander und danke dafür, dass ich hier mein Problem posten kann. Ich habe seit über 10 Jahren ein online-riddle (riddle.p4x.ch) in das viel Arbeit von Freiwilligen und von mir geflossen ist. Es ist ein non-profit Projekt, ich generiere da keinen Gewinn draus.

    Alle 50 Level kommt ein Ranking, in das man sich eintragen kann. Das hat mir mal vor zig Jahren jemand programmiert, ich versteh da wenig von. Nun funktioniert das Skript bei der Umstellung auf PHP7xx nicht mehr. Und ich hab keine Ahnung, woran es liegt.

    Was die Seite machen sollte:
    wenn man zum ersten Mal auf die Seite kommt, kann man sich über ein Formular eintragen, dieser Wert wird dann in der DB gespeichert. Gleichzeitig wird ein Cookie abgelegt, damit man sich nicht doppelt eintragen kann.
    Kommt man zum wiederholten Mal auf die Seite, wird nur das Ranking angezeigt.

    Fehlermeldungen werden keine angezeigt und daher weiss ich auch nicht, welchen Part des Codes ich posten soll.

    Es sind drei Dateien (index.php, inc_rate.php und submitcomment.php)
    Die inc_rate.php ist relativ lang, weil aber noch CSS-Stylesheet inkludiert ist.

    Ich könnte mir vorstellen, dass es für jemanden mit PHP Kenntnissen vielleicht sofort ersichtlich ist, welche Befehle es so nicht mehr gibt.

    Hat jemand eine hilfreiche Idee, was ich tun kann oder posten soll? Ich wäre dafür sehr dankbar.

    Vielen Dank.
    Stephan

  • #2
    Zusatzinfos

    Nachdem ich nun das display errors auf dem Server eingeschaltet habe, kommt doch noch eine fehlermeldung:

    HTML-Code:
    Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in /home/p4xch/public_html/riddle/50/inc_rate.php:12 Stack trace: #0 /home/p4xch/public_html/riddle/50/index.php(14): require() #1 {main}   thrown in /home/p4xch/public_html/riddle/50/inc_rate.php on line 12
    die betreffende Zeile sieht so aus:
    PHP-Code:
    $db_hostname "localhost";  //usually "localhost be default"
    $db_username "xxxxx";  //your user name
    $db_pass "xxxxx";  //the password for your user
    $db_name "p4xch_riddle";  //the name of the database

    $dbh mysql_connect($db_hostname$db_username$db_pass) or die ('I cannot connect to the database because: ' mysql_error());
    mysql_select_db ($db_name); 
    in PHP5.6 schafft er die Verbindung, ich kann auch den Namen eintragen und er wird in der DB gespeichert.
    Zuletzt geändert von wheelie; 02.07.2018, 16:18.

    Kommentar


    • #3
      Die mysql_* Funktionen galten bei PHP 5 schon sehr lange als veraltet und sind mit PHP 7 endlich entfernt worden.

      Die Nachfolger sind mysqli und PDO. Die mysqli-API ist recht ähnlich zur mysql-API. Der Umstieg sollte also mit relativ wenig Aufwand machbar sein.

      Kommentar


      • #4
        vielen Dank. Dann schau ich mal in der Befehlsreferenz nach. Melde mich dann wieder, falls es nicht das einzige Problem war ;-)

        Kommentar


        • #5
          nächstes Problem

          Hat bestens funktioniert, danke.

          Das nächste Problem verursacht eine Funktion, die in index.php aufgerufen wird und in inc_rate definiert ist.

          der fehler:

          HTML-Code:
          Uncaught Error: Call to undefined function mysql_query() in /home/p4xch/public_html/riddle/50/inc_rate.php:353 Stack trace: #0 /home/p4xch/public_html/riddle/50/index.php(34): getComments('1') #1 {main}   thrown in /home/p4xch/public_html/riddle/50/inc_rate.php on line 353
          der Code in index.php
          PHP-Code:
          submitComments("1","$PHP_SELF");
          getComments("1");
          }
          else
          {
          getComments("1");

          der code in der inc_rate.php
          PHP-Code:
          function getComments($tutid){

          //hier folgt viel Layout in CSS
          echo "
          <style>
          </style>
            
              "
          ;
          //fetch all comments from database where the tutorial number is the one you are asking for
          $commentquery mysql_query("SELECT * FROM comments WHERE tutorialid='$tutid' ORDER BY date") or die(mysql_error());

          //find the number of comments
          $commentNum mysql_num_rows($commentquery);

          //create a headline
          //echo "<div id=\"currentcomments\" class=\"submitcomment\"><h3 class=\"formtitle\">Ranking</h3>\n";
          //for each comment in the database in the right category number...
          while($commentrow mysql_fetch_row($commentquery)){
          //for security, parse through the bbcode script
          //the number corresponds to the column (the message is always stored in column 4
          //COUTING STARTS at 0!!!
          $commentbb BBCode($commentrow[4]);
          //create the right date format
          $commentDate formatDate($commentrow[6]);




                  echo 
          "<div class=\"commentbody\" id=\"$commentrow[0]\">\n
                  <p></p>\n
                  <p class=\"postedby\">"
          ;
                  {
                  echo 
          "#$commentrow[0]  |   $commentrow[2];    $commentbb ";
                  }
                  echo 
          "on $commentDate</p>\n
                  \n</div>"
          ;
                  
              }
              echo 
          "</div>";

          Kommentar


          • #6
            hab grad gesehen, dass die befehle in diesem segment ja auch neu sein müssen. ich kläre das und komme wieder. ich kann obigen beitrag nur editieren, nicht löschen. sorry.

            Kommentar


            • #7
              fortgesetzte Probleme

              So, ich konnte mit Hilfe der PHP Referenz Fortschritte erzielen. Die Seite wird jetzt soweit richtig dargestellt. Nun bereitet aber das Auslesen aus der DB Probleme. Konkret in diesem Abschnitt:
              PHP-Code:
              mysqli_report(MYSQLI_REPORT_ALL);  

              $con mysqli_connect($db_hostname$db_username$db_pass$db_name);

              // Check connection

              if (mysqli_connect_errno())
                {
                echo 
              "Failed to connect to MySQL: " mysqli_connect_error();
                }


              function 
              getComments($tutid){

              $sql="SELECT * FROM comments WHERE tutorialid='$tutid' ORDER BY date";

              if (
              $result=mysqli_query($con,$sql))
                {
                
              // Fetch one and one row

                
              while ($row=mysqli_fetch_row($result))
                  {
                  
              printf ("%s (%s)\n",$row[0],$row[2]);
                  }
                
              // Free result set
                
              mysqli_free_result($result);
              }



              Es erscheint keine Fehlermeldung, aber auch keine Einträge aus der DB.
              Zuletzt geändert von wheelie; 04.07.2018, 11:38.

              Kommentar


              • #8
                Hast du die Fehlerausgabe von mysqli aktiviert?

                PHP-Code:
                mysqli_report(MYSQLI_REPORT_ALL); 

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Hast du die Fehlerausgabe von mysqli aktiviert?

                  PHP-Code:
                  mysqli_report(MYSQLI_REPORT_ALL); 
                  das habe ich bei meinem provider für alle seiten aktiviert. und ich habe es jetzt in mein php-skript eingefügt. ändert aber nichts.

                  Kommentar


                  • #10
                    der Aufruf in der index.php sieht so aus:

                    PHP-Code:
                    getComments("1"); 

                    Kommentar


                    • #11
                      Was steht in $result drin?

                      Kommentar


                      • #12
                        Zitat von h3ll Beitrag anzeigen
                        Was steht in $result drin?
                        vielen Dank für die Rückfrage, ich bin dafür sehr dankbar.

                        wie kann ich den Inhalt ausgeben? mit
                        PHP-Code:
                        echo $result
                        oder mit

                        PHP-Code:
                        echo mysqli_info($result); 
                        bringt beides nichts.
                        Zuletzt geändert von wheelie; 04.07.2018, 12:39.

                        Kommentar


                        • #13
                          var_dump($result);

                          Kommentar


                          • #14
                            danke. ich habs hier eingesetzt:

                            PHP-Code:
                                var_dump($result); 

                                  
                            // Free result set
                                  
                            mysqli_free_result($result); 
                            müsste etwas auf dem Bildschirm erscheinen? es erscheint nichts.

                            Kommentar


                            • #15
                              ich nehme an, der Aufruf
                              PHP-Code:
                                  var_dump($result); 
                              muss im Code an der Stelle kommen, nachdem die Variable zum ersten Mal auftrat, oder?
                              Ich kann es nicht nach dem Eröffnungstag des PHP codes setzen?
                              Wenn ich das mache ist die Ausgabe NULL.

                              Kommentar

                              Lädt...
                              X