+ Antworten
Ergebnis 1 bis 6 von 6

Thema: DB Feld des angemeldeten Users ändern

  1. #1
    Neu an Board
    Registriert seit
    03.07.2007
    Beiträge
    56
    Bedankte sich
    10
    1 Danksagung in 1 Beitrag

    Frage DB Feld des angemeldeten Users ändern

    Hallo,

    ich bin auf der Suche nach einem Counter, der jeden Ja-Klick um 1 erhöht und einen Nein-Klick um 1 subtrahiert. Hierbei soll das ganze für jeden Nutzer einzeln funktionieren. Heisst... es muss der Wert für jeden User in die DB eingetragen werden und beim nächsten Login soll der letzte Wert wieder angezeigt werden und weiter erhöht oder entsprechend subtrahiert werden.

    In einem späteren Arbeitsschritt soll das ganze auch als kleine Statistik für jeden einzelnen User ausgelesen werden können und auch eine Gesamt-Klick-Statistik... weitere mögliche Variablen sind noch in der Ideenphase.

    Habt ihr eine Idee, welches Modul eventuell genau dies anbietet? Oder auch ähnlich arbeitet und mir als Grundgerüst dienen könnte?

    Lieben Dank im Voraus.
    Geändert von firestar (27.09.2011 um 15:19 Uhr) Grund: Titel wurde geändert, da ursprüngliche Anfrage mittlerweile selbst gelöst wurde!

  2. #2
    Neu an Board
    Registriert seit
    03.07.2007
    Beiträge
    56
    Bedankte sich
    10
    1 Danksagung in 1 Beitrag

    Standard

    Ich bin jetzt so weit gekommen, dass in der Datenbank ein weiteres Feld 'wert' vorhanden ist und anfänglich mit 0 beschrieben wird. Dieser wert kann problemlos mit der Variable $wert ausgelesen werden. Klickt man nun auf 'Ja' wird der Wert um eins addiert, bei 'Nein' dann subtrahiert...

    so weit so gut... das Hoch- und Runterzählen klappt, aber wie bekomme ich jetzt den neuen Wert wieder in das Datenbankfeld rein? Im besten Fall sollte dies nach jedem ja/nein-Klick geschehen...

    Ich komm einfach nicht weiter:

    Code:
    <?php
    	$user = &JFactory::getUser();
    	$wert = $user->get('wert');
    	$step = 1;
    	if(isset($_POST['plus']))
    		{
    		$wert = $_POST['wert']; 
    		$wert+=$step;
    		} 
    
    	if(isset($_POST['minus']))
    		{
    		$wert = $_POST['wert'];  
    			if ($wert>0)
    				{
    				$wert-=$step;
    				} 
    			}
    ?>
    
    <form action=" " method="POST">	
    	<?php echo $wert; ?> /** der Wert ändert sich bei entsprechenden Klick */
    	<br /><br />
    	<input type="hidden" name="wert" value="<?php echo $wert; ?>"/>
    	<input type="submit" name="plus" value="<?php echo JText::_('Ja'); ?>" />
    	<input type="submit" name="minus" value="<?php echo JText::_('Niemals'); ?>" />
    </form>
    Geändert von firestar (24.09.2011 um 15:01 Uhr) Grund: Code hinzugefügt

  3. #3
    Neu an Board
    Registriert seit
    03.07.2007
    Beiträge
    56
    Bedankte sich
    10
    1 Danksagung in 1 Beitrag

    Standard

    Benötigt Joomla eine andere Ansprache? Ich bekomme einfach nicht den neuen Wert in der Datenbank überschrieben.

    Code:
    <?php
    
    	$db	=& JFactory::getDBO();
    	$user = &JFactory::getUser();
    	$name = $user->get('name');
    	$id = $user->get('id');
    	$wert = $user->get('wert');
    	
    	echo 'Dein Name: ' . $user->name . '<br />';
    	echo 'Deine ID: ' . $user->id . '<br />';
      	echo 'Ding-Wert: ' . $user->wert . '<br />';
      	
    	$step = 1;
    	if(isset($_POST['plus']))
    		{
    		$wert = $_POST['wert'];
    		$ergebnis = $wert+=$step;
    		
    		$sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = id"; 
    		} 
    
    	if(isset($_POST['minus']))
    		{
    		$wert = $_POST['wert'];  
    			if ($wert>0)
    				{
    				$ergebnis = $wert-=$step;
    		
    				$sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = id"; 
    				} 
    			}
    
    	mysql_query($sql);
    	mysql_close();
    	
    
    
    ?>
    </dl>
    
    <form action=" " method="POST">	
    	<?php echo $ergebnis; ?>
    	<br /><br />
    	<input type="hidden" name="wert" value="<?php echo $wert; ?>"/>
    	<input type="submit" name="plus" value="<?php echo JText::_('Ja'); ?>" />
    	<input type="submit" name="minus" value="<?php echo JText::_('Niemals'); ?>" />
    </form>
    Hierbei wird nun der Wert mit dem neuen Ergebnis überschrieben. Jedoch für alles User gleich
    Code:
    $sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = id";
    Also dachte ich, es würde so funktionieren:
    Code:
    $sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = $user->get('id')";
    Aber dabei macht er gar nichts. Es soll ja nur der Wert des angemeldeten Users geändert werden.
    Könnt ihr mir helfen?
    Geändert von firestar (27.09.2011 um 15:07 Uhr)

  4. #4
    Neu an Board
    Registriert seit
    03.07.2007
    Beiträge
    56
    Bedankte sich
    10
    1 Danksagung in 1 Beitrag

    Standard

    Zitat Zitat von firestar Beitrag anzeigen
    Benötigt Joomla eine andere Ansprache? Ich bekomme einfach nicht den neuen Wert in der Datenbank überschrieben.

    Hierbei wird nun der Wert mit dem neuen Ergebnis überschrieben. Jedoch für alles User gleich
    Code:
    $sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = id";
    Also dachte ich, es würde so funktionieren:
    Code:
    $sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = $user->get('id')";
    Aber dabei macht er gar nichts. Es soll ja nur der Wert des angemeldeten Users geändert werden.
    Könnt ihr mir helfen?
    Oh man... war wohl zu einfach... blöder Wald...

    Lösung:
    Code:
    $sql = "UPDATE jos_users SET wert = $ergebnis WHERE id = $id";

  5. #5
    Neu an Board
    Registriert seit
    03.07.2007
    Beiträge
    56
    Bedankte sich
    10
    1 Danksagung in 1 Beitrag

    Standard

    Ich habe den Tip bekommen, dass diese Lösung eine sehr unsichere ist. Also alles ohne Gewähr. Wer einen Tip zur sicheren Handhabe hat, gern her damit.

  6. #6
    War schon öfter hier
    Registriert seit
    10.05.2008
    Beiträge
    190
    Bedankte sich
    3
    Erhielt 33 Danksagungen
    in 32 Beiträgen

    Standard

    Du solltest unbedingt Dinge in den Code einbringen wie:

    PHP-Code:
    // no direct access
    defined('_JEXEC') or die('Restricted access'); 
    Auch solltest Du an SQL Injection denken und z.B. so etwas anwenden :

    PHP-Code:
    ..db->Quote$value 
    Dazu einmal in der Joomla Doku genau nachlesen WIE Datenbank Zugriffe mittels Joomla anzuwenden sind, z.B.
    PHP-Code:
     db->setQuery($query); db->query();db->getErrorNum () .... 
    .

    Auch hätte ich nicht unbedingt eine Joomla-Framework-Tabelle verändert (hast Du doch, oder ?), sondern eine eigene Tabelle dafür erstellt. Diese kann man bei Deinstallation des Modules dann auch wieder einfach entfernen lassen. Zusätzlich könnte es Probleme bei einem Joomla-Update geben.

    Das Vorgehen ist auch etwas 'oversized'. Ich würde mir z.B. die Gefahrenquelle $wert (hidden) einsparen. Du sagtest es soll je nur um Eins erhöht bzw. verringert werden ? Dann benötigst Du $wert nicht in der <form>. Ein if
    PHP-Code:
    $wert_InDB == null $wert .. insert(uid,wert); else .. if ( 'ja' $wert += 1; else $wert -= 1.update(uid,wert);  ..  (werte <0 nicht vergessen) ) 
    würde reichen. Es gibt dann nur einen einfachen Textvergleich ( auch hier würde ich kurze Zahlenkonstanten nutzen, statt 'ja','nein' ) - kein übergebener Wert könnte etwas verursachen und vorallem kann niemand $wert auf seinen eigenen Wert setzen, manipulieren, usw.... Man kann sich auch eine Datenbank-Proc schreiben die das ganze noch mehr vereinfacht countx( uid, modus[plus|minus] ).

    Gruß
    Micha

+ Antworten

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein