Zammy: Zufällige Ausgabe von Namen mit Überprüfung des Anwenders...

HI,
ich versuche gerade eine Funktion zu implementieren, die aus einer Liste von Namen einen nach dem Zufallsprinzip auswählt. Das ist jetzt nicht weiter schwer und funktioniert für mich bereits, allerdings befindet sich der Nutzer der Seite selber in der Namensliste, wesshalb der Name des Nutzers dementsprechend eingegeben werden, mit der hinterlegeten Liste überprüft, und der entsprechende Name dann aus der Liste für die Berechnung ausgeschlossen werden müsste.
Und zu guter Letzt sollte ein einmal ausgegebener Name anschliessend aus der Liste verschwinden (Urnenmodell ohne zurücklegen sozusagen). Das ganze könnte z.B. in mit Hilfe einer .txt passieren welche die Liste enthält und in Abhängigkeit der Ausgabe dann überschrieben wird.

Meine Javscript kentnisse sind recht bescheiden und mit Eingabe über den Bildschirm und weiterverarbeitung des ganzen komme ich bislang nicht wirklich weit.

Das wäre mein Codeanfang dazu

<html>  
<head>  
<script language="JavaScript">  
	namen = new Array;  
	namen[1] = "Luki";  
	namen[2] = "Bene";  
	namen[3] = "Denny";  
	namen[4] = "Mira";  
	namen[5] = "Simon";  
	namen[6] = "Marc";  
	namen[7] = "Ulli";  
	namen[8] = "Selma";  
	namen[9] = "Alex";  
	namen[10] = "Arlette";  
	namen[11] = "Katrin";  
	namen[12] = "Binski";  
	a = 1 + (namen.length-2) * (Math.random());  
	a = Math.round(a);  
	quote = namen[a];  
</script>  
<body>  
<script language="JavaScript">  
	document.write('<i>' + quote + '</i>');  
</script>  
</body>  
</html>

Und das hier eine Alternative die ich hier im Forum gefunden habe und von der ich vermute dass diese sich meinen Anforderungen entsprechend leichter anpassen liese...

<script type="text/javascript">  
<!--  
// Liste der Namen  
 Namen = new Array("Luki","Bene","Denny","Mira","Simon","Marc","Uli","Selma","Alex","Arlette","Katrin","Binski");  
  
// Ein Name wird ausgewählt  
 Name = Namen[Math.round(Math.random()*(Namen.length-1))];  
  
// Der ausgewählte Name wird ins Dokument geschrieben  
 document.open("text/html");  
 document.write("<h1>" + Name + "<\/h1>");  
 document.close();  
  
// Ein Dialogfenster mit dem ausgewählten Namen wird angezeigt  
 window.alert("Dein Wichtel ist \"" + Name + "\".");  
//-->  
</script>

Irgendwelche Tips/Hinweise/Hilfe?

Grüße Zammy

  1. @@Zammy:

    nuqneH

    <script language="JavaScript">

    Das @language ist Unsinn. Weg damit! Bei HTML 4.01/XHTML 1.x ist ein http://de.selfhtml.org/javascript/intro.htm#javascriptbereiche@title=@type-Attribut vorgeschrieben, bei (X)HTML5 ist es optional.

    namen = new Array;
    namen[1] = "Luki";
    namen[2] = "Bene";
    namen[3] = "Denny";
    namen[4] = "Mira";
    namen[5] = "Simon";
    namen[6] = "Marc";
    namen[7] = "Ulli";
    namen[8] = "Selma";
    namen[9] = "Alex";
    namen[10] = "Arlette";
    namen[11] = "Katrin";
    namen[12] = "Binski";

    Arrayindizes laufen in JavaScript üblicherweise von 0 bis N − 1. (N sei die Anzahl der Arrayelemente.) Hier wären also namen[0] bis namen[11] angebracht.

    Und das geht dann http://de.selfhtml.org/javascript/objekte/array.htm#allgemeines@title=einfacher:

    var namen = new Array("Luki", "Bene", "Denny", "Mira", "Simon", "Marc", "Ulli", "Selma", "Alex", "Arlette", "Katrin", "Binski");

    oder noch einfacher

    var namen = ["Luki", "Bene", "Denny", "Mira", "Simon", "Marc", "Ulli", "Selma", "Alex", "Arlette", "Katrin", "Binski"];

    http://de.selfhtml.org/javascript/sprache/variablen.htm@title=Beachte auch das var am Anfang!

    a = 1 + (namen.length-2) * (Math.random());
    a = Math.round(a);

    Gebetsmühle: Wann immer Math.round() im Zusammenhang mit Math.random() verwandt wird, ist es vermutlich falsch.

    document.write('<i>' + quote + '</i>');

    document.write ist selten eine gute Idee. Verwende http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML (oder DOM-Methoden).

    <!--
    //-->

    HTML-Kommentare in 'script'-Elementen sind im besten Fall einfach nur unnütz, eventuell aber auch fatal falsch. Weg damit!

    Irgendwelche Tips/Hinweise/Hilfe?

    Arrayelemente http://de.selfhtml.org/javascript/objekte/array.htm#splice@title=löschen.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
  2. Hi Gunnar, danke für die Antwort. Hab das dementsprechend angepasst. Abgesehen von dem Math.round Hinweis hat der Script soweit funktioniert, Regeln/Syntax (Kommentare, lang definition etc.). Einer Lösung des eigentlichen Problems kam ich dadurch nicht wirklich näher.

    LG Zammy

  3. @Gunnar,
    sehe grad eine Tips waren doch noch etwas weiterführend, kämpfe mich da gerade durch. Das Problem mit dem Überschreiben (Löschen) von Array-Inhalten ist (wenn ich das richtig verstehe) in meinem Fall, dass das ganze bei Pagereload wieder zurückgesetzt wird (desshalb dachte ich an die .txt oder halt im mit MySql wobei ich das gerne umgehen würde weil ich eventeull keine Datenbank dafür zur Verfügung habe).

    Am Ende soll das für ca. 200 Namen funktionieren. Die Teilnehmer machen das jeweils Online, sprich jeder läd die Seite für Sich, wesshalb die Namen aus vorhergehenden Durchgängen nicht mehr in der Liste sein dürfen.

    1. Moin,
      es gab hier mal einen Ansatz, allerdings ungetestet (!). Unbedingt erst eingehend prüfen.

      Grüße Marco

  4. Moin,

    Irgendwelche Tips/Hinweise/Hilfe?

    Wenn es nicht zwingend Javascript sein muss, würde ich PHP nehmen. Das ist fast schon Kindergarten-like.

    Grüße Marco

    1. Moin,

      Irgendwelche Tips/Hinweise/Hilfe?
      Wenn es nicht zwingend Javascript sein muss, würde ich PHP nehmen. Das ist fast schon Kindergarten-like.

      Grüße Marco

      Jo Danke,
      nein es muss nicht zwingend Java Script sein aber davon hab ich zumindest ein ganz ganz klein wenig Plan. PHP ist für mich allerhöchstens editierbar :-(

      1. Hi,

        nein es muss nicht zwingend Java Script sein aber davon hab ich zumindest ein ganz ganz klein wenig Plan.

        Ja, aber offenbar zu wenig.
        Sonst müsste dir klar sein, dass das, was du willst, allein clientseitig gar nicht lösbar ist.

        Du willst eine gemeinsame Datenhaltung für mehrere Clients. Also muss die Datenhaltung serverseitig geschehen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Ja, aber offenbar zu wenig.
          Sonst müsste dir klar sein, dass das, was du willst, allein clientseitig gar nicht lösbar ist.

          Hach es ist doch immer wieder herrlich wenn auf Forenanfragen mit Herablassung entgegnet wird...

          Es war nie der Plan das clientseitig zu lösen. Desshalb die .txt!!

          Aber danke für den wirklich hilfreichen Hinweis!

          1. Hi,

            Hach es ist doch immer wieder herrlich wenn auf Forenanfragen mit Herablassung entgegnet wird...

            Immer wieder ebenso schön, wenn Leute sich angegriffen fühlen, wenn man sie schlicht darauf hinweist, dass es ihnen ganz offensichtlich noch an den nötigen theoretischen Grundkenntnissen fehlt und sie sich mit ihrem Vorhaben deshalb wohl etwas übernommen haben.

            Es war nie der Plan das clientseitig zu lösen. Desshalb die .txt!!

            Und wie willst du mit clientseitigem JavaScript eine serverseitige Textdatei erstellen/bearbeiten?

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Immer wieder ebenso schön, wenn Leute sich angegriffen fühlen, wenn man sie schlicht darauf hinweist...

              Es war nie der Plan das clientseitig zu lösen. Desshalb die .txt!!

              Nunja, der Hinweis ist möglicherweise unnötig da von mir bereits mehrfach im Vorfeld so proklamiert... Aber seis drum!

              Und wie willst du mit clientseitigem JavaScript eine serverseitige Textdatei erstellen/bearbeiten?

              MfG ChrisB

              Das ist ein Punkt...
              Und nebenbei ein Feedback mit dem ich was anfangen kann!

              Mfg Zammy

      2. Moin,

        Jo Danke,
        nein es muss nicht zwingend Java Script sein aber davon hab ich zumindest ein ganz ganz klein wenig Plan. PHP ist für mich allerhöchstens editierbar :-(

        PHP ist meines Erachtens einfacher als Javascript. Aber das sieht wohl jeder anders. Auf jeden Fall bist du, wie Chris schon geschrieben hat, mit PHP besser beraten, da es auf dem Server läuft, und es auch mehr vorgefertigte Funktionen gibt. shuffle() ist nur ein Beispiel.
        Wenn du jetzt beispielsweise ein Array zufällig ausgeben willst, ist der Code Javascript ähnlich, nur weniger komplex:

        $namen = array("müller", "meier", "schulze", "hubert", "hempel", "lemmle");  
        print_r($namen);  
        shuffle($namen);  
        print_r($namen);  
        
        

        So sieht's aus!

        Grüße Marco

        1. PHP ist meines Erachtens einfacher als Javascript. Aber das sieht wohl jeder anders. Auf jeden Fall bist du, wie [link:http://forum.de.selfhtml.org

          ...

          Grüße Marco

          Jo, soweit leuchtet das ein. Werd mich daran versuchen...
          Danke

          1. Moin,

            Jo, soweit leuchtet das ein. Werd mich daran versuchen...
            Danke

            Mir hat in den grauen Anfangszeiten dieses kleine Tutorial sehr geholfen.

            Grüße Marco