There are usually two reasons for this.
#1 The most common is that you need to enable the -r (recursive) flag with zip to make it recurse into directories.
So the solution is to use -r
zip -r somefile.zip yourfiles
#2 If you are using bash scripting based on ls without the full path or for some other reason the full path is missing, zip looks for the files in the current directory so this will always fail.
filelist=`ls -1 thedirectory`
The problem is that ls just lists the files off as if it were in the current directory and this is why zip is complaining (essentially the files do not exist to zip because it is being told to look in the wrong/current directory).
If this is your issue you can correct it like so:
filelist=`ls -1d thedirectory/*`
You add the "-d" switch and also /* at the end of the directory.