Controle op een oneindige loop

Status
Niet open voor verdere reacties.

TheJjokerR

Gebruiker
Lid geworden
25 apr 2008
Berichten
104
Zou dit een beetje kunnen werken zonder in een oneindige loop te raken? Ik heb de variabele emergency_stop op true gezet en zet deze op false MOCHT ik ooit zien dat het verkeerd gaat.

Code:
function PaymentComplete($transaction_id, $donation_amount, $payer_email, $raw){
	$gen_letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	$gen_first = $gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)];
	$gen_second = $gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)];
	$gen_third = $gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)].$gen_letters[rand(0,25)];
	$gen_fourth = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
	
	$GeneratedCode = "DON-".$gen_first."-".$gen_second."-".$gen_third."-".$gen_fourth;
	
	//Put the generated code in the code database
	$result = mysql_query("INSERT INTO `gift_codes` (`unique_code`,`payer_email`,`mc_gross`,`mc_currency`) VALUES ('".$GeneratedCode."','".mysql_real_escape_string($payer_email)."','".$donation_amount."','".$raw['mc_currency']."');");
	if(!$result and $emergency_stop){
		return PaymentComplete($transaction_id, $donation_amount, $payer_email, $raw);
	}else{
		return true;
	}
};

:thumb:
 
Laatst bewerkt:
Zou het misschien ook tussen de [PHP] [/PHP] tags mogen? Ik kan het niet zo goed lezen X)
 
Los van het feit dat het genereren een beetje omslachtig is, kom je hiermee uiteindelijk misschien mee in een oneindige loop ja. Die variabele $emergency_stop kan ik ook niet helemaal plaatsen, die wordt nergens gevuld namelijk.

Op zich is het recursieve idee niet slecht, maar dan moet je wel zorgen dat ie bij poging 2 stopt (de kans is namelijk onnoemelijk klein dat het 2 keer misgaat omdat de code niet uniek is, dan is er waarschijnlijk iets anders aan de hand). Verder zijn backticks in query's af te raden.
 
In principe zou dit niet fout moeten gaan want hij maakt vanzelf wat aan dat niet fout is. Maar het is misschien beter om een auto_increment te nemen en die met een random string (een salt) en een stukje info van de gebruiker (user id oid) en daar bijv een SHA1 of een MD5 overheen te gooien; dan heb je altijd wat unieks zonder (reele) kans op collisions.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan