am: 26. Januar 2010, 10:32:56
Hi Leute, ich beschäftige mich grade mit dem Gutscheinsystem, und habe da glaub ich einen Fehler entdeckt, der kommt vermutlich nie zur Ausführung, verursacht dann aber eine endlos Schleife:
function create_coupon_code
($salt = "secret", $length = SECURITY_CODE_LENGTH
) { $ccid = md5(uniqid("", "salt")); $ccid .= md5(uniqid("", "salt")); $ccid .= md5(uniqid("", "salt")); $ccid .= md5(uniqid("", "salt")); srand((double
) microtime() * 1000000); // seed the random number generator $random_start = @ rand(0, (128 - $length)); $good_result = 0; while ($good_result == 0) { $id1 = substr($ccid, $random_start, $length); $query = xtc_db_query
("select coupon_code from ".TABLE_COUPONS
." where coupon_code = '".$id1."'"); if (xtc_db_num_rows
($query) == 0) $good_result = 1; } return $id1;} Für den unwahrscheinlichen Fall, dass der Code schon in der Datenbank gefunden wird, wird die while Bedingung nie erfüllt, da $random_start immer gleich bleibt.
Möglicher Fix:
function create_coupon_code
($salt = "secret", $length = SECURITY_CODE_LENGTH
) { $ccid = md5(uniqid("", "salt")); $ccid .= md5(uniqid("", "salt")); $ccid .= md5(uniqid("", "salt")); $ccid .= md5(uniqid("", "salt")); srand((double
) microtime() * 1000000); // seed the random number generator $good_result = 0; while ($good_result == 0) { $random_start = @ rand(0, (128 - $length)); $id1 = substr($ccid, $random_start, $length); $query = xtc_db_query
("select coupon_code from ".TABLE_COUPONS
." where coupon_code = '".$id1."'"); if (xtc_db_num_rows
($query) == 0) $good_result = 1; } return $id1;} Ausserdem frage ich mich, warum im Funktionsaufruf das $salt übergeben, dann aber nur noch "salt" als String verwendet wird?
mfg, der Fred
Linkback: https://www.modified-shop.org/forum/index.php?topic=3579.0