Menü

  Login

  Shoutbox

  Forum » Fragen zu Ilch » Andere Dinge » Forumex mehrere Votes untereinander einf


Forumex mehrere Votes untereinander einf
IronMan
Grünschnabel

User Pic

Posts: 1
# 30.10.2014 - 11:32:05
    zitieren



Hallo Mairu,

ich habe mir das Forumex Modul bei euch runtergeladen und auch alles Erfolgreich installiert und es funktioniert auch alles, würde aber gerne die Möglichkeit haben mehrere Votes im Forum und im selben Thread untereinander einzutragen,

wenn ich dies nun versuche, wird mir das wie auf dem Screenshot zu sehen ist dargestellt.


Gibt es da eine Möglichkeit dies zum funktionieren zu bekommen?
Würde mich freuen wenn es eine Lösung hierfür geben würde!

Gruß Iron
Mairu
Administrator

User Pic

Posts: 1908
# 08.11.2014 - 10:46:41
    zitieren



Nein, so wie das Modul geschrieben ist, geht das nicht. Allerdings sollte es ja nicht so schlimm sein, für jede Umfrage einen eigenen Beitrag zu verfassen.
FeTTsack
Grünschnabel

User Pic

Posts: 2
# 11.11.2014 - 16:55:35
    zitieren



meinst damit das Ergebnis so aussieht ?=?



Dafür musst du Datenbank sowie die ganzen Funktionen anpassen ...
sollte ich das nicht in meinem Feierabend vergessen, werde ich das mal zusammenstellen und es nacher hier posten Smilie

lg fetti
FeTTsack
Grünschnabel

User Pic

Posts: 2
# 18.11.2014 - 16:00:14
    zitieren



so um mehrere Umfragen in einem Post zu machen musst du einmal die Tabelle ändern in dem du diesen Befehl in der DB ausführst.

 Code von Datei sql
1:
2:
3:
4:
5:
6:
7:
 
ALTER TABLE `ic1_posts_poll`
ADD COLUMN `pp_pk` mediumint(11) DEFAULT null not null AUTO_INCREMENT AFTER `results`,
CHANGE `post_id` `post_id` mediumint(9) DEFAULT 0 NOT NULL,
DROP PRIMARY KEY,
ADD PRIMARY KEY(`pp_pk`)



Danach deine forumex.php mit der von mir hier ersetzen.

 Php von Datei /include/includes/func/forumex.php
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
  <?php
# Erstellt von Mairu

defined ('main') or die ( 'no direct access' );

# Wandelt den Votecode aus dem Forum in HTML um
//FE_Vote2HTML(int Postid, string Posttext,[int View])   View: 0 = Normal; 1 = Preview; 2 = Ergebnis
function FE_Vote2HTML(){
    if(
func_num_args() == 2){
        
$post_id func_get_arg(0);
        
$txt func_get_arg(1);
        
$preview 0;
    }elseif(
func_num_args() == 3){
        
$post_id func_get_arg(0);
        
$txt func_get_arg(1);
        
$preview func_get_arg(2);
        if(
$preview == TRUE AND $preview 2){
            
$preview 1;
        }
    }else{
        return(
FALSE);
    }
    
    
$vote_start strpos($txt'[vote]');
    
$vote_end strpos($txt'[/vote]');
    
$vote_count substr_count($txt'[vote]');
  
    if(
$vote_start === false OR $vote_end === false OR $vote_start $vote_end){
        return(
$txt);
    }
    
    
    switch(
$preview){
        case 
0:
            
$erg db_query('SELECT * FROM prefix_posts_poll WHERE post_id = '.$post_id);
            
//if(db_num_rows($erg) >= 1){
            
while($row db_fetch_assoc($erg)){
                
//$row = db_fetch_assoc($erg);
                
$voters explode('#',$row['voters']);
                
$results explode('#',$row['results']);
                
$gesamt array_sum($results);
                if(
$_SESSION['authid'] == 0){
                    
$voter $_SERVER['REMOTE_ADDR'];
                }else{
                    
$voter $_SESSION['authid'];
                }
                
$vstart $txt;
                
$vote_txt substr($txt$vote_start 6$vote_end $vote_start 6);
                
$vote_vtxt substr($txt$vote_start$vote_end $vote_start );
                
$vstart str_replace($vote_vtxt''$txt);
                
$sm[0] = '/\[question\]/';
                
$sm[1] = '/\[\/question\]/';
                
$sm[2] = '/\[option=(\d+)\]/';
                
                
          
                if(
in_array($voter$voters)){
                    
#User hat schon abgestimmt -> Ergebnis anzeigen
                    
$rm[0] = '<tr><td colspan="3" style="font-size:13px; font-weight:bold;">';
                    
$rm[1] = '';
                    
$rm[2] = '</td></tr><tr><td width="100">[\1]</td><td  width="20">%\1%</td><td>';
                      
                    
$vote_txt '<table>'.$vote_txt;
                    
$vote_txt .= '</td></tr><tr><td>Votes: '.$gesamt.'</td></tr></table>';
                    
$vote_txt preg_replace($sm,$rm,$vote_txt);
                
                    foreach (
$results as $key => $result){
                        
$vote_txt str_replace('['.($key).']','<table height="15"><tr><td bgcolor="#3300cc" width="'.round($result/$gesamt*100,0).'"></td></tr></table>',$vote_txt);
                        
$vote_txt str_replace('%'.($key).'%',$result,$vote_txt);    
                    }     
                }else{
#User hat noch nicht abgestimmt -> Abstimmungsformular
                    
$rm[0] = '<font style="font-size:13px; font-weight:bold;">';
                    
$rm[1] = '</font><br />';
                    
$rm[2] = '<input type="radio" name="vote" value="\1">';
                       
                    
$vote_txt '<form method="POST" action="index.php?forum-vote-'.$post_id.'"><p>'.$vote_txt;
                    
$vote_txt .= '<input type="button" name="showerg" value="Ergebnis anzeigen" onclick="window.open (\'index.php?forum-vote-'.$post_id.'-showerg\', \'finduser\', \'status=no,scrollbars=yes,height=200,width=350\');"> <input type="submit" value="Abstimmen"></p>';
                    
$vote_txt .= '<input type="hidden" name="h_pk" value="'.$row['pp_pk'].'"/></form>';
                    
$vote_txt preg_replace($sm,$rm,$vote_txt);
                }    
                
                if(
$vote_count 1){
                    
$txt str_replace($vote_vtxt''$txt);
                    
$vote_start strpos($txt'[vote]');
                    
$vote_end strpos($txt'[/vote]');
                }
                
                
$txtoutput .= substr($txt0$vote_start).$vote_txt.substr($txt$vote_end 7);
                
//$txtoutput .= $vote_vtxt;
                
                 
          //}
            
}
            
            return(
$txtoutput);

        break;
        
        case 
1:
            
$vote_txt substr($txt$vote_start 6$vote_end $vote_start 6);
            
$sm[0] = '/\[question\]/';
            
$sm[1] = '/\[\/question\]/';
            
$sm[2] = '/\[option=(\d+)\]/';
          
            
$rm[0] = '<font style="font-size:13px; font-weight:bold;">';
            
$rm[1] = '</font><br />';
            
$rm[2] = '<input type="radio" name="vote" value="\1">';
               
            
$vote_txt '<form><p>'.$vote_txt;
            
$vote_txt .= '</p></form>';
            
$vote_txt preg_replace($sm,$rm,$vote_txt);
          
            
$txt substr($txt0$vote_start).$vote_txt.substr($txt$vote_end 7);
            return(
$txt); 
        break;
      
        case 
2:
            
#Ergebnis anzeigen
            
$erg db_query('SELECT * FROM prefix_posts_poll WHERE post_id = '.$post_id);
            if(
db_num_rows($erg) == 1){
                
$row db_fetch_assoc($erg);
                
$results explode('#',$row['results']);
                
$gesamt array_sum($results);
                       
                
$vote_txt substr($txt$vote_start 6$vote_end $vote_start 6);
                
$sm[0] = '/\[question\]/';
                
$sm[1] = '/\[\/question\]/';
                
$sm[2] = '/\[option=(\d+)\]/';
                
                
$rm[0] = '<tr><td colspan="3" style="font-size:13px; font-weight:bold;">';
                
$rm[1] = '';
                
$rm[2] = '</td></tr><tr><td width="100">[\1]</td><td  width="20">%\1%</td><td>';
                  
                
$vote_txt '<table>'.$vote_txt;
                
$vote_txt .= '</td></tr><tr><td>Votes: '.$gesamt.'</td></tr></table>';
                
$vote_txt preg_replace($sm,$rm,$vote_txt);
            
                foreach (
$results as $key => $result){
                    
$vote_txt str_replace('['.($key).']','<table height="15"><tr><td bgcolor="#3300cc" width="'.($gesamt round($result/$gesamt*100,0) : 0).'"></td></tr></table>',$vote_txt);
                    
$vote_txt str_replace('%'.($key).'%',$result,$vote_txt);    
                }
                return (
$vote_txt);
            }
        break;
    }
}

# Überprüft ob der übergebene Text eine richtige Vote enthält und
# gibt die Anzahl der Antwortmöglichkeiten oder 0 zurück
function FE_ValidVote($txt){
    
$vote_start strpos($txt'[vote]');
    
$vote_end strpos($txt'[/vote]');
    
  
    if(
$vote_start === false OR $vote_end === false OR $vote_start $vote_end){
        return(
0);
    }
    
$vote_txt substr($txt$vote_start 6$vote_end $vote_start 6);
    
$q1 strpos($vote_txt'[question]');
    
$q2 strpos($vote_txt'[/question]');
    if(
$q1 === false OR $q2 === false OR $q1 $q2){
        
$valid FALSE;
    }else{
        
$valid TRUE;
    }
    return(
substr_count($txt'[option='));
    
    
$i 1;
    while(
strpos($vote_txt'[option='.$i.']')){
        
$opt[$i] = strpos($vote_txt'[option='.$i.']');
        if(
$i>1){
            for(
$j=1;$j<$i;$j++){
                if(
$opt[$i] < $opt[$j]){
                    
$valid FALSE#Überprüft ob die Reihenfolge richtig ist 
                
}
            }
        }
        
        if(
strpos($vote_txt'[option='.$i.']',$opt[$i]+1)){
            
$valid FALSE#Überprüft ob eine Option doppelt da ist
        
}
        
$i++;   
    }
    if(
$valid AND $i>2){
        return(
$i-1);
    }
    return(
0);
}

# Trägt Vote ein, wenn der Eintrag in der Datenbank existiert
function FE_Vote($post_id,$option,$pppk){
    
$erg db_query('SELECT * FROM `prefix_posts_poll` WHERE post_id = '.$post_id.' AND pp_pk = '.$pppk);
    if(
db_num_rows($erg) == 1){
        
$row db_fetch_assoc($erg);
        
$voters explode('#',$row['voters']);
        
$results explode('#',$row['results']);
        if(
$_SESSION['authid'] == 0){
            
$voter $_SERVER['REMOTE_ADDR'];
        }else{
            
$voter $_SESSION['authid'];
        }
        
$voters[] = $voter;
        if(
array_key_exists($option$results)){
            
$results[$option]++;
        }else{
            return(
FALSE);
        }
        
$voters implode('#'$voters);
        
$results implode('#'$results);
        
db_query('UPDATE `prefix_posts_poll` SET voters = "'.$voters.'", results = "'.$results.'" WHERE post_id = '.$post_id.' AND pp_pk = '.$pppk);
    }
}

#Erstellt einen Tabelleneintrag für eine Umfrage oder editiert/löscht eine Vorhandene, nur löschen oder hinzufügen möglich
function FE_CreateVote($post_id,$txt){
    
$options FE_ValidVote($txt); 
    
$vote_count substr_count($txt'[vote]');    
    
$erg db_query('SELECT * FROM `prefix_posts_poll` WHERE post_id = '.$post_id);
    if(
db_num_rows($erg) >= 1){
        while(
$row db_fetch_assoc($erg)){
            if(
$options == 0){ //Lösche den Datenbankeintrag, wenn kein Vote mehr in dem Post enthalten ist
                
db_query('DELETE FROM `prefix_posts_poll` WHERE post_id = '.$post_id);
                return(
TRUE);
            }else{
                
//$row = db_fetch_assoc($erg);
                
$results explode('#',$row['results']);
                
$resanz count($results)-1;
                if(
$resanz == $options){
                    return(
TRUE); //Ändere nichts, wenn sich am Vote nichts geändert hat (Anzahl der Optionen)
                
}elseif($resanz $options){
                    
//Bei Verringerung der Optionen Anzahl der Results löschen
                    
$results array_slice($results,0,$options+1); 
                }else{
                    for(
$i $resanz$i <= $options$i++){
                        
//Füge noch leere Results ein
                        
$results[$i]=0;  
                    }
                }
                
$results implode('#'$results);
                
db_query('UPDATE `prefix_posts_poll` SET results = "'.$results.'" WHERE post_id = '.$post_id);
                return(
TRUE);
            }
        }
    }else{
        
//Erstellt Eintrag, wenn noch keiner vorhanden ist
        
while($vote_count 0){
            
$vote_start strpos($txt'[vote]');
            
$vote_end strpos($txt'[/vote]');
            
$vote_vtxt substr($txt$vote_start$vote_end $vote_start );
            
$options FE_ValidVote($vote_vtxt); 
            if(
$options == 0){
                return(
FALSE);
            }
            
//for($i=1; $i <= $options; $i++){    
            //    $results[$i]=0;
            //}
            
$results '';
            
$sopt $options;
            while(
$options 0){
                
$results .= '#0';
                
$options--;
            }
            
//$results = '#'.implode('#', $results);
            
db_query('INSERT INTO `prefix_posts_poll` (post_id,voters,results) VALUES ('.$post_id.', "", "'.$results.'")');
            
$vote_count--;
            
$txt str_replace($vote_vtxt''$txt);
        }
        return(
TRUE); 
    }
}
?>



und zum schluss musst du noch deine vote.php mit der drunter ersetzen.

 Php von Datei /include/contents/forum/vote.php
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
  <?php
defined 
('main') or die ( 'no direct access' );

if (
$menu->get(3) == 'showerg') {
  
$pid $menu->get(2);
  
$txt = @db_result(db_query('SELECT `txt` FROM `prefix_posts` WHERE id ='.$pid));
  echo 
FE_Vote2HTML($pid,bbcode($txt),2);
}else {
    
$title $allgAr['title'].' :: Forum :: Abstimmen';
    
$hmenu  'Forum :: Abstimmen';
    
$design = new design $title $hmenu );
    
$design->header();

    
$pid $menu->get(2);
    
FE_Vote($pid,$_POST['vote'],$_POST['h_pk']);

    
$tid = @db_result(db_query('SELECT tid FROM `prefix_posts` WHERE id ='.$pid));
    
$posts = @db_result(db_query('SELECT rep FROM `prefix_topics` WHERE id = '.$tid)) + 1;
    
$page ceil $posts  $allgAr['Fpanz'] );
    
wd('index.php?forum-showposts-'.$tid.'-p'.$page.'#'.$pid,'Vote erfolgreich abgegeben');
    
$design->footer();
}
?>


-----
Achtung:
bitte vorher Daten sichern Smilie

bei Fehlern gerne bescheidgeben.