Functie wil niet rekenen

Status
Niet open voor verdere reacties.

Radio247

Gebruiker
Lid geworden
8 dec 2011
Berichten
31
In mijn strijd een sterk verouderde website te reanimeren stuit ik op een hardnekkige fout in een samenwerkende functie.
De functie kijkt in de database of een IP aanwezig is, wanneer niet dan stapt deze keurig door maar als het IP wel aanwezig is dient er gerekend te worden of dat afgerond 1 dag terug is...
Hier gaat het helaas fout en ik zie even niet de fout...
Wie kan mij op een spoor helpen?

PHP:
function heeft_gestemt($conn)
{
	// kijk of een een log bestand voor deze gebruiker aanwezig is.
    if (is_ingelogd())
    {
        // als de gebruiker ingelogd is ook het userid veld in de log controleren (wordt nog niet gebruikt).
	    $sql = "SELECT * FROM cpl_stemlijst_log WHERE userid = '{$_SESSION['user']['userid']}' ORDER BY logid DESC LIMIT 1;";
	    $result = mysqli_query($conn, $sql);
	    if ($result)
	    {
		    if (mysqli_num_rows($result) > 0)
		    {
			    return mysqli_result($result, 0, 'date');
		    }
	    }
    }
    else
    {
        $sql = "SELECT * FROM cpl_stemlijst_log WHERE ipadres = '{$_SERVER['REMOTE_ADDR']}' ORDER BY logid DESC LIMIT 1;";
	    $result = mysqli_query($conn, $sql);
	    if ($result)
		{
		    if (mysqli_num_rows($result) > 0)
			{
			while($rowData = mysqli_fetch_array($result)){
	  		return $rowData["date"];} #date() uit database
			}
		}
    }
	// er zijn nog geen logs van deze gebruiker.
	return false;
}

/**
 * Controleer of de huidige bezoeker nog wel mag stemmen.
 *
 */
function kan_stemmen($conn)
{
	// er kan maximaal maar een keer gestemt worden?
	if (stemlijst_var('eenmalig_stemmen', true))
	{
		// controleer of de bezoeker al heeft gestemt.
		if (!heeft_gestemt($conn))
		{
			// de gebruiker heeft nog niet gestemt, dus mag dit nog doen.
			return true;
		}
	}
	// er mag meerdere malen gestemt worden, maar alleen na een bepaalde tijd.
	else 
	{
		// kijk wanneer de gebruiker voor het laatst heeft gestemt.
		$laatst_gestemt = heeft_gestemt($conn);
		if (!$laatst_gestemt)
		{
			// de gebruiker heeft nog niet gestemt, dus mag dit nog doen.
			return true;
		}
		
		// kijk hoelang een gebruiker moet wachten voordat er opnieuw gestemt kan worden.
		$stem_wacht_tijd = stemlijst_var('stem_wacht_tijd'); # 1 dag
		
		// controleer of de gebruiker nu mag stemmen.
		$verlopen_dagen = round((time() - $laatst_gestemt) / (24 * 3600));
		if ($verlopen_dagen >= $stem_wacht_tijd) 
		{
			return true;
		}		
	
	}
	// de gebruiker mag niet meer stemmen.
	return false;
}
 
Heb je meer info? In welke functie gaat het fout?
Heb je tussendoor de variabelen bekeken of die kloppen met wat je ervan verwacht?
Code:
return mysqli_result($result, 0, 'date');

Kijk even op deze pagina of dit klopt.

Aanvulling. iets als
PHP:
$sql = "SELECT * FROM cpl_stemlijst_log WHERE userid = '{$_SESSION['user']['userid']}' LIMIT 1;";
$result = mysqli_query($conn, $sql);
if ($result)
{
    $fieldDate = false;
    while ($row = mysqli_fetch_assoc($result)) {
        $fieldDate = $row["date"];
    }
    return $fieldDate;
}

Noot: het stukje ORDER BY logid DESC kan je weglaten omdat je LIMIT 1 gebruikt (waarom 1 rij sorteren) ;)
 
Laatst bewerkt:
Foutieve berekening?

Het moment waar het fout gaat is volgens mij in de 2e functie en daarvan dus het 2e deel, in dit script vanaf regel 52.

Het is onderdeel van een top20 stemlijst welke bestaat uit meerdere functies.
Controle door mijzelf is goed gegaan voor de 1e functie, die geeft keurig de waarde door uit de database van de datum/tijd notatie time()
Door de return dient deze in de 2e functie beschikbaar te zijn.

Ik denk dan ook dat het rekenen ergens niet goed gaat.

Maar omdat het een script is welke waarschijnlijk ergens rond 2003 gemaakt zou zijn vind ik het ook best lastig met mijn gebrekkige kennis van php om even te bepalen waar het fout gaat en geheel opnieuw schrijven gaat mij echt niet lukken helaas.
Vandaar dat ik gekozen heb voor repareren voor zover als mogelijk.
 
mysqli_result bestaat toch niet in de MySQLi-driver?

Je kan gewoon netjes mysqli_fetch_assoc() gebruiken.

Zet ook even al je errors aan met dit bovenaan je script:
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan