Mike
Mike

Reputation: 45

PHP Recursive function issue

I am having trouble with the getNext() function...

If isTaken() == true, it does update last, but I'm not sure it is invoking the getNext() function as the function never returns $next.

If isTaken() == false, $next is returned.

Any ideas?

function isTaken ($id){
  $sql = "SELECT asset_no FROM tb_asset WHERE asset_no='" . $id . "'";
  $result = mysql_query($sql) or die(mysql_Error());
  if (mysql_num_rows($result)) return true;
  else return false;  
  mysql_free_result($result);
}


function getNext(){
  $sql = "SELECT last FROM app_asset";
  $result = mysql_query($sql) or die (mysql_error());
  $last = mysql_fetch_array($result);
  mysql_free_result($result);

  $next = ++$last['last'];

  if (isTaken($next)){
    $sql = "UPDATE app_asset SET last='" . $next . "'";
    mysql_query($sql) or die (mysql_error());
    getNext();
  } else {  
    return $next;
  }
}

Upvotes: 0

Views: 65

Answers (2)

kero
kero

Reputation: 10638

As Sable Foste pointed out, you will always need a return statement. In your case however, it looks like your code needs to be modified to

if (isTaken($next)){
    //code
    return getNext();
} else
    return $next;

So the function will stop the recursion and return once isTaken($next) is false

Upvotes: 1

Sablefoste
Sablefoste

Reputation: 4192

You need to pass the variable back to the function:

  if (isTaken($next)){
    $sql = "UPDATE app_asset SET last='" . $next . "'";
    mysql_query($sql) or die (mysql_error());
    getNext();
    return $next; // this line added.
  } else {  
    return $next;
  }

Upvotes: 0

Related Questions