Name Generator brauche Tip !

Prophet_Al

Grünschnabel
Hallo,
Ich bräuchte mal hilfe bei einem Problem was ich nicht in der Lage bin zu lössen da meine php Kenntnisse nicht Ausreichen könnte mir jemand einen Tip geben ?


Zur Erklärung: Ein Fantasy Namen Generator.

Eingabe: Eigener Name
Ausgabe: Neuer Fantasy Name (wird aus 2 txt Dateien ausgelessen und je nach eingabe des Eigenen Namens zusammen gewürfelt)

Problem: Ich möchte das, das Script nur so die Fantasy Namen zusammen würfelt ohne eingabe eines Vorherigen Eigenen Namens.
Dazu müßte ein Zufalls Faktor eingebaut werden der nicht ständig die gleichen Kombinationen wiederholt wie stelle ich das am besten an ? Danke schon mal das ihr das hier wenigstens durchließt :)


$realname wird zurzeit per HTML Forumular als Eingabe mit eingefügt. Hab ich aber wegen den Foren Regeln weckgelaßen ..

PHP:
<?
if ($REQUEST_METHOD == "POST") 
{
    $displayname = $realname;
    $realname = strtolower($realname);
    /*== generate seed number from name submitted ==*/
    $len = strlen($realname);
    $seed = 0; $s = 0;

    for ($e=1; $e<=$len; $e++) 
    {
      $chr = substr($realname,$s,$e);
      $seed = $seed + ord($chr)*$e;

      $s=$e;
    }

    /*== read in the two files into the arrays ==*/
    $adj_array = file("adjs.txt");
    $noun_array = file("nouns.txt");
	$adj_array = implode("", $adj_array); 
	$adj_array = explode(",", $adj_array);
	$noun_array = implode("", $noun_array);
	$noun_array = explode(",", $noun_array);
 

    /*== set random seed ==*/
    srand($seed);

    /*== get the random numbers for each name first/last or adj/noun ==*/
    $arnd = rand(0,sizeof($adj_array)-1);
    $nrnd = rand(0,sizeof($noun_array)-1);

    /*== create name from random numbers ==*/
    $fname = $adj_array[$arnd].$noun_array[$nrnd];

    print "<font size='+1'><b> $fname </b></font></font></p>";

  }

?>

Grüße Prophet
 
Zuletzt bearbeitet:
So wie ich das sehe, wird der Realname nur gebraucht, um die Variable $seed zu berechnen. Daher solltest Du einen Realnamen nach dem Zufallsprinzip entwerfen, indem Du die Länge des Namens, sowie jedes Zeichen des Namens zufällig bestimmst.

Übrigens das hier, ist total vermurkst. Das funktioniert zwar auch, aber nur, weil die Funktion "ord" so gutherzig ist:
PHP:
    for ($e=1; $e<=$len; $e++) 
    { 
      $chr = substr($realname,$s,$e); 
      $seed = $seed + ord($chr)*$e; 

      $s=$e; 
    }
Stattdessen solltest Du lieber das hier verwenden:
PHP:
  for ($e=0; $e<$len; $e++) {
    $chr = substr($realname,$e,1);
    $seed = $seed + ord($chr)*$e;
  }

snuu
 
PHP:
// Textdatei Einlesen

$myarray = explode(',',join('',file('dateiname.txt')));

// Random Seed initen

srand((float) microtime*10000);

$myrandomval = rand(0,count($myarray)-1);
$zufallsteil = $myarray[$myrandomval];

// Es kann auch array_rand(); benutzt werden --> php hilfe
// Es kann auch mt_srand(); und mt_rand(); anstelle von srand und rand benutzt werden

Gruss Danilo
 
Prophet_Al hat gesagt.:
[$realname wird zurzeit per HTML Forumular als Eingabe mit eingefügt. Hab ich aber wegen den Foren Regeln weckgelaßen ..
Grüße Prophet

Mein Tipp: Miracle Wi...ähm....sorry, da hab ich jetzt wohl falsch gedacht...

Was ich sagen wollte: 1. es heißt bitteschön "weggelassen". Hat nichts mit nem Wecken Brot, mit nem Wecker oder sonstigem zu tun :P

Bevor ich mich aber vollständig unbeliebt mache komm ich auf den ursprünglichen Grund meines Posts zurück: Formular-Eingaben immer mit $_GET[''] oder $_POST[''] aufrufen, alles andere ist zum einen unsicher und zum anderen auch "Variablen-Verschwendung" XD in den neuesten PHP-Versionen is das außerdem deaktiviert, soweit ich informiert bin....also am besten neu angewöhnen :)
 
@ snuu
Es geht ja darum das der Realname nicht mehr grebraucht werden soll (o;
Aber danke für die Verbesserungen des bestehenden Codes !

@ u-Danilo
Ich habe den Code jetzt so wie von dir gepostet abgeändert der Name ändert sich aber nicht
es bleibt immer der gleiche....kannst du nochmal kucken ?

@ honeyboy
Abends um 3 erkenn ich den Monitor so schlecht also auch die Rechtschreibung aber nun gut *g*
Wie meinst du das mit $_GET[''] oder $_POST[''] ? bsp. ? hab ich vorher noch nirgentswo gesehen...

Code von U-Danilo der noch nicht ganz Funktioniert:

PHP:
<?
if ($REQUEST_METHOD == "POST") 
{
  
$adj_array = explode(',',join('',file('wu_adjs.txt'))); 
$noun_array = explode(',',join('',file('wu_nouns.txt')));

// Random Seed initen 

srand((float) microtime*10000); 

$myrandomval = rand(0,count($adj_array)-1); 
$zufallsteil = $adj_array[$myrandomval]; 

// Random Seed initen 2 

srand((float) microtime*10000); 

$myrandomval2 = rand(0,count($noun_array)-1); 
$zufallsteil2 = $noun_array[$myrandomval2]; 
	
    /*== create name from random numbers ==*/
    $name = $zufallsteil.$zufallsteil2;

    print "<font size='+1'><b> $name </b></font></font></p>";

  }

?>
 
Zuletzt bearbeitet:
Kann auch sein dass ich mich irre, aber es scheint, dass du die Eingabe aus deinem Formular mit Hilfe von $fieldname ansprichst. Allerdings sollte man besser mit $_POST[] und $_GET[] arbeiten.

Wie du sicher weißt gibt es bei einem Formular zwei Möglichkeiten, die Daten an ein Script zu senden: Post und get :) Wenn du bei deinem Formular beispielsweise die Option Post verwendest, solltest du deine Felder besser mit $_POST['fieldname'] als mit $fieldname ansprechen; Gründe siehe oben. Das gleiche ist natürlich mit der Variante Get, nur dass du dann $_GET['fieldname'] verwendest :)
 
ok thx honeyboy ;)

So ich habs jetzt hinbekommen gibts noch irgentwelche verbesserungsvorschläge ?

Danke nochmal an alle die mir geholfen haben :)

PHP:
    $adj_array = file("name1.txt");
    $noun_array = file("name2.txt");
	$adj_array = implode("", $adj_array); 
	$adj_array = explode(",", $adj_array);
	$noun_array = implode("", $noun_array);
	$noun_array = explode(",", $noun_array);

// Random Seed initen 

// seed with microseconds
function make_seed() {
    list($usec,$sec) = explode(" ", microtime());
    return ((float)$sec+(float)$usec) * 100000;
}
srand(make_seed());

$myrandomval = rand(0,count($adj_array)-1); 

// Random Seed initen 2 

$myrandomval2 = rand(0,count($noun_array)-1); 
	
    /*== create name from random numbers ==*/
    $name = $adj_array[$myrandomval].$noun_array[$myrandomval2];
 
Zurück