We have a cisco phone system setup successfully.
I am setting up a bunch of phones, of which, one keeps getting an data vlan ip address from the DHCP server.
I have factory reset the phone a number of times.
I'm assuming you mean the 7961 as I can't find any reference to a Cisco 7661 phone.
Sorry I'm not familiar with the methods used for Cisco's to automatically discover voice VLAN's but a temporary bodge - press settings, **#, then Network configuration, then Operational VLAN ID, and manually enter the desired VLAN.
Also it may be worth doing a factory reset prior to this - pull the power (or network lead if powered via POE), then hold down the # key and power the phone up. Keep holding # until the line buttons blink in sequence, then enter 123456789*0# and the phone should reset to factory settings, then pull needed files. (As you have a Cisco phone system, I'm assuming you have the correct DHCP option for your TFTP server set, as well as the relevant firmware and provisioning files on the TFTP server - if you factory reset without these you will end up with a useless phone).
If after a factory reset it still doesn't behave on known good ports, I would factory reset a known good phone on a known good port just to ensure VLAN wasn't set manually before opening a support case with Cisco.
I don't know what you are using as switches, but on catalyst the following configuration should help:
interface FastEthernet0/12 switchport access vlan <data vlan id> switchport voice vlan <voice vlan id>
Another thing to look at IIRC: the Cisco phones are using CDP to discover the voice vlan and hop into it. While disabling CDP sounds interesting for security reasons, it may break the whole voice lan.
Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#cdp run Switch(config)#interface range fastEthernet 0/1 - 24 Switch(config-if-range)#cdp enable