Buen,despues de luchar logre arreglar el problema y ajustar algunas cosas y aparetentemente anda todo bien. el problema era que yo estaba usando la misma variable para el textbox y para generar nombre entonces lo concatenaba cada ves que el bucle do while era mas de 1 entonces se pasaba de vueltas.
Para aquellos que les sirva ya que quedo bastante bien y para quien quiera modificarla, mejorarla etc, les dejo la clase que arme con cosas de este post para quien la necesite.
Código PHP:
class EjemplarNombre {
// Atributos //
private $nombre; //Nombre generado
private $palabras; //Cantidad de palabras a generar
private $cantidad; // Cantidad de letras del nombre generado
private $texto; // Texto del textbox //
//////////////// Metodos ////////////////
// Constructor //
function __construct($palabras=1,$texto=NULL) {
$this->palabras = $palabras;
$this->texto = $texto;
}
// Obtiene un nombre aleatorio combinando las silabas //
private function getNombre() {
$silabas = array ("a", "e", "i", "o", "u", "wa", "we", "wi", "wo", "wu", "sa", "se", "si", "so", "su", "za", "ze", "ax", "ex", "ca", "ce", "ci", "co", "cu", "da", "de", "di", "do", "du", "fa", "fe", "fi", "fo", "fu", "ra", "re", "ri", "ro", "ru", "va", "ve", "vi", "vo", "vu", "ba", "be", "bi", "bo", "bu", "na", "ne", "ni", "no", "nu", "ma", "me", "mi", "mo", "mu", "ha", "he", "hi", "ho", "hu", "yo", "ja", "je", "ji", "jo", "ju", "la", "le", "li", "lo", "lu", "pa", "pe", "pi", "po", "pu", "al", "el", "tha", "l", "l", "l", "l", "r", "r", "r", "s", "s", "s", "a", "e", "i", "o", "a", "e", "i", "o");
$var = ($this->palabras > 3 ) ? 2 : 4; //para mas de 3 palabras se busca entra 2 y 3
for($j = 1; $j <= $this->palabras; $j ++) {
if ($j ==1) // a la primera palabra se agrega el textbox $this->texto //
$this->nombre = $this->texto;
for($i = 0; $i <= rand (2,$var); $i ++) {
$this->nombre = $this->nombre.$silabas [rand (0, 100)];
}
if ($this->palabras > 1) // Mas de 1 palabra agrego espacio entre palabras //
$this->nombre = $this->nombre." ";
}
return $this->nombre;
}
// Muestra el nombre Final filtrado y revisado en base de datos hasta 20 caracteres//
public function MostrarNombre() {
$i = true;
do {
$this->nombre = $this->getNombre();
$sql = "SELECT nombre from publeje where nombre ='$this->nombre'";
$rs = mysql_query ($sql);
if (mysql_num_rows($rs) == 0 && strlen($this->nombre)<21)
$i = false;
} while ($i);
return $this->nombre;
}
// Cantidad de Letras Mostradas //
public function CantidadLetras(){
$this->cantidad = strlen($this->nombre);
return $this->cantidad;
}
}
para usarla es facil.
Código PHP:
$a = new EjemplarNombre(2,"Diego"); //variables opcionales, 1era cantidad de paginas / 2da texto al comienzo.
echo "Nombre Generado: ".$a->MostrarNombre();
echo "Cantidad de Caracteres: ".$a->CantidadLetras();
en la clase esta limitado a 20 letras maximo, eso lo pueden poner variable o sacarlo directamente.
Buen espero que le sirva a alguien y o puedan mejorarla.
Saludos y gracias a todos por la ayuda..