anpera.net
https://anpera.dyndns.org/phpbb3/

Abzug von Rp-Punkten beim Löschen aus der Grotte
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=5085
Seite 1 von 1

Autor:  Nomegz [ Di 02 Feb, 2010 19:44 ]
Betreff des Beitrags:  Abzug von Rp-Punkten beim Löschen aus der Grotte

Huhu alle zu'samm!

Ich würd' gern aus meiner Grotte aus die Beiträge auf den erlaubten Plätzen löschen und somit auch die dafür bekommenen Rp-Punkte wieder abziehen. Ich hab das dann versucht in der superuser.php zu proggen, aber irgendwie passiert (außer dem Löschen) dort rein gar nichts. Meiner Meinung nach sollte es aber eigentlich klappen ô.O.
Würde mich freuen, wenn einer von Euch bei dem Problem helfen könnte.


superuser.php
$this->bbcode_second_pass_code('', 'if ($_GET[op]=="commentdelete"){
/*
Rp-Punkte abziehen
Anfang
*/
$result = db_query("SELECT * FROM commentary WHERE commentid='$_GET[commentid]'") or die(db_error(LINK));
$row = db_fetch_assoc($result);

$nichterlaubt = array("ooc"=>"1","lodge"=>"1","jail"=>"1","superuser"=>"1","todolist"=>"1");

if($nichterlaubt[$row['section']]!=1) {
$ergebnis = db_query("SELECT acctid,donation,rppunkte FROM accounts WHERE acctid='$row[author]'") or die(db_error(LINK));
$zeile = db_fetch_assoc($ergebnis);

$abzug = floor((strlen($row['comment']))/150);

$anzahldp = $zeile['donation'] - $abzug;
$anzahlrp = $zeile['rppunkte'] - $abzug;

db_query("UPDATE `accounts` SET `rppunkte`='".$anzahlrp."', `donation`='".$anzahldp."' WHERE `acctid`=".$zeile['acctid']);
}

/*
Rp-Punkte abziehen
Ende
*/
$sql = "DELETE FROM commentary WHERE commentid='$_GET[commentid]'";
db_query($sql);
$return = $_GET['return'];
$return = preg_replace("'[?&]c=[[:digit:]-]*'","",$return);
$return = substr($return,strrpos($return,"/")+1);
if (strpos($return,"?")===false && strpos($return,"&")!==false){
$x = strpos($return,"&");
$return = substr($return,0,$x-1)."?".substr($return,$x+1);
}
redirect($return);
}')

Autor:  anpera [ Di 02 Feb, 2010 19:58 ]
Betreff des Beitrags:  Re: Abzug von Rp-Punkten beim Löschen aus der Grotte

Sei froh, dass nichts passiert :D

db_query("UPDATE `accounts` SET `rppunkte`='".$anzahlrp."', `donation`='".$anzahldp."' WHERE `acctid`=".$session['user']['acctid']);

Das würde DIR die Punkte abziehen, und nicht wie gewünscht dem Autor.
Das klappt glücklicherweise aber auch nicht, da in der common.php deine Accountinformation mit den Daten aus der Sitzung aktualisiert wird, und dadurch jede über UPDATE gemachte Änderung sofort wieder überschrieben wird.

Korrigiere deinen Datenbankbefehl, dann sehen wir weiter. :)

Autor:  Nomegz [ Di 02 Feb, 2010 20:04 ]
Betreff des Beitrags:  Re: Abzug von Rp-Punkten beim Löschen aus der Grotte

Der Fehler ist mir selbst eben auch schon aufgefallen. Wollte das so eigentlich gar nicht hier so posten. :P

Aber auch wenn ich es ändere passiert dort rein gar nichts:


$this->bbcode_second_pass_code('', 'db_query("UPDATE `accounts` SET `rppunkte`='".$anzahlrp."', `donation`='".$anzahldp."' WHERE `acctid`=".$zeile['acctid']);')

Autor:  Eliwood [ Di 02 Feb, 2010 21:22 ]
Betreff des Beitrags:  Re: Abzug von Rp-Punkten beim Löschen aus der Grotte

1) $row['author'] anstatt $zeile['acctid'] nehmen. Sollten zwar beide den gleichen Wert haben, aber prinzipiell sollte man sich immer auf den gleichen Grundwert beziehen. Dient auch der Übersichtlichkeit, dass da niemand anders gemeint ist.
2) Du versuchst hoffentlich nicht einen deiner Posts zu löschen? ;)
3) Kommt das Script überhaupt in den RP-Abzugs-Bereich? Teste das mal, in dem du da eine Ausgabe machst und danach abbrichst mit exit;
4) Kannst du auch mal den Rückgabewert von db_query beim abziehen testen. Bzw. mithilfe db_affected_rows testen, ob überhaupt was geändert wurde.

Autor:  Nomegz [ Di 02 Feb, 2010 23:33 ]
Betreff des Beitrags:  Re: Abzug von Rp-Punkten beim Löschen aus der Grotte

Eliwood hat geschrieben:
2) Du versuchst hoffentlich nicht einen deiner Posts zu löschen? ;)


Hehe. Ich glaub ich brauch nichts weiter zu sagen...
Hab das wohl bei anpera nicht ganz gerallt. Danke für die Hilfe.


:?:

Aber man könnte da doch nun noch 'ne Überprüfung einbauen, ob der gelöschte Beitrag nicht von einem selber ist.

Hier der neue Code (getestet und funktioniert :D ):

$this->bbcode_second_pass_code('', 'if ($_GET[op]=="commentdelete"){
/*
Rp-Punkte abziehen
Anfang
*/
$result = db_query("SELECT * FROM commentary WHERE commentid='$_GET[commentid]'") or die(db_error(LINK));
$row = db_fetch_assoc($result);

$nichterlaubt = array("ooc"=>"1","lodge"=>"1","jail"=>"1","superuser"=>"1","todolist"=>"1");

if($nichterlaubt[$row['section']]!=1) {
$ergebnis = db_query("SELECT donation,rppunkte FROM accounts WHERE acctid='$row[author]'") or die(db_error(LINK));
$zeile = db_fetch_assoc($ergebnis);

$abzug = floor((strlen($row['comment']))/150);

if ($row['author'] == $session['user']['acctid']) {
$session['user']['donation']-=$abzug;
$session['user']['rppunkte']-=$abzug;
} else {
$anzahldp = $zeile['donation']-$abzug;
$anzahlrp = $zeile['rppunkte']-$abzug;

db_query("UPDATE accounts SET rppunkte='".$anzahlrp."', donation='".$anzahldp."' WHERE acctid=".$row[author]);
}
}

/*
Rp-Punkte abziehen
Ende
*/
$sql = "DELETE FROM commentary WHERE commentid='$_GET[commentid]'";
db_query($sql);
$return = $_GET['return'];
$return = preg_replace("'[?&]c=[[:digit:]-]*'","",$return);
$return = substr($return,strrpos($return,"/")+1);
if (strpos($return,"?")===false && strpos($return,"&")!==false){
$x = strpos($return,"&");
$return = substr($return,0,$x-1)."?".substr($return,$x+1);
}
redirect($return);
}')

Autor:  Eliwood [ Mi 03 Feb, 2010 10:59 ]
Betreff des Beitrags:  Re: Abzug von Rp-Punkten beim Löschen aus der Grotte

Das ist einer der häufigsten Fehler, keine Sorge. Man erwartet es halt nicht. LotGD ist da... Nun, wenn man noch nicht jeden Winkel kennt, wirkt manches wie Magie. In dem Fall eher Negativ gemeint.

Aber schön, dass es doch funktioniert. Glückwunsch.

Jetzt nur noch bei deinem Link im Profil zum Spiel das htpp durch http ersetzen... :D

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/