neues voting-modul :: w3concepts.voting.v1

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

neues voting-modul :: w3concepts.voting.v1

Beitrag von kummer » Do 22. Jul 2004, 09:50

also auf wunsch hier der code:

input-script

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :	    w3concepts.voting.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     21-07-2004
* Modified    :     21-07-2004
************************************************/


echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";

echo "<tr><td>Voting einschalten:</td>";
if ("CMS_VALUE[0]" == 1) {
	echo "<td><div><input type=\"radio\" name=\"CMS_VAR[0]\" value=\"1\" checked=\"checked0\"/> ja</div>
        	  <div><input type=\"radio\" name=\"CMS_VAR[0]\" value=\"0\" /> nein</div></td></tr>";
} else {
	echo "<td><div><input type=\"radio\" name=\"CMS_VAR[0]\" value=\"1\" /> ja</div>
        	  <div><input type=\"radio\" name=\"CMS_VAR[0]\" value=\"0\" checked=\"checked0\"/> nein</div></td></tr>";
}

echo "</table>";
output-script

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/

class w3form {

	var $email, $aufgedroeselt, $form, $formularFeld;

	function w3form() {
	}

	// PRIVATE
	function sendEmail() {
		$this->aufdroeseln($this->suppress('sent'));
		$this->generateEmailMessage();
		mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
	}

	// PRIVATE
	function aufdroeseln($aufzudroeseln,$prefix = '') {
		foreach ($aufzudroeseln as $key => $value) {
			if (is_array($value)) {
				$this->aufdroeseln($value,$key." ");
			} else {
				$this->aufgedroeselt["{$prefix}{$key}"] = $value;
			}
		}
	}

	// PRIVATE
	function add2Message($key,$value) {
		if (strlen($key) > 25 OR strlen($value) > 54) {
			$this->email['message'] .= "$key\n$value\n";
		} else {
		$this->email['message'] .= $key;
		$this->email['message'] .= str_repeat(' ',25-strlen($key));
		$this->email['message'] .= "$value\n";
		}
	}

	// PRIVATE
	function generateEmailMessage() {
		if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
			$this->add2Message($key,$value);
		}
	}

	// PRIVATE
	function suppress() {
		$suppress = func_get_args();
		foreach ($_POST as $key => $value) {
			if (array_search($key,$suppress) === false) $fields[$key] = $value;
		}
		return $fields;
	}



	// PUBLIC
	function addEmailAdress($email) {
		if (empty($this->emailAdresses)) {
			$this->email['adresses'] .= "$email";
		} else {
			$this->email['adresses'] .= ", $email";
		}
	}

	// PUBLIC
	function setEmailSubject($subject) {
		$this->email['subject'] = $subject;
	}

	// PUBLIC
	function setEmailFrom($email,$name) {
		$this->email['from']['email'] = $email;
		$this->email['from']['name'] = $name;
	}

	// PUBLIC
	function setForm($form) {
		$this->form['form'] = $form;
	}

	// PUBLIC
	function setAnswer($answer) {
		$this->form['answer'] = $answer;
	}

	// PUBLIC
	function setBackgroundError($color) {
		$this->form['colorError'] = $color;
	}

	// PRIVATE
	function formularInterpretation(&$formular) {
		$felder = split('###',$formular);
		for ($i=1;$i<count($felder);$i=$i+2) {
			$attributte = split(';',trim($felder[$i]));
			foreach ($attributte as $attribut) {
				$namewert = split(':',trim($attribut));
				if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
					$feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
				} else {
					$feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
				}
			}
		}
		return $feld;
	}

	// PRIVATE
	function formularAusgabe($sent = false) {
		echo '<form action="" method="POST">';
		echo '<input type="hidden" name="sent" value="true" />';
		$formular = $this->form['form'];
		$formulardaten = $this->formularInterpretation(&$formular);
		$formular = split('###',$formular);
		foreach ($formular as $formularteil) {
			if (!empty($formulardaten["{$formularteil}"])) {
				$this->formularFeld($formulardaten["{$formularteil}"],$sent);
			} else {
				echo $formularteil;
			}
		}
		echo '</form>';
	}

	// PRIVATE
	function formularFeld($attribute,$sent) {
		$parameter = "name=\"{$attribute['name']}\"";
		if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
		switch ($attribute['type']) {
			case 'select':
			case 'password':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				break;
		}
		switch ($attribute['type']) {
			case 'textarea':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				if (!empty($attribute['value'])) $value = $attribute['value'];
				if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
				break;
		}
		switch ($attribute['type']) {
			case 'text':
				echo "<input type=\"text\" $parameter value=\"$value\" $style />";
				break;
			case 'password':
				echo "<input type=\"password\" $parameter value=\"$value\" $style />";
				break;
			case 'textarea':
				echo "<textarea name=\"{$attribute['name']}\" cols=\"";
				echo (empty($attribute['cols']))?('20'):($attribute['cols']);
				echo "\" rows=\"";
				echo (empty($attribute['rows']))?('2'):($attribute['rows']);
				echo "\" wrap=\"virtual\" $style>$value</textarea>";
				break;
			case 'select':
				echo "<select $parameter $style>";
				for ($i=0;$i<count($attribute['option']);$i++) {
					if (!empty($attribute['optionvalue'][$i])) {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
							echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
								echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
							}
						}
					} else {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
							echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
								echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option>{$attribute['option'][$i]}</option>\n";
							}
						}
					}
				}
				echo "</select>";
				break;
			case 'checkbox':
				$formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
				if ($sent) {
					if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
					}
				}
				break;
			case 'radio':
				if (!empty($_POST["{$attribute['name']}"])) {
					if ($_POST["{$attribute['name']}"] == $attribute['value']) {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
					}
				}
				break;
		}
	}

	// PRIVATE
	function formularVollstaendig() {

		$formular = $this->form['form'];

		$felder = $this->formularInterpretation(&$formular);

		foreach ($felder as $feld) {
			if (!$this->formularFeldKorrekt(&$feld)) return false;
		}

		return true;
	}

	// PRIVATE
	function success() {
		$this->sendEmail();
		echo $this->form['answer'];
	}

	// PRIVATE
	function formularFeldKorrekt(&$feld) {

		// prüfung, ob pflichtfeld vorhanden
		if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;

		// wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
		if (empty($_POST["{$feld['name']}"])) return true;

		// regular expression prüfungen
		if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[ öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;

		// grössenbereich bei integer und float prüfen
		if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
		if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;

		// längenbereich bei allen typen prüfen
		if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
		if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;

		return true;
	}

	//PUBLIC
	function process() {
		if (!isset($_POST['sent'])) {
			$this->formularAusgabe();
		} elseif ($this->formularVollstaendig()) {
			$this->success($value);
		} else {
			$this->formularAusgabe(true);
		}
	}

}

class voting extends w3form {
	
	var $idart;

	function success() {
		$db = new DB_Contenido;
		$db->query("
			SELECT pk_voting FROM w3concepts_voting
			WHERE
			ip = '{$_SERVER['REMOTE_ADDR']}'
			AND DATE_ADD(time,INTERVAL 30 DAY) > NOW()
			AND fk_idart = {$this->idart}
			");
		if (!$db->next_record()) {
			$db->query("
				INSERT INTO w3concepts_voting
				(fk_idart,ip,time,vote)
				VALUES
				({$this->idart},'{$_SERVER['REMOTE_ADDR']}',NOW(),{$_POST['vote']})
				");
			echo $this->form['answer'];
		} else {
			echo $this->form['doubleVoteAnswer'];
		}
	}

	function setIdart($idart) {
		$this->idart = $idart;
	}

	function setDoubleVoteAnswer($answer) {
		$this->form['doubleVoteAnswer'] = $answer;
	}

}

if ("CMS_VALUE[0]" == 1) {
	$db->query("
		SELECT AVG(vote) AS average, count(*) AS anzahl FROM w3concepts_voting
		WHERE
		fk_idart = $idart 
		");
	if ($db->next_record()) {
		$anzahl = $db->f("anzahl");
		$average = number_format($db->f("average"),1);
		echo "
			<table style=\"width:152px\" cellpadding=\"0\" cellspacing=\"0\">
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			<tr>
				<td style=\"background-color:#4EC0FF; width:15px; color:white; text-align:center\"></td>
				<td style=\"padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE\">
				Dieser Artikel wurde bisher $anzahl mal mit durchschnittlich $average bewertet (auf einer Skala von 1 bis 5).
			</td></tr>
			</table>
			";
	}


	$formular = new voting();
	$formular->setIdart($idart);
	$formular->setForm('
		<table style="width:152px" cellpadding="0" cellspacing="0">
		<tr>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			<strong>Artikelbewertung</strong>
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			Wie beurteilen Sie diesen Artikel?
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			###name:vote; valid:integer; type:select; minvalue:1; option:bitte auswählen; option:sehr gut; option:gut; option:brauchbar; option:schlecht; option:sehr schlecht; optionvalue:0; optionvalue:5; optionvalue:4; optionvalue:3; optionvalue:2; optionvalue:1###
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			<input type="submit" value="bewerten" />
		</td></tr>
		</table>
		');
	$formular->setAnswer('
		<table style="width:152px" cellpadding="0" cellspacing="0">
		<tr>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			<strong>Vielen Dank</strong>
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			Vielen Dank, dass Sie an der Bewertung dieses Artikels teilgenommen haben. Ihre Stimme ist
			erfolgreich eingegangen und findet sich im angezeigten Resultat repräsentiert.
		</td></tr>
		</table>
		');
	$formular->setDoubleVoteAnswer('
		<table style="width:152px" cellpadding="0" cellspacing="0">
		<tr>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			<strong>Mehrfachteilnahme</strong>
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			In der Datenbank liegt bereits ein Eintrag mit Ihrer IP-Adresse für diesen Artikel vor. Ihre Stimmabgabe
			muss deshalb ignoriert werden.
		</td></tr>
		</table>
		');
	$formular->process();
}

?>
script zur tabellen-erstellung

Code: Alles auswählen

CREATE TABLE w3concepts_voting (
  pk_voting int(10) unsigned NOT NULL auto_increment,
  fk_idart int(10) unsigned NOT NULL default '0',
  ip varchar(15) NOT NULL default '',
  time date NOT NULL default '0000-00-00',
  vote tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (pk_voting)
) TYPE=MyISAM;
die darstellung wird durch die methoden setForm, setAnswer und setDoubleVoteAnswer gesteuert. weitere informationen zu den platzhaltern in den formularen findet man hier:
http://www.w3concepts.net/1/1/51/130.html

die tabelle heisst zur zeit w3concepts_voting, kann allerdings problemlos umbenannt werden. dann einfach im output-script nach w3concepts_voting suchen und durch den neuen tabellennamen ersetzen.

für fragen stehe ich zur verfügung.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

maTTos
Beiträge: 130
Registriert: Fr 27. Jun 2003, 14:14
Kontaktdaten:

Beitrag von maTTos » Do 22. Jul 2004, 10:24

Läuft super, vielen Dank!

Drei Fragen noch:
1. Wenn ich den Wert auf eine Stunden haben möchte, müsste dann die Zeile fogendermaßen lauten?
AND DATE_ADD(time,INTERVAL 1 HOUR) > NOW()
2. Ich möchte gerne den Vote standardmäßig im Backend aktivieren. Was muss ich dafür ändern?
3. Schön ist die Bestätigung über den Eingang der Stimme. Der Antworttext verweist darauf, dass die Stimme im Ergebnis berücksichtigt ist. Tatsächlich wird sie aber erst beim wiederholten Aufruf der Seite angezeigt. Kann man die Seite direkt reloaden lassen?


Um das Ergebnis noch besser zu visualisieren, habe ich folgenden Codeschnipsel mit eingebaut. Dieser weißt jedem der fünf Wertungsbereiche ein Bild und einen Text zu.

if ("CMS_VALUE[0]" == 1) {
$db->query("
SELECT AVG(vote) AS average, count(*) AS anzahl FROM w3concepts_voting
WHERE
fk_idart = $idart
");
if ($db->next_record()) {
$anzahl = $db->f("anzahl");
$average = number_format($db->f("average"),1);
echo "
<table style=\"width:152px\" cellpadding=\"0\" cellspacing=\"0\">
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style=\"background-color:#4EC0FF; width:15px; color:white; text-align:center\"></td>
<td style=\"padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE\">";
// ---- Hier einbauen ----

if ( $average > 0 && $average <= 1.7)
{
echo $anzahl, " Stimme(n) bewerten den Beitrag als <b>sehr schlecht</b> <img src=\"http://www.heise.de/icons/forum/wertung_1.gif\">";
} elseif ( $average > 1.7 && $average <= 2.7) {
echo $anzahl, " Stimme(n) bewerten den Beitrag als <b>schlecht</b> <img src=\"http://www.heise.de/icons/forum/wertung_3.gif\">";
} elseif ( $average > 2.7 && $average <= 3.3) {
echo $anzahl, " Stimme(n) bewerten den Beitrag als <b>brauchbar</b> <img src=\"http://www.heise.de/icons/forum/wertung_6.gif\">";
} elseif ( $average > 3.3 && $average <= 4.3) {
echo $anzahl, " Stimme(n) bewerten den Beitrag als <b>gut</b> <img src=\"http://www.heise.de/icons/forum/wertung_9.gif\">";
} elseif ( $average > 4.3 ) {
echo $anzahl, " Stimme(n) bewerten den Beitrag als <b>sehr gut</b> <img src=\"http://www.heise.de/icons/forum/wertung_11.gif\">";
} else {
echo "Dieser Beitrag erhielt noch <b>keine Bewertung</b>";
}
// Dieser Artikel wurde bisher $anzahl mal mit durchschnittlich $average bewertet (auf einer Skala von 1 bis 5).

echo " </td></tr>
</table>
";
}
// ---- Ende ----
Die Bilder werden von heise.de gezogen. Bitte beim Einbau ändern.
Zuletzt geändert von maTTos am Do 22. Jul 2004, 19:00, insgesamt 1-mal geändert.

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Do 22. Jul 2004, 12:28

hallo maTTos

zu deinen fragen:

(1) ganz genau!

(2) einerseits solltest du im input-script standardmässig nicht 'nein' sondern 'ja' vorselektiert anzeigen. also die prüfung...

Code: Alles auswählen

if ("CMS_VALUE[0]" == 1) {
in

Code: Alles auswählen

if ("CMS_VALUE[0]" != 1) {
umwandeln und dann das flag 'checked' entsprechend von ja auf nein und umgekehrt stellen.

dieselbe prüfung findet sich auch im output-script. dort auch einfach ersetzen. jetzt wird bei fehlender konfiguration (oder wenn auf nein gestellt ist) die ausgabe des votingmoduls unterdrückt. wenn du die prüfung wie oben angezeigt änderst, wird es angezeigt, es sein denn, das ist ausdrücklich nicht gewünscht.

(3) tja, das ist in der tat so wie ich es gemacht habe falsch. das liegt daran, dass die abfrage erfolgt, bevor das update vorgenommen wird. wenn du die beiden ausgaben umkehrst, würde es stimmen. aber dann wird das resultat unterhalb der abstimmungsmöglichkeit angezeigt.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

maTTos
Beiträge: 130
Registriert: Fr 27. Jun 2003, 14:14
Kontaktdaten:

Beitrag von maTTos » Do 22. Jul 2004, 18:59

Das Ding ist echt soooo geil! :P

- Wenn ich "1 DAY" gegen "1 HOUR" austausche, greift das Blocken der IP nicht mehr, d.h. umbegrenztes voten ist möglich.

- Kann man denn die Seite nach einer Stimmabgabe nicht einfach noch einmal komplett neu laden?

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 23. Jul 2004, 08:14

doch, du kannst schon neu laden. allerdings - ohne entsprechenden umbau der front_content.php - nur mit javascript. du musst einfach dort, wo du die dankes-ausgabe konfigurierst den entsprechenden javascript-code einfügen.

eleganter wäre es natürlich, wenn das nicht erforderlich wäre. das problem ist nur, dass die darstellung des resultates früher erfolgt, als der eintrag in die datenbank. aber ich werde mal schauen, ob ich das nicht ändern kann.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 23. Jul 2004, 08:21

maTTos hat geschrieben:- Wenn ich "1 DAY" gegen "1 HOUR" austausche, greift das Blocken der IP nicht mehr, d.h. umbegrenztes voten ist möglich.
das liegt am feldtyp in der db. ich habe 'date' gewählt und das enthält gar keine stunden. deshalb fuzts dann nimmer.

aber du kannst natürlich den feldtyp ändern. in phpmyadmin kannst du einfach den typ des feldes 'time' von 'DATE' auf 'DATETIME' ändern. dann kannst du im query auch 1 HOUR verwenden.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Fr 23. Jul 2004, 08:31

ähm, wie wäre es mit int?!

dann schreibt ihr mit UNIX_TIMESTAMP() den aktuellen Unix-Timestamp rein und dann kann sich das jeder so als String ausgeben lassen wie er will. außerdem lässt sich es mit int besser rechnen ;)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 23. Jul 2004, 08:48

aus sicht von php ist das schon richtig. aus sicht von mysql allerdings nicht. mysql bietet umfangreiche funktionen, die es erlauben, bereits zurückzugeben, was man wissen will, ohne in php gross zu rechnen. sobald man einen int draus macht, funktionieren die datumsfunktionen von mysql nicht mehr. und diese sind weitaus mächtiger als diejenigen von php.

im übrigen kann man sich problemlos den timestamp zurückgeben lassen, wenn man einen datetime-typ verwendet. man muss nur die funktion UNIX_TIMESTAMP() verwenden. wenn das feld zum beispiel 'time' heisst und vom typ DATETIME ist, dann kann man sich mit

Code: Alles auswählen

UNIX_TIMESTAMP(time)
genau das ausgeben lassen, was du mit einem int hättest. allerdings kann man noch wesentlich mehr.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 23. Jul 2004, 08:53

maTTos hat geschrieben:- Kann man denn die Seite nach einer Stimmabgabe nicht einfach noch einmal komplett neu laden?
nicht mehr nötig. ich habe es ein wenig umgebaut. hier der ganze output-code (deine änderungen musst du leider hier drin wieder vornehmen, oder die änderungen in dein jetztiges output-script übernehmen):

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/

class w3form {

	var $email, $aufgedroeselt, $form, $formularFeld;

	function w3form() {
	}

	// PRIVATE
	function sendEmail() {
		$this->aufdroeseln($this->suppress('sent'));
		$this->generateEmailMessage();
		mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
	}

	// PRIVATE
	function aufdroeseln($aufzudroeseln,$prefix = '') {
		foreach ($aufzudroeseln as $key => $value) {
			if (is_array($value)) {
				$this->aufdroeseln($value,$key." ");
			} else {
				$this->aufgedroeselt["{$prefix}{$key}"] = $value;
			}
		}
	}

	// PRIVATE
	function add2Message($key,$value) {
		if (strlen($key) > 25 OR strlen($value) > 54) {
			$this->email['message'] .= "$key\n$value\n";
		} else {
		$this->email['message'] .= $key;
		$this->email['message'] .= str_repeat(' ',25-strlen($key));
		$this->email['message'] .= "$value\n";
		}
	}

	// PRIVATE
	function generateEmailMessage() {
		if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
			$this->add2Message($key,$value);
		}
	}

	// PRIVATE
	function suppress() {
		$suppress = func_get_args();
		foreach ($_POST as $key => $value) {
			if (array_search($key,$suppress) === false) $fields[$key] = $value;
		}
		return $fields;
	}



	// PUBLIC
	function addEmailAdress($email) {
		if (empty($this->emailAdresses)) {
			$this->email['adresses'] .= "$email";
		} else {
			$this->email['adresses'] .= ", $email";
		}
	}

	// PUBLIC
	function setEmailSubject($subject) {
		$this->email['subject'] = $subject;
	}

	// PUBLIC
	function setEmailFrom($email,$name) {
		$this->email['from']['email'] = $email;
		$this->email['from']['name'] = $name;
	}

	// PUBLIC
	function setForm($form) {
		$this->form['form'] = $form;
	}

	// PUBLIC
	function setAnswer($answer) {
		$this->form['answer'] = $answer;
	}

	// PUBLIC
	function setBackgroundError($color) {
		$this->form['colorError'] = $color;
	}

	// PRIVATE
	function formularInterpretation(&$formular) {
		$felder = split('###',$formular);
		for ($i=1;$i<count($felder);$i=$i+2) {
			$attributte = split(';',trim($felder[$i]));
			foreach ($attributte as $attribut) {
				$namewert = split(':',trim($attribut));
				if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
					$feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
				} else {
					$feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
				}
			}
		}
		return $feld;
	}

	// PRIVATE
	function formularAusgabe($sent = false) {
		echo '<form action="" method="POST">';
		echo '<input type="hidden" name="sent" value="true" />';
		$formular = $this->form['form'];
		$formulardaten = $this->formularInterpretation(&$formular);
		$formular = split('###',$formular);
		foreach ($formular as $formularteil) {
			if (!empty($formulardaten["{$formularteil}"])) {
				$this->formularFeld($formulardaten["{$formularteil}"],$sent);
			} else {
				echo $formularteil;
			}
		}
		echo '</form>';
	}

	// PRIVATE
	function formularFeld($attribute,$sent) {
		$parameter = "name="{$attribute['name']}"";
		if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style="background-color:{$this->form['colorError']};"";
		switch ($attribute['type']) {
			case 'select':
			case 'password':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size="{$attribute['size']}"";
				break;
		}
		switch ($attribute['type']) {
			case 'textarea':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size="{$attribute['size']}"";
				if (!empty($attribute['value'])) $value = $attribute['value'];
				if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
				break;
		}
		switch ($attribute['type']) {
			case 'text':
				echo "<input type="text" $parameter value="$value" $style />";
				break;
			case 'password':
				echo "<input type="password" $parameter value="$value" $style />";
				break;
			case 'textarea':
				echo "<textarea name="{$attribute['name']}" cols="";
				echo (empty($attribute['cols']))?('20'):($attribute['cols']);
				echo "" rows="";
				echo (empty($attribute['rows']))?('2'):($attribute['rows']);
				echo "" wrap="virtual" $style>$value</textarea>";
				break;
			case 'select':
				echo "<select $parameter $style>";
				for ($i=0;$i<count($attribute['option']);$i++) {
					if (!empty($attribute['optionvalue'][$i])) {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
							echo "<option value="{$attribute['optionvalue'][$i]}" selected="selected">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
								echo "<option value="{$attribute['optionvalue'][$i]}" selected="selected">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option value="{$attribute['optionvalue'][$i]}">{$attribute['option'][$i]}</option>\n";
							}
						}
					} else {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
							echo "<option selected="selected">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
								echo "<option selected="selected">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option>{$attribute['option'][$i]}</option>\n";
							}
						}
					}
				}
				echo "</select>";
				break;
			case 'checkbox':
				$formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
				if ($sent) {
					if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
						echo "<input type="checkbox" $parameter value="{$attribute['value']}" checked="checked"/>";
					} else {
						echo "<input type="checkbox" $parameter value="{$attribute['value']}"/>";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type="checkbox" $parameter value="{$attribute['value']}" checked="checked"/>";
					} else {
						echo "<input type="checkbox" $parameter value="{$attribute['value']}"/>";
					}
				}
				break;
			case 'radio':
				if (!empty($_POST["{$attribute['name']}"])) {
					if ($_POST["{$attribute['name']}"] == $attribute['value']) {
						echo "<input type="radio" $parameter value="{$attribute['value']}" checked="checked"/>";
					} else {
						echo "<input type="radio" $parameter value="{$attribute['value']}" />";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type="radio" $parameter value="{$attribute['value']}" checked="checked"/>";
					} else {
						echo "<input type="radio" $parameter value="{$attribute['value']}"/>";
					}
				}
				break;
		}
	}

	// PRIVATE
	function formularVollstaendig() {

		$formular = $this->form['form'];

		$felder = $this->formularInterpretation(&$formular);

		foreach ($felder as $feld) {
			if (!$this->formularFeldKorrekt(&$feld)) return false;
		}

		return true;
	}

	// PRIVATE
	function success() {
		$this->sendEmail();
		echo $this->form['answer'];
	}

	// PRIVATE
	function formularFeldKorrekt(&$feld) {

		// prüfung, ob pflichtfeld vorhanden
		if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;

		// wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
		if (empty($_POST["{$feld['name']}"])) return true;

		// regular expression prüfungen
		if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[ öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z0-9-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;

		// grössenbereich bei integer und float prüfen
		if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
		if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;

		// längenbereich bei allen typen prüfen
		if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
		if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;

		return true;
	}

	//PUBLIC
	function process() {
		if (!isset($_POST['sent'])) {
			$this->formularAusgabe();
		} elseif ($this->formularVollstaendig()) {
			$this->success($value);
		} else {
			$this->formularAusgabe(true);
		}
	}

}

class voting extends w3form {
	
	var $idart;

	function success() {
		$db = new DB_Contenido;
		$db->query("
			SELECT pk_voting FROM w3concepts_voting
			WHERE
			ip = '{$_SERVER['REMOTE_ADDR']}'
			AND DATE_ADD(time,INTERVAL 30 DAY) > NOW()
			AND fk_idart = {$this->idart}
			");
		if (!$db->next_record()) {
			$db->query("
				INSERT INTO w3concepts_voting
				(fk_idart,ip,time,vote)
				VALUES
				({$this->idart},'{$_SERVER['REMOTE_ADDR']}',NOW(),{$_POST['vote']})
				");
			$this->showResult();
			echo $this->form['answer'];
		} else {
			$this->showResult();
			echo $this->form['doubleVoteAnswer'];
		}
	}

	function setIdart($idart) {
		$this->idart = $idart;
	}

	function setDoubleVoteAnswer($answer) {
		$this->form['doubleVoteAnswer'] = $answer;
	}

	function showResult() {
		$db = new DB_Contenido;
		$db->query("
			SELECT AVG(vote) AS average, count(*) AS anzahl FROM w3concepts_voting
			WHERE
			fk_idart = {$GLOBALS['idart']}
			");
		if ($db->next_record()) {
			$anzahl = $db->f("anzahl");
			$average = number_format($db->f("average"),1);
			echo "
				<table style="width:152px" cellpadding="0" cellspacing="0">
				<tr>
					<td>&nbsp;</td>
					<td>&nbsp;</td>
				</tr>
				<tr>
					<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
					<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
					Dieser Artikel wurde bisher $anzahl mal mit durchschnittlich $average bewertet (auf einer Skala von 1 bis 5).
				</td></tr>
				</table>
				";
		}
	}

	function process() {
		if (!isset($_POST['sent'])) {
			$this->showResult();
			$this->formularAusgabe();
		} elseif ($this->formularVollstaendig()) {
			$this->success($value);
		} else {
			$this->formularAusgabe(true);
		}
	}

}

if ("CMS_VALUE[0]" == 1) {
	$formular = new voting();
	$formular->setIdart($idart);
	$formular->setForm('
		<table style="width:152px" cellpadding="0" cellspacing="0">
		<tr>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			<strong>Artikelbewertung</strong>
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			Wie beurteilen Sie diesen Artikel?
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			###name:vote; valid:integer; type:select; minvalue:1; option:bitte auswählen; option:sehr gut; option:gut; option:brauchbar; option:schlecht; option:sehr schlecht; optionvalue:0; optionvalue:5; optionvalue:4; optionvalue:3; optionvalue:2; optionvalue:1###
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			<input type="submit" value="bewerten" />
		</td></tr>
		</table>
		');
	$formular->setAnswer('
		<table style="width:152px" cellpadding="0" cellspacing="0">
		<tr>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			<strong>Vielen Dank</strong>
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			Vielen Dank, dass Sie an der Bewertung dieses Artikels teilgenommen haben. Ihre Stimme ist
			erfolgreich eingegangen und findet sich im angezeigten Resultat repräsentiert.
		</td></tr>
		</table>
		');
	$formular->setDoubleVoteAnswer('
		<table style="width:152px" cellpadding="0" cellspacing="0">
		<tr>
			<td>&nbsp;</td>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; background-color:#EEEEEE">
			<strong>Mehrfachteilnahme</strong>
		</td></tr>
		<tr>
			<td style="background-color:#4EC0FF; width:15px; color:white; text-align:center"></td>
			<td style="padding-top:3px; padding-left:4px; padding-bottom:3px; background-color:#EEEEEE">
			In der Datenbank liegt bereits ein Eintrag mit Ihrer IP-Adresse für diesen Artikel vor. Ihre Stimmabgabe
			muss deshalb ignoriert werden.
		</td></tr>
		</table>
		');
	$formular->process();
}

?>
folgendes sind die änderungen:

die extension enthält zwei weitere methoden. (1) showResult sowie (2) process (welcher nur überschrieben wird). durch die verlagerung der resultateanzeige in die klasse hinein, steht dann natürlich nicht mehr $idart zur verfügung (im query) und muss deshalb durch {$GLOBALS['idart']} ersetzt werden.

aber jetzt funktioniert es richtig auch ohne die seite nachzuladen. das ist nämlich schon nicht so elegant.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Fr 23. Jul 2004, 09:04

ähm, mal so ne Frage: is das nun ein voting-modul für das kommentarmodul also als Bewertungserweiterung oder is das ein Contenido-weites Umfragenmodul?

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 23. Jul 2004, 09:20

tja, das kommt darauf an, was du daraus machst. letztlich lässt sich damit eine bewertung von artikeln durchführen. allerdings kann man auch umfragen damit machen (eine bewertung ist ja letztlich auch nichts anderes).
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Fr 23. Jul 2004, 09:34

die frage die ich mir nun stelle ist also: soll ich nun mein modul einstampfen oder weiterentwickeln/fixen....
denn auf einen machtkampf hab ich keinen bock geschweige von zeit ;)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Fr 23. Jul 2004, 09:45

Darth-Vader hat geschrieben:auf einen machtkampf hab ich keinen bock geschweige von zeit
don't worry: es gibt keinen machtkampf :wink: mindestens nicht mit mir. ich habe das teil eigentlich nur für mich geschrieben, weil es sich aus dem formularmodul ableiten liess. aber wenn man es mal hat, spricht ja eigentlich nichts dagegen, es anzubieten.

sorry about. wollte nicht als konkurrent auftreten. gibt ja schliesslich auch nichts zu verdienen. 8)
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Fr 23. Jul 2004, 18:49

hey, hab ich ja auch nit gesagt... wär halt nur blöd 2 module mit der gleichen funktion zu betreiben.... da kann ich meine zeit dann lieber in andre modul oder so investieren....

mal schaun...

saschar
Beiträge: 141
Registriert: Mo 21. Okt 2002, 14:37
Wohnort: Dornbirn, A
Kontaktdaten:

Top 10 Liste für das Voting Modul...

Beitrag von saschar » Di 31. Mai 2005, 16:21

Ich habe das Voting-Modul verwendet um Artikel zu bewerten,
das klappt alles wunderbar, jetzt möchte ich aber noch eine Art Top-10 Liste für die jeweilige Kategorie erstellen.

Habe jetzt mal ein bisschen rum probiert und eine simple Artikelliste umgebaut, allerdings nur als Notlösung, denn die stellt alle Datensätze einer Kategorie da und eigentlich sollt ich nur die 10 besten haben.

Code: Alles auswählen

<?


//Frontendpfad ermitteln
$query = "SELECT frontendpath FROM ".$cfg["tab"]["clients"]." WHERE idclient='".$client."'";
$db->query($query);
$db->next_record();
$frontendpath = $db->f("frontendpath");



$startarton = "AND CATART.is_start = '0' AND";

//soll der startartikel mit ausgegeben werden?.
$print_startartikel = "CMS_VALUE[14]";
if($print_startartikel !=""){
$startarton = "AND";

}


// second db class instance
$db2 = new DB_Contenido;

// selected category
$selcat = "CMS_VALUE[0]";

if($selcat!="0" && $selcat!=""){

// select all articles in category widthout start article
$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
$cfg["tab"]["art_lang"]." AS ARTLANG ".
"WHERE CATART.idcat = '$selcat' AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' AND ".
"ARTLANG.online = '1' ORDER BY CATART.idart";

// execute query
$db->query($query);

unset($articleID);
unset($linkID);

// get id's of sub articles
while ($db->next_record()) {
$articleID[] = $db->f("idartlang");
$linkID[] = $db->f("idart");
} // end while


/****************** start table **************************/
echo '
<table border="1" bgcolor="" bordercolor="#ffffff" cellpadding="3" cellspacing="0" width="350px"

<tr>
<td width="30px"><font face="Arial" size="2"><b>Stimmen<b/></font></td>
<td width="30px"><font face="Arial" size="2"><b>Name<b/></font></td>

</tr>

';


// Loop through articles
if (is_array($articleID)) {
foreach ($articleID as $key => $value) {
// select all CMS variables of the article


//Anzahl
$db = new DB_Contenido;
      $db->query("
         SELECT count(*) AS anzahl FROM w3concepts_voting WHERE fk_idart = {$GLOBALS['idart']}
         ");
      if ($db->next_record()) {
         $anzahl = $db->f("anzahl");
          }

//HEADLINE

$sql = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '1'";

$db->query($sql);
$db->next_record();
$headline = urldecode($db->f("value"));

for ($j=CMS_VALUE[3]; $j < CMS_VALUE[3]+20; $j++)
{
$headline1 = substr($headline , 0, $j);

}




// link
$link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]&m=$m&s=$s");



/***********************Anfang Tablezeile für Artikelliste**********************/
echo '
<font face="Arial" size="1">
<tr>
<td><font face="Arial" size="2"><b>'.$anzahl.'</b></font></td>
<td><font face="Arial" size="2"><b><A HREF="'.$link.'">'.$headline.'</a><br></font></td>
</tr>
</font>

';


} // end while



unset($headline);
unset($headline1);
unset($anzahl);
unset($stage1);


} // end foreach

} // end if (is_array)

echo '</table>';
/***********************ende Table**********************/

?>

Ich weiss der Weg ist der verkehrte allerdings kenne ich mich in PHP-Sachen nicht wirklich aus, bin halt eben mehr Gestalter.

Kann mir bitte das so ummodeln, dass es für meinen Zweck funktioniert.
Also am Besten eine einfache Artikelliste, die die Top-10 einer Kategorie nach Stimmabgaben ausgibt. Die Benotung habe ich nicht mehr in Verwendung.

Wäre sehr dankbar.


Gruß
Sascha

Gesperrt