Functie geeft verkeerde waarden weer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jules Kreutzer

Jules Kreutzer

23/07/2014 21:24:45
Quote Anchor link
Hallo,

Ik heb een functie de een afbeelding achter de gebruikersnaam plaatst wanneer deze geverifieerd is (= geverifieerde gebruikers op facebook). Hiervoor kijk ik in de database of de kolom 'geverifieerd' de waarde 1 bevat, wanneer dit het geval is moet de afbeelding worden weergegeven en anders niet.

Het probleem is echter dat ik nu bij geverifieerde gebruikers de afbeelding zie, maar ook bij gebruikers die niet geverifieerd zijn. Zie onderstaande code voor de opbouw van de functie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
function geverifieerd($id)
{

    global $mysqli,$db_table_prefix;
    $stmt = $mysqli->prepare("SELECT
        id,
        geverifieerd
        FROM "
.$db_table_prefix."users
        WHERE
        id = ? "
);
    $stmt->bind_param("i",$id);
    $stmt->execute();
    $result = $stmt->store_result();
    
    
    
    if($result == 1) {
        $geverifieerd = '<img src="../../images/geverifieerd/admin/admin.png" />';
    }

    else {
        $geverifieerd = '';
    }

    
    return $geverifieerd;
}

?>


Hopelijk weet iemand hier een oplossing voor

Alvast bedankt!
Gewijzigd op 23/07/2014 21:41:51 door Jules Kreutzer
 
PHP hulp

PHP hulp

22/12/2024 13:09:49
 
Wouter J

Wouter J

23/07/2014 21:54:07
Quote Anchor link
$stmt->store_result() (waarom gebruik je die functie eigenlijk?) geeft een mysqli_result object terug, geen number. Je vergelijkt nu dus een nummer met een object. In zo'n geval wordt 1 omgezet naar true en een object ook, dus krijg je true == true waardoor je altijd in de if statement uitkomt.

Wat jij wilt doen is de "geverifieerd" result uitlezen (dus niet de id, waarom selecteer je die eigenlijk als je hem toch al weet?) en die vergelijken met 0 of 1 (waarbij je weer moet uitkijken dat het resultaat van de database geen string '1' is, maar een nummer 1).

Zie het voorbeeld op de php.net pagina van mysqli.prepare over hoe je de resultaten wel moet uitlezen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

23/07/2014 21:55:13
Quote Anchor link
$stmt->store_result() retourneert true of false en ook true als de recordset leeg is.
Je zal dus moeten fetchen en dan de waarde contoleren, of in de query contoleren op verified en dan kijken of er één rij wordt terug gegeven - met $stmt->num_rows() -
 
Jules Kreutzer

Jules Kreutzer

23/07/2014 22:11:17
Quote Anchor link
id in de query stond er per ongeluk nog in, deze heb ik nu eruit gehaald, wanneer ik $stmt->store_result() eruit haal en de code als volgende aanpas:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$stmt
->bind_param("i",$id);
    $stmt->execute();
    $result = $stmt->fetch();    
?>


Blijf ik hetzelfde probleem behouden. Ik snap niet echt wat ik nu moet doen om het op te lossen.

@Wouter - De link die jij mij geeft snap ik niet echt wat ik ervan moet gebruiken

Wanneer ik $stmt->num_rows() dan na $stmt->fetch() invul, blijf ik het probleem ook behouden.
Gewijzigd op 23/07/2014 22:13:01 door Jules Kreutzer
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

23/07/2014 22:40:16
Quote Anchor link
Mijn excuus, $stmt->num_rows is een property en geen functie.
Zoals Wouter al zegt gewoon éen kolom selecteren (maakt niet uit welke) en verified aan de WHERE toevoegen.
 
Jules Kreutzer

Jules Kreutzer

23/07/2014 22:43:54
Quote Anchor link
De query zou dan toch als volgende moeten zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT geverifieerd FROM ".$db_table_prefix."users WHERE id = ? AND geverifieerd = 1"


Maar dat doet hij dus niet...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

23/07/2014 23:01:39
Quote Anchor link
Debuggen! Met andere woorden foutafhandelingen inbouwen en/of kijken hoe de query eruit zou zien zonder de parameter(s).
 
Jules Kreutzer

Jules Kreutzer

23/07/2014 23:17:19
Quote Anchor link
Op de een of andere manier geeft echo $stmt->id aan dat het id 5 is. Deze gebruiker heeft bij geverifieerd de waarde 0. Waar kan dit probleem ergens van af komen?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

23/07/2014 23:50:03
Quote Anchor link
Verdiep je eens in Mysqli.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.