• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fehlersuche bei SQL Datenabfrage. Anzeige von Variablen

weberm1

Neues Mitglied
Hallo zusammen,

ich bin verzweifelt auch der Suche nach meinem Fehler. Wahrscheinlich ein typisches Beginnerproblem.
Ich habe den folgenden Code verfasst und bin nun auf der Fehlersuche:
Und zwar möchte ich systematisch vorgehen und als erstes wissen ob meine SQL Abfrage überhaupt Werte enthält.
Hierzu, so meine Idee, würde ich gerne die $row oder §ergebnis auf der html seite ausgeben wollen.
Alle Versuche mit echo $xxx haben nicht funktioniert.

Kann jemand einen Tipp geben?

Vielen Dank.

!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Chart.js Blog für Digicomp</title>
<script src="Chart.bundle.min.js"></script>
</head>
<?php
$timevalues = '';
$P2data = '';
$db = mysqli_connect("localhost", "root", "12345", "mysql");
$ergebnis = mysqli_query($db, "SELECT Date, P2 FROM PVAddr2 WHERE Date BETWEEN '2020-05-12 00:00:00.000' AND '2020-05-13 00:00:00.000'");
while ($row = mysqli_fetch_array($ergebnis)) {
$timevalues = $row['Date'];
$P2data = $row['P2'];
}
?>
<body>
<div>
<canvas id="myChart"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
ctx.canvas.parentNode.style.width = "100px";
ctx.canvas.parentNode.style.height = "1000px";
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [<?php echo $timevalues; ?>],
datasets: [{
label: 'P2',
data: [<?php echo $P2data; ?>],
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255, 159, 64, 1)',
borderWidth: 3
}]
},
options: {
scales: {
xAxes: [{
type: 'time'
}]
yAxes: [{
ticks: {
beginAtZero: false
}
}]
}
}
});
</script>
</div>
</body>
</html>
 
Werbung:
Ändere mal den PHP-Teil in
PHP:
<?php
  error_reporting(E_ALL);
  ini_set('display_errors', true);

  $timevalues = '';
  $P2data = '';

  $db = mysqli_connect("localhost", "root", "12345", "mysql");

  if (!$db)
  {
    echo "Fehler: konnte nicht mit MySQL verbinden." . PHP_EOL;
    echo "Debug-Fehlernummer: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debug-Fehlermeldung: " . mysqli_connect_error() . PHP_EOL;
    exit;
  }

  $query = "SELECT
               `Date`,
               `P2`
             FROM
               `PVAddr2`
             WHERE
               `Date` BETWEEN '2020-05-12 00:00:00.000' AND '2020-05-13 00:00:00.000'";
             
  $ergebnis = mysqli_query($db, $query)
     or die ("MySQL-Fehler: " . mysqli_error($db);
   
  while ($row = mysqli_fetch_array($ergebnis))
  {
    $timevalues = $row['Date'];
    $P2data = $row['P2'];
  }
?>

PS: Diese Frage gehört eigentlich in das Board '"PHP" und ein vernünftiger Thread-Titel wäre auch ganz schön. Außerdem solltest du beim Posten von Quellcodes die Formatierungsmöglichkeiten des Forum nutzen, in dem du das anklickst:
1589536038466.png
 
Vielen Dank für die schnelle Antwort und die Tipps für das korrekte Verhalten.
Ich habe allerdings keine Möglichkeit gesehen, wie ich das Thema in den PHP Bereich verschieben kann.

Ich habe Deinen Code direkt eingebunden. Es kam kein Fehler.
Dnach wollte ich das Anzeigen eines echos herausfordern und habe !$db in $db geändert. Dabei wurde allerdings auch kein Text angezeigt. Bin ich mit dem Gedanken auf dem Holzweg und ist das Verhalten richtig?
 
Werbung:
Ich habe noch einmal weiter gesucht und denke, dass ich ggf. ein grundsätzliches Problem haben könnte.
Muss die Datei als htlm oder php abgespeichert werden?
Ich habe sie bisher als html abgespeichert.
 
Muss die Datei als htlm oder php abgespeichert werden?
Ich habe sie bisher als html abgespeichert.
.php sollte besser sein
und bei deiner ersten post hast du das geschrieben
Code:
!doctype html>
Kann sein das es beim Kopieren vergessen wurde , es sollte aber so sein
Code:
<!doctype html>
 
Werbung:
<!doctype html> ist vollständig enthalten.
Ich befürchte, dass der PHP code nicht aufgerufen wird.
Wenn ich die Chart mit Festwerten fülle, werden diese auch angezeigt.
Somit scheint das Problem in der Abfrage zu liegen.
Aus der Vergangenheit bin ich gewohnt ein Programm Zeilenweise prüfen zu können (Delphi Borland).
Das schient hier nicht möglich zu sein.
Gibt es eine Hilfskrücke, wie die Ausgabe von Variablen?
 
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.
 
Zurück
Oben