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

Problem mit chat_delete.php
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=3033
Seite 1 von 1

Autor:  Drazaar [ So 22 Okt, 2006 14:04 ]
Betreff des Beitrags:  Problem mit chat_delete.php

So. Könnte kompliziert werden. Wenn mir wer helfen könnte, wäre es aber sehr sehr nett :)

Ich beginne mal von ganz vorne.

Seit kurzem habe ich die RP-Charas eingebaut. Darum handelt es sich eigentlich um nichts weiter als ein DB-Feld, das "rpchar" (1 für RP-Char, 0 für ganz normaler Waldkampfchara) heißt. Ein RP-Char bekommt bei mir einen farblosen Titel und dafür sämtliche addnavs gesperrt, die zu den wesentlichen Teilen des Spiels führen könnten, es sei denn, man kann dort RP betreiben.
[php]
Z.B. if($session['user']['rpchar']!=1) addnav("Wald","forest.php");
[/php]
Ganz izi.

Für die Belohnung gibt es eine Änderung in der addcommentary. Die sieht so aus:

[php]
if ($row[comment]!=stripslashes($commentary) || $row[author]!=$session[user][acctid]){
// if ($row[comment]!=$commentary || $row[author]!=$session[user][acctid]){
$sql = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'$section',".$session[user][acctid].",\"$commentary\")";
/*$whitesections = array(
'villageot' => true,
'infohaus' => true,
);*/
$postpoints = round(count(explode(' ',$commentary))/50);
if (count(explode(' ',$commentary)) >=50 && $section!="villageot" && $section!="infohaus"){
if($session['user']['rpchar']==1) $session['user']['donation']+=$postpoints;
$session['user']['rpgposts']++;
}


db_query($sql) or die(db_error(LINK));
return true;[/php]

Für einen Post über ~50 Wörter bekommt man pro 50 Wörter also 1 DP. Für ~100 Wörter 2 DP für 200 Wörter 4 DP, ganz logisch, ne?^^

Gut. Nun gibts ein Problem. Und zwar habe ich die Chatdelete installiert auf Vinestra. Heißt man kann seine Postings löschen. Naja nur ist das System nicht darauf gebaut, dass man DPs für seine Postings bekommen kann. Ergo: Es soll ermitteln wie lange der Kommentar war und dann die Anzahl von DPs abziehen.

Die chat_delete.php sieht so aus:
[php]
<?php
require_once "common.php";
//Gleichnamige Variable aus der viewcommentary();
//$section=$_GET[section];

$sql = "DELETE FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1 ";
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);

?>[/php]

Nach einer Änderung von mir, welche allerdings nicht hinhaut so:
[php]
<?php
require_once "common.php";
//Gleichnamige Variable aus der viewcommentary();
//$section=$_GET[section];

$sql = "SELECT `comment` FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1";
$result = db_query($sql);
$row = db_fetch_assoc($result);

$points = round(count(explode(' ',$row))/50);
if (count(explode(' ',$row)) >=50 && $_GET['section']!="villageot" && $_GET['section']!="infohaus"){
if($session[user][rpchar]==1) $session[user][donation]-=$points;
$session[user][rpgposts]--;
}


$sql = "DELETE FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1 ";
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);

?>[/php]

So nun die Frage: Wie zur Hölle muss das aussehen, dass es funktioniert? *ratlos ist*

MfG Draz

PS: "villageot" & "infohaus" sind 2 OOC Offtopicbereiche bei uns, welche keine RP Punkte geben, deshalb werden sie ausgeschlossen.

Autor:  Auric [ So 22 Okt, 2006 14:29 ]
Betreff des Beitrags: 

Du beziehst die Zählung nur auf $row, nicht auf $row['comment']

So sollte es allerdinsg funktionieren (und sieht nopch ein bisschen Ordentlicher aus:

[php]<?php
require_once "common.php";
//Gleichnamige Variable aus der viewcommentary();
//$section=$_GET[section];

$sql = "SELECT `comment` FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1";
$result = db_query($sql);
$row = db_fetch_assoc($result);

if($session['user']['rpchar']) $session['user']['rpgpoints'] -= floor(str_word_count($row['comment'])/50);

$sql = "DELETE FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1 ";
db_query($sql);
$return = $_GET["return"];
redirect($return);

?>[/php]

Grüße
Auric

Autor:  Drazaar [ So 22 Okt, 2006 14:50 ]
Betreff des Beitrags: 

2 kleine Probleme:
- Das Feld "rpgpoints" gibt's net, das ist schlichtweg das Feld "donation".
- Es fehlen 2 Dinge:
    ~ Das Feld "rpgposts" soll (auch für normalcharas) um eins verringert werden.
    ~ Wenn man ein Posting am Ort "villageot" oder "infohaus" macht, sollen keine DP abgezogen werden, auch rpgposts soll nicht verringert werden.


Frage noch: Was macht die Funktion floor()?

Autor:  Auric [ So 22 Okt, 2006 14:53 ]
Betreff des Beitrags: 

naja das bekommst du aber doch wohl noch selber hin, oder?

:D

Autor:  Drazaar [ So 22 Okt, 2006 14:54 ]
Betreff des Beitrags: 

Eigentlich...ja^^

Wollte es auch mehr anmerken, als eine LÖsung dafür...

Aber was floor() nun ist, wüsste ich trotzdem gerne *g*

€:

[php]
<?php
require_once "common.php";
//Gleichnamige Variable aus der viewcommentary();
//$section=$_GET[section];

$sql = "SELECT `comment` FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1";
$result = db_query($sql);
$row = db_fetch_assoc($result);

if($_GET['section']!="infohaus" && $_GET['section']!="villageot"){
if($session['user']['rpchar']) $session['user']['donation'] -= floor(str_word_count($row['comment'])/50);
$session['user']['rpgposts']--;
}

$sql = "DELETE FROM `commentary` WHERE `author` = ".$session[user][acctid]." AND `section` = '".$_GET[section]."' ORDER BY postdate DESC LIMIT 1 ";
db_query($sql);
$return = $_GET["return"];
redirect($return);

?>[/php]

So sieht das nun bei mir aus, nur falls es wen interessiert ;)

Ich bedanke mich ganz herzlich Auric :wink:

MfG Draz :)

Autor:  Eliwood [ So 22 Okt, 2006 15:29 ]
Betreff des Beitrags: 

floor() ist abrunden ;)

Autor:  Drazaar [ So 22 Okt, 2006 21:30 ]
Betreff des Beitrags: 

wtf ist dann round()?
Das Selbe? Und wie runden die überhaupt? Nach normalen mathematischen regeln, ergo bis 4 abrunden, ab 5 aufrunden?

€: Lesen > me. Du hast ja ABrunden geschrieben Oo

Autor:  Auric [ So 22 Okt, 2006 22:14 ]
Betreff des Beitrags: 

genau... round rundet kaufmännisch, (da kann mann auch angeben, bis zu welcher Stelle)
floor rundet ab und ceil rundet auf.

Ansonsten einfach mal bei php.net nachschlagen.. sind ganz sinnvol, die funktionen.

Autor:  Anduriell [ Di 12 Jun, 2007 20:02 ]
Betreff des Beitrags: 

hat sich erledigt

Autor:  Anduriell [ Di 12 Jun, 2007 20:47 ]
Betreff des Beitrags: 

hat sich erledigt

Autor:  -DoM [ Di 12 Jun, 2007 22:36 ]
Betreff des Beitrags: 

Auric hat geschrieben:
genau... round rundet kaufmännisch, (da kann mann auch angeben, bis zu welcher Stelle)
floor rundet ab und ceil rundet auf.

Ansonsten einfach mal bei php.net nachschlagen.. sind ganz sinnvol, die funktionen.

Schreib doch wenigstens auch noch dazu was kaufmännisch Runden ist, bzw. funktioniert.....

1-4 wird abgerundet, 5-9 wird aufgerundet.....

Ich weiss, bin ein alter Klugscheisser, aber ich stehe dazu...*fg*

Autor:  Auric [ Mi 13 Jun, 2007 16:26 ]
Betreff des Beitrags: 

einmal abgesehen davon ist das, was du da schreibst nicht richtig, es geht ja im normallfall nicht um runden auf die Zehnerstelle, sondern genau genommen um die stelle vor jener, auf die gerundet werden soll. Bei dieser wird bei weniger als der Hälfte ab und bei 50% oder mehr aufgerudet:

Auf ganze Zahl runden (Klassisches Beispiel, Standard)
X,0 bis X,4periode9 -> X
X,5 bis X,9preiode9 -> X+1

Autor:  Eliwood [ Mi 13 Jun, 2007 16:45 ]
Betreff des Beitrags: 

Auric hat geschrieben:
Auf ganze Zahl runden (Klassisches Beispiel, Standard)
X,0 bis X,8periode9 -> X
X,5 bis X,9preiode9 -> X+1


*hust*

Zitat:
Auf ganze Zahl runden (Klassisches Beispiel, Standard)
X,0 bis X,4periode9 -> X
X,5 bis X,9preiode9 -> X+1


... Wobei 0.periodisch9 sowieso identisch mit 1 ist, denn:
$this->bbcode_second_pass_code('', '
1/3 = 0.periodisch3
3 * 1/3 = 3 * 0.periodisch3
1 = 0.periodisch9')

Autor:  Auric [ Mi 13 Jun, 2007 17:53 ]
Betreff des Beitrags: 

Eliwood hat geschrieben:
... Wobei 0.periodisch9 sowieso identisch mit 1 ist, denn:
$this->bbcode_second_pass_code('', '
1/3 = 0.periodisch3
3 * 1/3 = 3 * 0.periodisch3
1 = 0.periodisch9')


"1/3 = 0.periodisch3" ist im Prinzip eine Ungenauigkeit! Desshalb kann man das auch nicht auf "1 = 0.periodisch9" zurückrechnen. Mag zwar möglich erscheinen, stimmt aber letztenendes nicht, denn 0,periode9 < 1.
Deine Beispierechnung mag zwar in der Praxis anwendbar, aber genauso gut kann ich dann behaupten: 3 = 1 denn:

Eine Katze hat einen Schwanz, ist klar, oder?
Es gibt keine Katze mit zwei Schwänzen... normalerweise jedenfalls nicht.
Eine Kastze plus keine Katze ist immer noch eine Katze, aber mit drei Schwänzen. (0 + 1 = 1; 2 + 1 = 3)

Also immer schön aufpassen, mit Mathematischen Beweisen ^^
Fakt ist 0,periode9 < 1, es hat eben Asymptotischen Charakter


PS: Die 8 war allerdings wirklich ein Tippfehler *g*

Autor:  Eliwood [ Mi 13 Jun, 2007 18:40 ]
Betreff des Beitrags: 

Auric hat geschrieben:
Eliwood hat geschrieben:
... Wobei 0.periodisch9 sowieso identisch mit 1 ist, denn:
$this->bbcode_second_pass_code('', '
1/3 = 0.periodisch3
3 * 1/3 = 3 * 0.periodisch3
1 = 0.periodisch9')


"1/3 = 0.periodisch3" ist im Prinzip eine Ungenauigkeit! Desshalb kann man das auch nicht auf "1 = 0.periodisch9" zurückrechnen. Mag zwar möglich erscheinen, stimmt aber letztenendes nicht, denn 0,periode9 < 1.
Deine Beispierechnung mag zwar in der Praxis anwendbar, aber genauso gut kann ich dann behaupten: 3 = 1 denn:

Eine Katze hat einen Schwanz, ist klar, oder?
Es gibt keine Katze mit zwei Schwänzen... normalerweise jedenfalls nicht.
Eine Kastze plus keine Katze ist immer noch eine Katze, aber mit drei Schwänzen. (0 + 1 = 1; 2 + 1 = 3)

Also immer schön aufpassen, mit Mathematischen Beweisen ^^
Fakt ist 0,periode9 < 1, es hat eben Asymptotischen Charakter


PS: Die 8 war allerdings wirklich ein Tippfehler *g*


2 reelle Zahlen x und y sind dann verschieden, wenn es zwischen ihnen mindestens eine reelle Zahl z gibt. Zwischen 0.999... und 1 gibt es aber keine solche Zahl z - also müssen 0.999.. und 1 gleich sein. :D

So, nun genug geschwafelt.. Sollte eigentlich nur ne Hintergrundinfo sein *g*

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