[Website] Item versenden Log

05/11/2014 20:48 Chyukαsame#1
Da vielen Stefan Pfeifer und Sapphire Flyff nutzen und fast jedem Teammitglied zugang zum Admin Panel geben und manche es ausnutzen, Items ohne log zu verschicken gibt es hier nun ein Update, damit nicht mehr gepusht wird :P


1. Ihr geht in euer Admin Panel und sucht die datei account_senditem.php
2. Ihr öffnet die Datei und sucht nach if(isset($_POST['senditem_sbm'])) {
3. Ihr ändert die funktion von

PHP Code:
if(isset($_POST['senditem_sbm'])) {
        
odbc_exec($odbc_connect'USE [' $_CONFIG['db_databases']['chr'] . ']');
        
$charid odbc_exec($odbc_connect'SELECT m_idPlayer FROM [CHARACTER_TBL] WHERE m_szName=\''.mssql_escape_string($_POST['character']).'\'');
        if(
odbc_num_rows($charid) == 1) {
            
odbc_exec($odbc_connect'INSERT INTO [ITEM_SEND_TBL](
            m_idPlayer, serverindex, Item_Name, Item_count, m_nAbilityOption, m_bItemResist, m_nResistAbilityOption, idSender, nPiercedSize
            ) VALUES(
            \''
.mssql_escape_string(odbc_result($charid'm_idPlayer')).'\',
            \'01\',
            \''
.mssql_escape_string($_POST['itemname']).'\',
            \''
.mssql_escape_string($_POST['count']).'\',
            \''
.mssql_escape_string($_POST['upgrade']).'\',
            \''
.mssql_escape_string($_POST['element']).'\',
            \''
.mssql_escape_string($_POST['elementupgrade']).'\',
            \'0000000\',
            \''
.mssql_escape_string($_POST['piercing']).'\'
            )'
);
            echo 
'<div class="success">The item has successfully been send!</div>';
        } else {
            echo 
'<div class="fail">Character does not exist!</div>';
        }
    } 
zu

PHP Code:
if(isset($_POST['senditem_sbm'])) {
        
$charid odbc_exec($odbc_connect'SELECT m_idPlayer FROM [' $_CONFIG['db_databases']['chr'] . '].dbo.[CHARACTER_TBL] WHERE m_szName=\''.mssql_escape_string($_POST['character']).'\'');
        
$charname odbc_exec($odbc_connect'SELECT m_szName FROM [' $_CONFIG['db_databases']['chr'] . '].dbo.[CHARACTER_TBL] WHERE m_szName=\''.mssql_escape_string($_POST['character']).'\'');
        if(
odbc_num_rows($charid) == 1) {        
        
            
$ItemSendToCharakter '
                INSERT INTO [' 
$_CONFIG['db_databases']['chr'] . '].dbo.[ITEM_SEND_TBL] (
                    m_idPlayer, serverindex, Item_Name, Item_count, m_nAbilityOption, m_bItemResist, m_nResistAbilityOption, idSender, nPiercedSize
                ) VALUES(
                    \''
.mssql_escape_string($_SESSION['user']).'\',
                    \''
.mssql_escape_string(odbc_result($charid'm_idPlayer')).'\',
                    \'01\',
                    \''
.mssql_escape_string($_POST['itemname']).'\',
                    \''
.mssql_escape_string($_POST['count']).'\',
                    \''
.mssql_escape_string($_POST['upgrade']).'\',
                    \''
.mssql_escape_string($_POST['element']).'\',
                    \''
.mssql_escape_string($_POST['elementupgrade']).'\',
                    \'0000000\',
                    \''
.mssql_escape_string($_POST['piercing']).'\'
                )
            '
;
                
            
$ItemSendLog '
                INSERT INTO [' 
$_CONFIG['db_databases']['web'] . '].dbo.[LOG_SENDITEM] (
                    von, an, itemname, count, upgrade, element, elementupgrade, piercing
                ) VALUES(
                    \''
.mssql_escape_string(odbc_result($charname'm_szName')).'\',
                    \''
.mssql_escape_string($_POST['itemname']).'\',
                    \''
.mssql_escape_string($_POST['count']).'\',
                    \''
.mssql_escape_string($_POST['upgrade']).'\',
                    \''
.mssql_escape_string($_POST['element']).'\',
                    \''
.mssql_escape_string($_POST['elementupgrade']).'\',
                    \''
.mssql_escape_string($_POST['piercing']).'\'
                )
            '
;            
            if(@
odbc_exec($odbc_connect$ItemSendToCharakter) AND @odbc_exec($odbc_connect$ItemSendLog)) {
            echo 
createMessage('Das Item wurde erfolgreich versendet''success');
            }
            else {
                echo 
createMessage('Das Item konnte leider nicht versendet werden''fail');
            }
        } else {
            echo 
'<div class="fail">Character does not exist!</div>';
        }
    } 

4. Dann geht ihr in eure Datenbank und führt dieses Script aus

Code:
USE [WEBSITE_DBF]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[LOG_SENDITEM](
	[sid] [int] IDENTITY(1,1) NOT NULL,
	[von] [varchar](50) NULL,
	[an] [varchar](50) NULL,
	[itemname] [varchar](50) NOT NULL,
	[count] [int] NOT NULL,
	[upgrade] [int] NOT NULL,
	[element] [int] NOT NULL,
	[elementupgrade] [int] NULL,
	[piercing] [int] NULL,
 CONSTRAINT [web_senditemlogs] PRIMARY KEY CLUSTERED 
(
	[sid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

Nun lassen wir es noch wiedergeben in den den "Diverse Logs"

Dafür geht ihr in die list_database.php und fügt unter
PHP Code:
<input type="submit" name="logins" value="Websitelogins" /> 
das hier ein
PHP Code:
<br /><br />
<
input type="submit" name="SendItems" value="Versendete Items" /> 
dann sucht ihr nach elseif( isset($_GET['GSRanking']) ){ und fügt darüber das hier ein

PHP Code:
    elseif(isset($_GET['SendItems'])){
        
odbc_exec($odbc_connect'USE [' $_CONFIG['db_databases']['web'] . ']');
        
$select odbc_exec($odbc_connect'SELECT TOP 100 * FROM [LOG_SENDITEM] ORDER BY [sid] ASC');
        if( 
odbc_num_rows($select) == ){
            echo 
'<div class="fail">'.$lang['db_no_del'].'</div>';
        }
        else {
            echo 
'
            <table cellspacing="0">
                <thead>
                    <tr>
                        <td>&nbsp;</td>
                        <td>Von</td>
                        <td>An</td>
                        <td>Itemname</td>
                        <td>Anzahl</td>
                        <td>Upgrade</td>
                        <td>Element</td>
                        <td>Element Upgrade</td>
                        <td>Sockel Anzahl</td>
                    </tr>
                </thead>
                <tbody>'
;
            while(
$result odbc_fetch_array($select)){
                echo 
'
                    <tr>
                        <td>('
.$result['sid'].')</td>
                        <td>'
.$result['von'].'</td>
                        <td>'
.$result['an'].'</td>
                        <td>'
.$result['itemname'].'</td>
                        <td>'
.$result['count'].'</td>
                        <td>'
.$result['upgrade'].'</td>
                        <td>'
.$result['element'].'</td>
                        <td>'
.$result['elementupgrade'].'</td>
                        <td>'
.$result['piercing'].'</td>
                    </tr>'
;
            }
            echo 
'
    </tbody>
</table>'
;
        }
        echo 
'
    <br />
    <a href="list_database.php">'
.$lang['panel_back'].'</a>';
    } 


Am Ende sieht es dann so aus
[Only registered and activated users can see links. Click Here To Register...]
05/12/2014 08:18 Drabur#2
Quote:
\''.mssql_escape_string($_POST['itemname']).'\',
\''.mssql_escape_string($_POST['count']).'\',
\''.mssql_escape_string($_POST['upgrade']).'\',
\''.mssql_escape_string($_POST['element']).'\',
\''.mssql_escape_string($_POST['elementupgrade']).'\',
Du wolltest doch wissen, was ich an der Seite kake finde. Das ist ein Beispiel.
05/12/2014 08:35 Sedrika#3
Die Art zu escapen ist scheisse. Sende die werde als hex value ab.
05/12/2014 10:33 Drabur#4
Wenn man es so machen soll, sollte man einfach alle Variablen die vom Browser kommen via schleife durchlaufen lassen.
05/12/2014 10:55 xTwiLightx#5
Wenn man es sicher haben will, kann man auch Prozeduren benutzen, welche sp_executesql verwenden. Da wird dann auch gleich escaped...
05/12/2014 15:41 Chyukαsame#6
Ey Leute, nehmt es mir nicht böse aber meine php Erfahrung ist nicht die Beste und es ist nur ein Release der vielen Admins helfen kann und auch gut funktioniert.


Ich hatte gerade ne OP, doch ihr nehmt echt keinen halt mich nur fertig zu machen O.o
05/12/2014 17:50 Sedrika#7
Ich sehe hier gerade nicht, dass du von uns fertig gemacht wirst.

Ich habe dir als vorschlag gesagt, dass du die Werte als Hex Values abschicken kannst (natürlich ausgenommen sind Zahlen) und du könntest dir das ansehen und dir dann auch aneignen wie das geht (Erfahrung++).

Mirko hat dann dazu gesagt, dass man die Werte die man bekommt im Browser durchlaufen lassen und so escapen lassen kann.

Twilight hat geschrieben, dass man Prozeduren verwenden kann welche sp_executesql nutzen, da dort bereits escaped wird. Könntest du dir auch ansehen und wieder dazulernen (Erfahrung++)

Könntest also hier zwei neue sachen mindestens lernen.

Und das du eine OP hattest denke ich interessiert nicht irgendjemanden und kann ggf. ja wohl auch keiner wissen oder etwa doch?
05/12/2014 21:31 Chyukαsame#8
Quote:
Originally Posted by Sedrika View Post
Ich sehe hier gerade nicht, dass du von uns fertig gemacht wirst.

Ich habe dir als vorschlag gesagt, dass du die Werte als Hex Values abschicken kannst (natürlich ausgenommen sind Zahlen) und du könntest dir das ansehen und dir dann auch aneignen wie das geht (Erfahrung++).

Mirko hat dann dazu gesagt, dass man die Werte die man bekommt im Browser durchlaufen lassen und so escapen lassen kann.

Twilight hat geschrieben, dass man Prozeduren verwenden kann welche sp_executesql nutzen, da dort bereits escaped wird. Könntest du dir auch ansehen und wieder dazulernen (Erfahrung++)

Könntest also hier zwei neue sachen mindestens lernen.

Und das du eine OP hattest denke ich interessiert nicht irgendjemanden und kann ggf. ja wohl auch keiner wissen oder etwa doch?
Oh man sago ._.
Warum kann ich das denn nicht so lassen sondern muss erst wieder googeln was escapen und sp_executesql ist....

Und doch ich hatte es letztens im Ts erwähnt p.p
05/13/2014 17:42 xTwiLightx#9
Du benutzt mssql_escape_string und weißt nicht, was escapen ist?
Ist ein bisschen schwach, wenn man sich mit Webentwicklung befasst. :D

An sich ist sowas ja nett, dann kann man zumindest nachvollziehen, was gekauft worden ist. Jedoch finde ich die Bedingung, dass beides funktionieren muss nicht gut (also dass es mit AND verknüpft wurde) - denn egal was kommt, eine der beiden Querys wird dann trotzdem ausgeführt. :)

Bezieht sich auf folgende Zeile:
Code:
if(@odbc_exec($odbc_connect, $ItemSendToCharakter) AND @odbc_exec($odbc_connect, $ItemSendLog)) {
Ich persönlich würde es lieber verschachteln und jede Bedingung einzeln prüfen.
05/13/2014 18:43 Chyukαsame#10
Wieso gekauft?
Nein es geht um das Item Versenden im ACP.

[Only registered and activated users can see links. Click Here To Register...]


Dies haben viele immer ausgenutzt als GM oder Developer da es nicht geloggt wird.
Da ich es dann oft mit bekam und es mich ärgerte das gepusht wurde ohne das man sehen konnte wer es war habe ich ein Log dazu geschrieben.

Für den allgemeinen Shop gibt es schon ein log ;D
LOG_GIFT