PHP in Javascript ausführen

Sempervivum

Erfahrenes Mitglied
Wenn es trotzdem nicht geht, ist Debuggen angesagt: Du schreibst, dass der alert im .done-Callback nicht kommt. Da sehe ich jetzt mehrere Maßnahmen:
1. Bist Du schon mit den Entwicklerwerkzeugen deines Browsers vertraut? Dort gibt ein ein Netzwerk-Tab, wo Du sehr viele Infos über die Anfrage an und die Antwort vom Server ablesen kannst.
2. Im .fail-Callback steht ein console.log. Kommt dessen Ausgabe?
3. Ich würde zunächst das Serverscript für sich testen, d. h. seine URL direkt im Browser aufrufen. Und die Fehleranzeigen von PHP einschalten, d. h. dieses am Anfang des Skripts:
Code:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
 

basti1012

Erfahrenes Mitglied
Benutzt du PHP 7?
Wenn ja, fliegt dir das ganze PHP Kram sowieso um die Ohren.
Ab PHP 7 gibt es mysql nicht mehr.
Du musst jetzt mysqli nutzen.
Wenn du noch PHP unter 7 hast, geht mysql noch.Solltest aber trotzdem auf Php7 umstellen wenn dein Anbieter das hat.
Damit
Code:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
Sollen die Fehler dann auch angezeigt werden ob mysql noch läuft oder nicht.
Wenn nein, müsstest du PHP 7+ haben
 
Zuletzt bearbeitet:

znukida

Grünschnabel
Auch Euch beiden vielen Dank für Eure Hilfe!
Ich habe
PHP:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
eingebunden und auf mysqli umgestellt. Die Datei sieht nun so aus:
PHP:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);

include("db_connect_velotour.inc.php");
$mysqli = new mysqli($host,$user,$pwd,$dbname);
if ($mysqli -> connect_errno) {
  echo "Leider ist momentan keine Datenbank-Verbindung möglich: " . $mysqli -> connect_error;
  exit();
}

$erg = $mysqli -> query("SELECT text, bild_link_1, video FROM eintraege_velotour");
if ($mysqli -> connect_errno) {
  echo "Es konnten leider keine Einträge aus der Datenbank gelesen werden: " . $mysqli -> connect_error;
  exit();
}

$neue_eintraege = mysqli_num_rows($erg);

$return = (object) array("neue_eintraege" => $neue_eintraege);
echo json_encode($return);

$mysqli -> close();
?>

Beim direkten Aufruf der Seite im Browser erscheint nun keine Fehlermeldung mehr, dass mysql demnächst nicht mehr unterstützt wird. Und es wird als Ausgabe das angezeigt, was kommen sollte.
Screenshot 2021-05-25 203924.jpg
(Allerdings wurde dies auch schon vorher angezeigt. mysql hat also immer noch funktioniert.)

Die HTML-Seite habe ich nicht abgeändert.

Des Weitern gibt es keine Ausgabe des consol.log.
Aber ich glaube, das kann es auch gar nicht. Denn wenn ich im Netzwerk-Tab nachschaue, erscheinen dort zuerst die normalen Daten für das Laden der Seite, aber nachher nichts mehr. Dabei sollte doch alle 10 Sekunden eine Verbindung zum Server angezeigt werden. Warum keine Verbindung zur php-Datei aufgebaut wird, habe ich keine Ahnung.

Langsam ist es mir peinlich. Aber habt Ihr da noch eine Idee?
 

Sempervivum

Erfahrenes Mitglied
Da weist mich mein Editor sofort auf einen Fehler bei der Klammerung hin: Du hast das if auskommentiert aber seine schließende Klammer nicht:
Code:
        var alte_eintraege = 0;

        function updateDiv() {
            $('#eintraege').load('velotour_juni_2021_tracking_inhalt.php').hide().fadeIn(1000);
        }

        var requestServer = function () {
            $.ajax({
                url: "./server/velotour_admin/neue_nachricht.php",
                async: true,
                dataType: 'json',
                type: 'GET',
                data: { "alte_eintraege": alte_eintraege }
            })
                .done(function (data, textStatus, jqXHR) {
                    alert(data.neue_eintraege);
                    /*if (data.neue_eintraege != alte_eintraege) {
                      $alte_eintraege = data.neue_eintraege;
                      updateDiv();
                    }*/ // diese muss mit auskommentiert werden
                })
                .fail(function (jqXHR, textStatus, errorThrown) {
                    console.log('fail: ', arguments);
                });
        }
Das hat aber mit Sicherheit einen Hinweis in der Console gegeben.
Langsam ist es mir peinlich.
Das muss es nicht, ist ganz normal beim Programmieren, dass es nicht auf Anhieb funktioniert. Dann muss man debuggen, die Fehler heraus suchen bis es läuft.
 
Zuletzt bearbeitet:

znukida

Grünschnabel
Judijudihui!! Ihr seid die Besten! Vielen Dank für Eure Geduld und Eure Hilfe! Nun hat es geklappt.
Neben dem Fehler mit der Klammer hatte ich noch ein Dollar-Zeichen vor der Variablen "alte_eintraege".

Hier ist nun der richtige Code der HTML-Datei:
HTML:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script type="text/javascript">
var alte_eintraege = 0;

function updateDiv() {
  $('#eintraege').load('velotour_juni_2021_tracking_inhalt.php').hide().fadeIn(1000);
}

var requestServer = function () {
    $.ajax({
      url: "velotour_admin/neue_nachricht.php",
      async: true,
      dataType: 'json',
      type: 'GET',
      data: { "alte_eintraege": alte_eintraege }
    })
      .done(function( data, textStatus, jqXHR ) {
          if (data.neue_eintraege != alte_eintraege) {
          alte_eintraege = data.neue_eintraege;
          updateDiv();
        }
      })
      .fail(function( jqXHR, textStatus, errorThrown ) {
        console.log('fail: ', arguments);
      });
}
</script>

</head>
 
Zuletzt bearbeitet: