Question :
Pour générer des codes-barres uniques, une fonction récursive est utilisé pour garantir qu’il n’existe aucune entrée en double dans la base de données. Cependant, la fonction renvoie parfois « Non défini » au lieu d'un numéro unique. Déterminez la cause et fournissez un correctif pour le code défectueux ci-dessous :
function generate_barcode() { $barcode = rand(1, 10); $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'")); if ($bquery == 1) generate_barcode(); else return $barcode; }
Réponse :
Le problème réside dans l'absence d'instruction return de l'appel récursif. Cela signifie que la fonction ne renvoie pas le numéro généré dans cette branche de la récursion, ce qui peut entraîner des erreurs « Non défini ».
Pour résoudre ce problème, modifiez l'appel récursif pour renvoyer le numéro généré :
function generate_barcode() { $barcode = rand(1, 10); $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'")); if ($bquery == 1) return generate_barcode(); // changed! else return $barcode; }
Considération supplémentaire :
Pour éviter une récursion infinie dans les cas où tous les numéros sont réservés, il est crucial de inclure une condition qui arrête la récursion et génère une erreur, telle que :
if ($recursiveCalls > 1000) // or any suitable limit throw new Exception('Failed to generate a unique barcode within the specified limit.');
En incorporant ces modifications, la fonction renverra systématiquement des codes-barres uniques et gérera le cas extrême de tous les nombres pris.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!