PHP SQL Objekt in PHP verarbeiten

_Phoenix_

Cadet 3rd Year
Registriert
Juni 2020
Beiträge
38
Hallo zusammen,
Ich habe ein Problem mit PHP in Zusammenhang mit SQL.

Ich habe mir ein SQL Statement geschrieben mit dem ich testen kann wie viele Einträge in einer Spalte sind.

PHP:
$select = "SELECT COUNT(username) FROM Login_data";
    $res = $con->query($select);

Das Statement funktioniert wenn ich es in der Datenbank anwende.
Jetzt will ich aber in PHP auf das Ergebnis zugreifen, da bekomme ich aber immer den Fehler dass es ein Objekt ist und nicht in einen Integer Konvertiert werden kann.

Also wie konvertiere ich den Output $res in einen Integer?

MFG
Phoenix
 
Zuletzt bearbeitet: (Fehler im Code)
Hey,

vielleicht hilft dir dies:

Bsp:

<?php
// Once you have a valid DB object named $db...
$res =& $db->query('SELECT * FROM users');

while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
echo $row['id'] . "\n";
}
?>

Bzw. das hier:

Code Bsp:
  1. <?php
  2. $str = "10";
  3. $num = (int)$str;

  4. if ($str === 10) echo "String";
  5. if ($num === 10) echo "Integer";
  6. ?>

Grüße und viel Erfolg
 
An welcher Stelle genau hakt es denn?

Ansonsten ist es meist extrem hilfreich, wenn man seine (unbekannten) Variablen mit print_r oder var_dump ausgeben lässt. Dann sieht man sofort wo sich darin die gewünschten Daten verstecken.
 
Du kriegst ein DB-Result, jetzt musst du es nur noch fetchen.
while($zeile = mysqli_fetch_assoc($res)){
$zeilen[] =$zeile;
}
Dann hast du ein MDA mit all deinen Werten und kannst im nächsten Schritt darauf zugreifen.
Natürlich kannst du im while dann auch mit dem Ergebnis schon arbeiten. Echo, besondere prints oder was auch immer möglich.
Nicht empfehlen würde ich dir jedoch im while weitere SQLs auszuführen. Eigentlich möchtest du so wenig wie möglich mit der DB quatschen müssen, weil das am meisten Zeit kostet. In kleinen Anwendungen zu vernachlässigen aber je größer der Brocken wird, desto relevanter wird es.
 
Also der Lösungsvorschlag von @axl foli hat bei mir irgendwie nicht funktioniert.
Auf Empfehlung von @benneq habe ich den Output "$res" mal mit var_dump gescannt.
Ich bekam folgenden Output:
Code:
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

Also dachte ich ich kann mit $res["num_rows"] die Zeilen ausgeben, jedoch erhalte ich dann diesen Fehler:
Code:
Fatal error: Uncaught Error: Cannot use object of type mysqli_result as array in /storage/ssd2/315/15417315/public_html/MySQL/MySQL.php:36 Stack trace: #0 {main} thrown in /storage/ssd2/315/15417315/public_html/MySQL/MySQL.php on line 36

Aber wieso var_dump zeigt mit ja an, das der Eintrag ["num_rows"] existiert, beim testen wirft mir das aber ein Fehler, wieso?

MFG
Phoenix
 
Weil das $res kein Array sondern ein mysqli_result object ist, das steht eh in der Fehlerbeschreibung. Du musst die Daten zunächst mit mysqli_fetch_assoc fetchen, mit der Schleife von axl foli bekommst du pro Zeile ein Array und kannst damit weiterarbeiten.
 
  • Gefällt mir
Reaktionen: axl foli
_Phoenix_ schrieb:
Aber wieso var_dump zeigt mit ja an, das der Eintrag ["num_rows"] existiert, beim testen wirft mir das aber ein Fehler, wieso?
var_dump sagt dir aber auch, dass es sich um ein object vom Typ mysqli_result handelt - also kein einfaches Array. Das ist nicht unerheblich.
 
  • Gefällt mir
Reaktionen: axl foli
Das ist auch kein Array, das ist ein mysqli_object.
Himmelweiter Unterschied. Was hat denn bei meiner Lösung „irgendwie“ nicht funktioniert? Welchen Fehler erhältst du denn? Hast du schon mal php.net besucht?
 
Vielen Dank an alle ich habs jetzt so gelöst:
PHP:
    $select = "SELECT ID FROM Login_data";
    $res = $con->query($select);
    while($i = mysqli_fetch_assoc($res)){
        $tests[]=$i;
        
    }
    echo count($tests);
 
Ich hätte noch eine Frage,
Ich habe jetzt meins Script zum verarbeiten der Dateien.
Jetzt mal angenommen ich hab eine Datei namens form.html und in dieser befindet sich eine Formular das mithilfe des Parameters "action=SQL.php" auf die Datei SQL.php zugreift in der SQL.php werden die Informationen verarbeitet, aber wie teile ich der form.html zu welchem Ergebnis die SQL.php gekommen ist.
Also zum Beispiel ob die Nutzer Daten korrekt sind. Ich weiss meine Frage ist ein bischen verwirrend, ich hoffe ihr könnt sie mir dennoch beantworten.

MFG
Phoenix
 
Entweder per AJAX, aber dann schreibt man am Besten gleich alles in JavaScript (oder besser TypeScript ;) ), und benutzt gar keine "normalen" HTML Formulare mehr.
Oder du schreibst das Formular in PHP und baust halt zwischen den Zeilen sowas wie if(error) { echo "Dieses Feld darf nicht leer sein" } ein.
Oder du baust eine reine Ergebnisseite, die aufgerufen wird nachdem das Formular abgeschickt wurde. Da steht dann nur drauf was schief gelaufen ist. Plus ein Link um zurück zum Formular zu kommen.
Möglichkeiten gibt's viele.

Handgemachte Formulare in PHP sind aber echt die Hölle. Für sowas benutzt man Frameworks, die einem die ganze lästige Hintergrundarbeit abnehmen. Dadurch vermeidet man auch gleich 90% aller Fehler, weil andere Leute seit Jahren den Code dafür geschrieben haben und entsprechend Ahnung und Erfahrung drin steckt.
 
Erstmal vielen Dank für deine Antwort @benneq,
ich möchte aber eigentlich einfach ein String oder sonst irgend einen Wert von der SQL.php an die form.html übergeben, also wie mache ich das?
 
"einfach"? Gar nicht.

Erst noch mal vor Augen führen wie PHP und Webseiten funktionieren:

1. Benutzer ruft http://.../form.html auf
2. Der Webserver schickt den Inhalt der Datei form.html an den Browser
3. Benutzer füllt das Formular aus und schickt es ab an action=result.php
4. Der Webserver ruft result.php auf, führt den Code darin aus und schickt den Inhalt von result.php an den Browser
5. Benutzer sieht den Inhalt, den der Webserver für result.php geschickt hat

Wie du siehst, bekommt der Benutzer immer die Seite angezeigt, die er gerade aufgerufen hat. Wenn du also in der result.php den Inhalt des Formulars auswerten willst und gleichzeitig wieder das Formular inkl. der Ergebniswerte anzeigen willst, dann musst du dafür sorgen, dass die result.php auch genau das alles macht: Formulardaten entgegennehmen, auswerten, Formular mit Ergebnis ausgeben.
Anders geht's in reinem PHP ohne AJAX nicht.
 
  • Gefällt mir
Reaktionen: CitroenDsVier
Noch ne Frage ich habe bei nem Form ja das Attribut Action, wenn das Form gesendet wird wird ja die Datei bei action aufgerufen und ausgeführt, ich möchte jetzt aber dass die Datei bei action nur ausgeführt wird und nicht aufgerufen wird, wie mache ich das?
 
_Phoenix_ schrieb:
ich möchte jetzt aber dass die Datei bei action nur ausgeführt wird und nicht aufgerufen wird, wie mache ich das?
Ich kann mich da leider nur wiederholen: Mit reinem HTML und PHP geht das nicht.
Das was du willst benötigt JavaScript bzw. AJAX. Damit kann man das Formular abschicken, ohne dass der Browser eine neue Seite anzeigt.
Am einfachsten geht sowas vermutlich mit jQuery. Hier ist sogar ein Beispiel mit PHP + jQuery: https://www.digitalocean.com/community/tutorials/submitting-ajax-forms-with-jquery
 
Hast du mir zufällig noch eine Seite die das mit vanilla javascript erklärt falls das möglich ist?
 
Möglich ist das, aber ich bezweifle, dass du dir das wirklich antun willst.

Das hier hab ich auf die Schnelle gefunden. Absolut basic. Einfacher und kleiner kann so ein Formular nicht sein:
https://developer.mozilla.org/en-US/docs/Learn/Forms/Sending_forms_through_JavaScript
Runter scrollen zum Abschnitt "Using FormData bound to a form element".
Da geht's aber wirklich nur um das Abschicken des Formulars. Keine Anzeige von Fehlern und so. Ab da wird's mit Vanilla JavaScript so langsam unschön. Es hat schon seinen Grund warum es Frameworks gibt und warum jQuery immer noch weit verbreitet im Einsatz ist :D
 
Nur mal so als Hinweis: In der Action kannst Du auch wieder die Formular Seite hinterlegen, so dass sie sich quasi selbst aufruft. Ist evtl die einfachste Lösung für Dein Vorhaben.
 
Zurück
Oben