2017-02-14 4 views
0

Ich erhalte diese Fehlermeldung:gibt es die Fehler: Objekt der Klasse Mysqli nicht zu String auf Linie umgewandelt werden könnte 5

Catchable fatal error: Object of class mysqli could not be converted to string in C:\xampp\htdocs\gym\userAvailability.php on line 5

Und das ist der Code:

<?php 

function username_exists($username, $con){ 

    $sql = "SELECT * FROM admin WHERE username = '$username'"; 
    $result = mysqli_query($con, sql); 
    $resultarr = mysqli_fetch_assoc($result); 


    if(!mysqli_num_rows($result) == 1){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

Ich habe überprüft auch alle Variablennamen aus der .php Datei, die function username_exist wird verwendet und es ist alles korrekt. Irgendwelche Ideen, wie das zu beheben ist?

+0

Ich würde riskieren Sie die Argumente in der falschen Reihenfolge an Ihre Funktion sind vorbei. Sie können versuchen, die Verbindung zu tippen, um sicher zu sein: 'Funktion username_exists ($ username, mysqli $ con)' –

Antwort

0

Zum einen ist dieser Code anfällig für SQL-Injektion - Sie sollten stattdessen vorbereitete Anweisungen mit Platzhaltern verwenden. Sie holen auch das Ergebnis, das nicht verwendet wird - so können Sie die mysqli_fetch_assoc() innerhalb dieser Funktion loswerden.

Ihr tatsächliches Problem ist jedoch ein Dollar-Zeichen fehlt vor Ihrer $sql und die Logik hier if(!mysqli_num_rows($result) == 1) { ist invers. Wenn es ein Ergebnis gibt, erhalten Sie im Grunde !1 == 1, was falsch ist (wie !1 wird 0, so erhalten Sie 0 == 1). Der umgekehrte Operator ! hatte also das Ergebnis umgekehrt.

ein bisschen, Gereinigt die logische Ausgabe und hinzugefügt vorbereitete Anweisungen festgelegt, wie dies

function username_exists($username, $con){ 
    $stmt = $con->prepare("SELECT * FROM admin WHERE username = ?"); 
    $stmt->bind_param('s', $username); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $num_rows = $stmt->num_rows; 
    $stmt->close(); 

    return $num_rows == 1 ? true : false; 
} 

jetzt true zurückkehren würde diese Funktion aussehen würde, wenn der Benutzername in der Datenbank gefunden wird. Sie sollten nun diese Funktion wie

if (!username_exists($_POST['username'], $con) { 
    /* Do the insert to the database here */ 
} else { 
    /* The username was taken! 
     Don't perform the INSERT query */ 
} 

verwenden, wenn Sie den $username Parameter an die Funktion übergeben, verwenden Sie den rohen Benutzername (nicht verwenden mysqli_real_escape_string() auf es hier, da wir vorbereitete Anweisungen verwenden).


Vielleicht wollen Sie auch in Hinzufügen der UNIQUE Einschränkung für Ihre Benutzernamen-Spalte in der Datenbank suchen.

+0

Vielen Dank für Ihre Antwort! Habe die aktualisierten Codes von deinem Kommentar übernommen, aber ich habe eine Frage für den '$ username =" Nidare Kun ";': Ich habe den 'mysqli_real_escape_string()' entfernt und ihn durch '$ username = $ _POST ['username'] ersetzt; 'aber es lässt mich immer noch einen Benutzernamen registrieren, der bereits vergeben ist. Was scheint das Problem zu sein? Vielen Dank! – lexeezy

+0

Das war nur zu Demonstrationszwecken, ich habe meine Antwort bearbeitet :-) – Qirel

+0

Es hat funktioniert! Danke, dass du mein Leben gerettet hast <3 – lexeezy

Verwandte Themen