Rob is right that it's just throwing a warning and not an error. The question is what you want to happen if the index is greater than the length of the string.
If exiting is what you'd like, then you have a fine solution.
If you're happy to print a blank, then you don't have to worry too much about the warning at all.
If you'd like a different behavior if the index is greater than the string length, then set up a conditional:
if (length($str) < $index) {
$s=substr($str,$index,1);
} else {
whatever else
}
I hope this helps, and reply if you need any more help.
Hays
Edit: Removed the poorly placed my