Functie geeft verkeerde antwoord terug op return

Status
Niet open voor verdere reacties.

mrprozac

Gebruiker
Lid geworden
16 jul 2008
Berichten
183
Goedendag heren,

Ik heb een probleem met de volgende functie dat ik heb geschreven. De functie dient als een controle om te kijken of de gebruikte nummer in een blacklist staat op de database, als dat het geval is geeft de functie een '1' als antwoord en mocht de gebruikte nummer niet in de blblacklist staan, dan wordt er een '0' als antwoord gegeven.

Nu is het probleem dat de functie een '1' als antwoord geeft ongeacht de situatie.

Dit is het code dat de functie/controle uitvoert
PHP:
function checkcidban($checkuname, $checkcid, $checkdid, $checkmessage)
{
	date_default_timezone_set('Europe/Amsterdam');
	$phptime = time();
	$mysqltime = date ("Y-m-d H:i:s", $phptime);

	$cidchecksql = "SELECT cid,reason FROM fopsms.blockedcid WHERE cid = $checkcid";
	$test=mysql_query($cidchecksql);
	while($check=mysql_fetch_array($test))
	{
		$cidbanned=$check['cid'];
		$cidreason=$check['reason'];
	}
	
	if($cidbanned)
	{
		$cids=array("cs" => "3", "cel" => "$cidreason");
		$checkstatus=$cids["cs"];
		$checkerrorlog=$cids["cel"];
		$sqlcs3 = "INSERT INTO text(username,cid,did,message,status,errorlog,time) VALUES ('$checkuname','$checkcid','$checkdid','$checkmessage','$checkstatus','Blocked: $checkerrorlog','$mysqltime');";
		$sqlqcs3=mysql_query($sqlcs3);
		return 1;
	}elseif(!$cidbanned){
		$cidd=array("cs"=>"1");
		$chst=$cidd["cs"];
		$sqlcs1 = "INSERT INTO text(username,cid,did,message,status,time) VALUES ('$checkuname','$checkcid','$checkdid','$checkmessage','$chst','$mysqltime');";
		$sqlqcs1=mysql_query($sqlcs1);
		return 0;
	}
}

Nu ben ik geen PHP pro, maar ik probeer het te leren mbv php.net en trial-and-error.

De code voert alles in de database, met statuscodes en foutberichten. Het rare is dat de juiste SQL opdrachten worden uitgevoerd, maar de functie nog steeds een '1' als antwoord geeft.

Nu heb ik bijvoorbeeld 112 in de blacklist staan, en heb de script een aantal keer gedraaid. Hieronder de SQL-Records dat zijn aangemaakt in de database:

[XML]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ROOT SYSTEM "db.dtd">
<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="tid">106</field>
<field name="username">3</field>
<field name="cid">112</field>
<field name="did">0031401234567</field>
<field name="message">TEST</field>
<field name="status">3</field>
<field name="errorlog">Blocked: Alarmnummer</field>
<field name="time">2010-06-04 19:09:34</field>
</row>
<row>
<field name="tid">107</field>
<field name="username">3</field>
<field name="cid">123213142</field>
<field name="did">123123123124</field>
<field name="message">TEST</field>
<field name="status">1</field>
<field name="errorlog" xsi:nil="true" />
<field name="time">2010-06-04 19:09:43</field>
</row>
</ROOT>[/XML]
 
Laatst bewerkt:
Ik heb ondertussen even een aantal dingen uitgeprobeerd waaronder de resultaat van de functie direct te printen.

Hieruit blijkt dat de functie goed werkt, en de juiste resultaat teruggeeft, maar de volgende stuk code voert het niet door.
PHP:
$ccu=checkcidban("3",$cid,$did,$msg); 
echo$ccu;
if($ccu=0){
	echo "This Caller ID is not allowed<br/>"; // VERVANGEN MET HEADER NAAR 403 SOORT PAGINA
}else{
	echo "OK"; // REST VAN DE CODE UITVOEREN.
	$checkprice=numprice($did);
	print"0,";
	print$checkprice[2];
	print"&euro;<br/>\n";
	print$checkprice[1];
	print"<br/><br/>Message Sent!</br>";
}

Zoals uit deze code te zien is wordt de $ccu direct ge"echo"ed voordat het in de IF functie wordt gebruikt.
Op nummers die niet in de blacklist zijn vermeld wordt geeft de echo opdracht een blank resultaat (print geen 0), maar als de nummer wel in de blacklist staat print deze dus een 0.

Maar de if functie voert alleen de else opdracht uit, niet de eerste opdracht ( echo"This caller ID is ..)
 
Het probleem lijkt opgelost te zijn.

ik heb
PHP:
$ccu=checkcidban("3",$cid,$did,$msg); 
echo$ccu;
if($ccu=0){
Vervangen met
PHP:
$ccu=checkcidban("3",$cid,$did,$msg); 
echo$ccu;
if($ccu=='0'){
 
Het probleem zat dan in het verschil tussen = en ==, de eerste betekend "maak gelijk aan" en de tweede betekend "controleer gelijk aan"

Als je een waarde toekent in een IF statement, dan wordt de toekenning gedaan en dan de waarde als conditie gebruikt.

Dus dit:
PHP:
if( $a = 1 ) { }

Wordt geparset tot dit:
PHP:
if ( 1 ) {} // de waarde van $a is nu 1, en die wordt als conditie gebruikt

Hopelijk helpt het je in het vervolg dit probleem sneller te zien ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan