PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formular-Problem: Multiauswahl beschränken


fil3s
16.09.2009, 10:33:44
Hallo liebe Community,

ich arbeite derzeit an einem Online-Umfragetool für ein mittleres, nicht-kommerzielles Projekt.
Für die Marktforschung soll wie sich vermuten lässt, eine Umfrage gestartet werden.
Jetzt habe ich folgendes Problem: eine der Vorgegebenen Fragen besitzt um die 20 Checkboxen zur Mehrfachauswahl, welche jedoch auf maximal 6 Auswahlen beschränkt werden soll. Hat irgendjemand eine Idee, wie ich das bewerkstelligen kann?

Mir wäre es persönlich am liebsten, wenn dies über eine Funktion zu bewerkstelligen wäre, da die gesamte Umfrage und das Formular dynamisch, aus in der MySQL-Datenbank gespeicherten Fragen, erstellt wird.

Ich hoffe ihr könnt mir helfen, da ich echt ratlos bin und die Zeit knapp wird.

LG
fil3s

vt1816
16.09.2009, 11:18:19
Bis wann mußt Du denn Deine Hausaufgaben abliefern? ;-)

Zwei Möglichkeiten:
1. mittels JS
2. bei Seitenwechsel abfragen wieviele Checkboxen markiert sind und danach entscheiden weiter oder zurück.

fil3s
16.09.2009, 11:32:24
Bis wann mußt Du denn Deine Hausaufgaben abliefern? ;-)
Schön wärs ja =D ne 6 wie in der Schule könnt ich ja verkraften, aber mein Chef reisst mir den Kopf runter wenn ich nicht Termingerecht abliefer.

btw: nicht alle nicht-kommerziellen Projekte sind gleich Schulprojekte.

1. mittels JS
Da bin ich leider total unbegabt drin =(
2. bei Seitenwechsel abfragen wieviele Checkboxen markiert sind und danach entscheiden weiter oder zurück.
Autsch... so einfach? da hätt ich selbst drauf kommen müssen :-\ Dazu aber nochmal ne Frage: Wie kann ich ich abfragen wie viel Werte ein array enthält?

vt1816
16.09.2009, 11:41:01
[...]
Autsch... so einfach? da hätt ich selbst drauf kommen müssen :-\ Dazu aber nochmal ne Frage: Wie kann ich ich abfragen wie viel Werte ein array enthält?

Autsch... - Handbuch (http://de.php.net/manual/de/language.types.array.php) verlegt?

fil3s
16.09.2009, 12:08:41
Ok, es gibt doch dumme fragen, ich möcht meine gern zurückziehen.
Ich nehm alles zurück und behaupte das Gegenteil!
danke für die Hilfe!

(aber inzwischen ist schon das nächste Problem eingeschlagen -.- Es ist einfach zu lange her, das ich das gemacht habe)

Ok damit ich nicht gleich noch ein Thema aufmachen muss, und es ja direkt das aktuelle betrifft hier die nächste Hürde.

Da die Fragen bei der Umfrage recht komplex sind UND über einen Datenbankeintrag erstellt werden soll habe ich folgende Funktionen geschrieben:


function show_question($daten)
{
if ($daten['type'] == 'radio' or $daten['type'] == 'checkbox') {
echo '<label for="'.$daten['id'].'">Frage '.$daten['lfdNr'].': '.$daten['title'].'</label><br />';
echo '<div class="werte">';
for ($i = 1; $i <= $daten['anzval'] ; $i++) {
$val = 'val'.$i;
echo '<input type="'.$daten['type'].'" name="'.$daten['id'].'" value="'.$i.'">&nbsp;&nbsp;'.$daten[$val].'<br />';
}
echo '</div>';
} elseif ($daten['type'] == 'range_single') {
echo '<label for="'.$daten ['id'].'">Frage '.$daten['lfdNr'].': '.$daten['title'].'</label><br />';
echo '<div class="werte">';
echo $daten['max_1'];
for ($i = 1; $i <= $daten['range']; $i++) {
$val = 'val'.$i;
echo '<input type="radio" name="'.$daten['id'].'" value="'.$i.'">';
}
echo $daten['min_1'];
echo '</div>';
} elseif ($daten['type'] == 'range_multi') {
echo '<label for="'.$daten['id'].'">Frage '.$daten['lfdNr'].': '.$daten['title'].'</label><br />';
echo '<div class="werte">';
for ($i = 0; $i < $daten['anzval']; $i++) {
$c_val = $i +1;
$min = 'min_'.$c_val;
$max = 'max_'.$c_val;
$capt = 'capt'.$c_val;
echo $daten[$capt].' - ';
echo $daten[$max];
for ($j=0; $j < $daten['range']; $j++) {
echo '<input type="radio" name="'.$daten['id'].'_'.$i.'" id="'.$j.'">&nbsp;&nbsp;';
}
echo $daten[$min];
echo '<br />';
}
}

}



Diese Funktion generiert aus einem Array ein Formular, eigentlich ganz simpel. Mein Problem jedoch ist die dazugehörige Datenbank: Ich habe 2 Tabellen, die direkt das Formular betreffen:

p_frage


|----------------------------------------
|Feld |Typ |Null|Standard
|------
|//**id**//|int(10)|Ja |NULL
|cat_id |int(10)|Ja |NULL
|nr |int(10)|Ja |NULL
|name |char(240)|Ja |NULL
|typ |char(100)|Ja |NULL
|anzval |int(2)|Ja |NULL
|pos |int(5)|Ja |NULL
== Daten für Tabelle p_frage

|1|1|1|Was machst du am Wochenende|checkbox|3|1
|2|1|2|Was ist das?|radio|3|2
|3|1|3|An welchen Wochentagen bleibst du lange auf?|checkbox|7|3
|4|1|4|Wie oft zockst du im Internet?|range_single|0|4
|8|1|5|Was zockst du am meisten?|range_multi|3|5




p_wert

===Datenbank usr_web1_7

== Tabellenstruktur für Tabelle p_werte

|------
|Feld|Typ|Null|Standard
|------
|//**id**//|int(10)|Ja|NULL
|frage_id|int(10)|Ja|NULL
|title|char(200)|Ja|NULL
|max|char(20)|Ja|NULL
|min|char(20)|Ja|NULL
|range|int(2)|Ja|NULL
== Daten für Tabelle p_werte

|1|1|Saufen| | |NULL
|2|1|Zocken| | |NULL
|3|1|Schlafen| | |NULL
|4|2|Brot|NULL|NULL|NULL
|5|2|Wurst|NULL|NULL|NULL
|6|2|Käse|NULL|NULL|NULL
|8|3|Montag|NULL|NULL|NULL
|9|3|Dienstag|NULL|NULL|NULL
|10|3|Mittwoch|NULL|NULL|NULL
|11|3|Donnerstag|NULL|NULL|NULL
|12|3|Freitag|NULL|NULL|NULL
|13|3|Samstag|NULL|NULL|NULL
|14|3|Sonntag|NULL|NULL|NULL
|15|4| |täglich|nie|6
|16|5|CoD4|täglich|nie|4
|17|5|BF2142|täglich|nie|4
|18|5|Aion|täglich|nie|4

(BTW, das sind nur Platzhalterfragen =) )

Soweit, so gut. Oder nicht? Aufgrund der großen Menge an möglichen Antworten und der starken variabilität der Fragen habe ich diese Struktur gewählt. Jedoch bekomme ich es nicht zurande, diese beiden in der Art auszulesen, dass ich sie in ein Array prügeln kann, das die Fehlerfreie Generierung des Formulars ermöglicht.
Ich weiss nicht ob ich inzwischen einen überdurchschnittlichen Tunnelblick entwickelt habe, weil ich schon seit Montag morgen daran arbeite, oder was ich falsch mach, aber weiter komme ich nicht, da es schon irgendwo klemmt:

function show_poll($umfrage)
{

$db = new my_database();
$sel_questions = 'SELECT p_frage.id FROM p_cat,p_frage WHERE p_cat.umfrage_id='.$umfrage.' AND p_frage.cat_id = p_cat.id';
echo $sel_questions.'<br />';
$res = $db->query($sel_questions);
$num = $db->num_rows($res,0);
while ($fragen = $db->fetch_array($res,0)) {
$get_question = 'SELECT * FROM p_frage WHERE p_frage.id='.$fragen['id'];
$question = $db->fetch_array($get_question);
$get_wert = 'SELECT * FROM p_werte WHERE frage_id='.$fragen['id'];
while ($values = $db->fetch_rows($get_wert)) {
echo 'blubb!'; // hier habe ich irgendwo eine endlos schleife produziert weil die ganze Seite voll-"geblubbt" wird!
}
}


}

vt1816
16.09.2009, 12:19:51
Ohne mir jetzt alles reinzuziehen: wie hängen die beiden Dateien zusammen - wie sind sie miteinander verknüpft?

fil3s
16.09.2009, 12:28:24
Ohne mir jetzt alles reinzuziehen: wie hängen die beiden Dateien zusammen - wie sind sie miteinander verknüpft?
Die Tabelle p_frage gibt an:

- id
- Titel der Frage
- Typ der Frage (Checkbox, radiobuttons usw)
- evtl. Anzahl der Antwortmöglichkeiten


und die tabelle p_werte, gibt:

- Zugehörigkeit zur Frage über deren id
- alle möglichen Antworten (titel der Möglichkeit) , mit
- bei Wertungs-/Wichtungsfragen die Anzahl der Punkte auf der Skala von wichtig nach unwichtig
- maximalbegriff (z.b. täglich)
-minimalbegriff (z.b. nie)


In wenigen Worten: p_frage gibt den Titel und die Attribute der Frage und p_werte die Antwortmöglichkeiten und deren Attribute an (1:n-Beziehung zu p_frage über die id von p_frage)

Beispielfragen habe ich grad mal online geworfen : hier (http://www.junge-projekte.de/main.php)<-- die Projektdomain!