• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Gleichmäßig verteilte Weiterleitung an vier URLs

sanpii

Neues Mitglied
Hallo,

ich habe den Auftrag, vier Fragebögen mit Google Forms zu erstellen und diese auszuwerten. Es wäre sehr vorteilhaft, wenn die vier Fragebögen gleichmäßig verteilt ausgefüllt werden könnten. Ich habe allerdings nicht die Möglichkeit, vier Links an vier gleich große Gruppen zu senden, sondern kann nur einen Link verschicken.

Ich hatte dann an eine HTML-Seite gedacht, die nur als Verteiler dienen soll. Jedes mal, wenn einer auf den verteilten Link klickt, wird an einen der vier Fragebögen weitergeleitet, sodass am Ende die eine gleichmäßige Verteilung erreicht werden kann.

Im Meta-Tag kann man ja mit Refresh-Befehl eine automatische Weiterleitung einrichten.
<meta http-equiv="refresh" content="0; URL=http://blablabla">
Kann der Befehl auch meinen Zweck erfüllen?

Vielen Dank,
sanpii
 
Hallo,

ich habe den Auftrag, vier Fragebögen mit Google Forms zu erstellen und diese auszuwerten. Es wäre sehr vorteilhaft, wenn die vier Fragebögen gleichmäßig verteilt ausgefüllt werden könnten. Ich habe allerdings nicht die Möglichkeit, vier Links an vier gleich große Gruppen zu senden, sondern kann nur einen Link verschicken.

Ich hatte dann an eine HTML-Seite gedacht, die nur als Verteiler dienen soll. Jedes mal, wenn einer auf den verteilten Link klickt, wird an einen der vier Fragebögen weitergeleitet, sodass am Ende die eine gleichmäßige Verteilung erreicht werden kann.

Im Meta-Tag kann man ja mit Refresh-Befehl eine automatische Weiterleitung einrichten.
<meta http-equiv="refresh" content="0; URL=http://blablabla">
Kann der Befehl auch meinen Zweck erfüllen?

Vielen Dank,
sanpii

Soll das eine Art A/B-Testing werden?

Du könntest per PHP eine Zahl hochzählen, in einem Textdokument oder Datenbank speichern und dann entsprechend der aktuellen Zahl weiterleiten.

PHP:
$aktuelleZahl = 537; // Zahl auslesen

$urls = array(
  0 => 'http://google.com/...',
  1 => 'http://google.com/...',
  2 => 'http://google.com/...',
  3 => 'http://google.com/...',
);

header('Location: '.$urls[$aktuelleZahl % 4]);

Du benötigst auf jeden Fall eine serverseitige Programmiersprache.
Wenn du dann noch vermeiden (verhindern geht nicht ohne weiteres) möchtest, dass jemand die anderen Fragebögen aufrufen kann, kannst du das mit einer Session oder Cookies lösen.
 
Zuletzt bearbeitet:
Ich forsche in der Sprachwissenschaft und wir haben vier Tests entworfen, die unterschiedliche sprachliche Merkmale aufweisen. Dabei geht es um die Akzeptabilität, grob gesagt ..

Danke für deine Tipps! Was PHP angeht, bin ich leider nicht so versiert. Ich kann nur einfache HTML-Seiten entwerfen. Ist es zu viel verlangt, wenn ich nach dem kompletten Quellcode frage? Wenn dies zu viel Aufwand ist, ist es auch kein Problem!

Viele Grüße
Sanpii
 
Ist es zu viel verlangt, wenn ich nach dem kompletten Quellcode frage?

Eigentlich schon, aber da ich gerade Zeit hatte…

PHP:
<?php

$aktuelleZahl = 0;

if(file_exists('data.txt')) {
  $aktuelleZahl = intval(file_get_contents('data.txt'));
}
file_put_contents('data.txt', $aktuelleZahl + 1);

$urls = array(
  0 => 'http://google.com/#1',
  1 => 'http://google.com/#2',
  2 => 'http://google.com/#3',
  3 => 'http://google.com/#4',
);

header('Location: '.$urls[$aktuelleZahl % count($urls)]);
 
Hallo nochmal.

Ich habe jetzt den Code in eine HTML-Seite verpackt, aber die Ausgabe sieht folgendermaßen aus:

'http://facebook.com/', 1 => 'http://flickr.com/', 2 => 'http://yahoo.com/', 3 => 'http://instagram.com/', ); header('Location: '.$urls[$aktuelleZahl % count($urls)]); ?>

Der Quellcode ist nun so:

HTML:
<!DOCTYPE html>
<html>
    <body>

        <?php

            $aktuelleZahl = 0;

            if(file_exists('data.txt')) {
                $aktuelleZahl = intval(file_get_contents('data.txt'));
            }  
           
            file_put_contents('data.txt', $aktuelleZahl + 1);

            $urls = array(
                0 => 'http://facebook.com/',
                1 => 'http://flickr.com/',
                2 => 'http://yahoo.com/',
                3 => 'http://instagram.com/',
            );

            header('Location: '.$urls[$aktuelleZahl % count($urls)]);
        ?>
    </body>
</html>
 
Ich habe jetzt den Code in eine HTML-Seite verpackt, aber die Ausgabe sieht folgendermaßen aus:

Da braucht es kein HTML mehr.
Mein PHP Code ist alles - von Anfang bis Ende.

Natürlich muss die Datei durch einen PHP Interpreter laufen, aber das erkläre ich jetzt hier nicht, das gehört zu den PHP Basics.
 
Zuletzt bearbeitet:
Achso. Ok. Hab den HTML-Code wieder entfernt und eine index.php draus gemacht.

Das einzige Problem ist, dass das Script nicht in Schleife läuft. Die ersten vier Klicks sind super und dann wird immer wieder an den vierten Link weitergeleitet und nicht wieder zum ersten. Es sollte in etwa so aussehen:

1. Klick -> http://google.com/#1
2. Klick -> http://google.com/#2
3. Klick -> http://google.com/#3
4. Klick -> http://google.com/#4
5. Klick -> http://google.com/#1
6. Klick -> http://google.com/#2
...

Vielen Dank!
sanpii
 
Achso. Ok. Hab den HTML-Code wieder entfernt und eine index.php draus gemacht.

Das einzige Problem ist, dass das Script nicht in Schleife läuft. Die ersten vier Klicks sind super und dann wird immer wieder an den vierten Link weitergeleitet und nicht wieder zum ersten. Es sollte in etwa so aussehen:

1. Klick -> http://google.com/#1
2. Klick -> http://google.com/#2
3. Klick -> http://google.com/#3
4. Klick -> http://google.com/#4
5. Klick -> http://google.com/#1
6. Klick -> http://google.com/#2
...

Vielen Dank!
sanpii

Schreib mal statt dem "header" ein "echo", dann siehst du was passiert.
Wenn da die Ausgabe wirklich falsch ist, dann überprüf die Schreibrechte im jeweiligen Ordner und ob die data.txt Datei erstellt und die Nummer darin auch erhöht wird.

Auch möglich: der HTTP-Header wird im Cache der Browsers behalten.
Was für deine Zwecke aber eh noch ein Bonuspunkt wäre, da der Nutzer dann immer die gleiche URL bekommt, egal wie oft er den Link öffnet.
 
Zurück
Oben