Functie geeft verkeerde waarden weer
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)
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
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;
}
?>
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
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.
$stmt->store_result() (waarom gebruik je die functie eigenlijk?) geeft een 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.
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() -
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
Zoals Wouter al zegt gewoon éen kolom selecteren (maakt niet uit welke) en verified aan de WHERE toevoegen.
Maar dat doet hij dus niet...
Debuggen! Met andere woorden foutafhandelingen inbouwen en/of kijken hoe de query eruit zou zien zonder de parameter(s).
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?