mysqli_num_rows funktioniert nicht?
Hallo ich wollte etwas auf Strato hosten. Jedoch funktioniert mysqli_num_rows nicht.
Weiß jemand wie ich den Fehler beheben kann.
Hier die Fehler meldung:
Connected successfully Fatal error: Uncaught TypeError: mysqli_num_rows(): Argument #1 ($result) must be of type mysqli_result, bool given in /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php:28 Stack trace: #0 /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php(28): mysqli_num_rows() #1 {main} thrown in /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php on line 28
Und mein Code:
<?php session_start:
require_once('dbconnection.php');
$servername = "...";
$username = "...";
$password = "...";
// Create connection
$con = new mysqli($servername, $username, $password);
// Check connection
if ($con->connect_error) {
die("Connection failed: " . $con->connect_error);
}
echo "Connected successfully";
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('mysql.trace_mode', true);
//Code for Registration
if(isset($_POST['signup']))
{
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$sql=mysqli_query($con,"select id from users where fname='$fname'");
$row=mysqli_num_rows($sql);
if($row>3)
{
echo "<script>alert('Artikel befindet sich schon 3 mal in der Truhe');</script>";
} else{
$msg=mysqli_query($con,"insert into users(fname,lname) values('$fname','$lname')");
}
if($msg)
{
echo "<script>alert('Erfolgreich Eingetragen');</script>";
}
}
?>
2 Antworten
Wenn du mysqli als Klasse deklarierst, musst du es auch entsprechend verwenden:
https://www.php.net/manual/de/class.mysqli.php
$result = $con->query("select id from users where fname='$fname'");
$row_count = $result->num_rows;
Danke auch dafür hat jetzt geklappt nur wurde nun eine neue Fehlermeldung angezeigt und wie du bestimmt schon gemerkt hast sind die nicht so mein ding.
Hier die Fehlermeldung
Attempt to read property "num_rows" on bool in /mnt/web016/e0/16/511052116/htdocs/cgi-bin/Inventar/index.php on line 28
Der Fehler sagt, dass die Funktion mysqli_num_rows() als Parameter 1 ein Objekt des Typs mysqli_result erwartet, statt dessen jedoch einen Boolean erhalten hat.
Als Parameter 1 hast du das Ergebnis der mysqli_query() Funktion von einer Zeile oben drüber übergeben ($sql). Werfe man einmal einen Blick in die PHP-Dokumentation, sieht man im Abschnitt "Rückgabewerte", dass die mysqli_query() Funktion bei Erfolg das gewünschte mysqli_result zurückgibt (oder den booleschen Wert true bei Abfragen ohne Ergebnisliste), bei einem Fehler aber einen false Boolean.
Summa summarum ist etwas an dem Rückgabewert der mysqli_query() Funktion falsch. Entweder sind die Zugangsdaten für das $con-Objekt falsch (Zeile 2 bis 5), oder aber das SQL-Statement ist fehlerhaft.
Um zu prüfen, ob die Zugangsdaten korrekt sind, mit diesen einfach mal versuchen in phpMyAdmin o.Ä. (keine Ahnung, was Strato da anbietet) einzuloggen. Funktioniert das, ist wahrscheinlich das SQL-Statement ("select id from...") falsch. Du solltest das erstmal in phpMyAdmin testen.
Was jetzt genau in deinem Fall falsch ist, kann man nicht sagen. Es würde ansonsten auch helfen, zwischen Zeile 27 und 28 mal ein echo($sql) rein zu packen, um zu sehen, was die mysqli_query() Funktion ausspuckt. So könnte man den Fehler schon eingrenzen.
Übrigens: So, wie das da steht, baust du eine extrem kritische Sicherheitslücke ein (Platz 1 der OWASP Top 10...), nämlich eine SQL Injection. Du packst $fname, die aus einer Nutzereingabe stammt (aus $_POST) direkt ohne Escaping oder Sanitization in die SQL-Abfrage. Ein Angreifer könnte einfach etwas wie ' or '1'=='1 als "fname" schicken und du hättest ein Problem. Siehe auch hier.
Danke aber nun wird mir diese meldung angezeigt