[Problem]Mt2 CMS by hen! Items kommen 2x

01/04/2011 04:28 .Zander#1
Hallo, immer wenn User bei mir etwas im Itemshop kaufen, kommt es 2x an, und es werden auch 2x Coins abgezogen?
Weiss jemand, an was das liegt?
mfg
Zander
01/04/2011 09:35 Deathy.#2
#push

selbes problem allerdings lässt sich bei mir nur ein item davon rausnehmen und das zweite
verschwindet beim erneuten öffnen des lagers

Lg,

Deathy
01/04/2011 10:32 **TERROR**#3
vllt nur einmal auf "Kaufen" klicken^^
01/04/2011 10:40 RivathaX#4
Da stimmt dann etwas mit dem Script selber nicht kannst du bitte mal die Scripts dazu Posten
Vom IS allgemein?
01/04/2011 14:13 .Zander#5
Jo, mach ich gleich
01/04/2011 14:30 Scrawler™#6
also ich benutze diese hier und die funktionieren einwandfrei.
(getestet auf lokalen hamachi)

is_buy.php
PHP Code:
<?PHP

  
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
  
    if(isset(
$_GET['id']) && checkInt($_GET['id'])) {
    
      
$sqlCmd="SELECT vnum, preis, attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3, attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, socket0, socket1, socket2 FROM ".SQL_HP_DB.".is_items WHERE id='".$_GET['id']."' LIMIT 1";
      
$sqlQry=mysql_query($sqlCmd,$sqlHp);
      if(
mysql_num_rows($sqlQry)==1) {
      
        
$getItem=mysql_fetch_object($sqlQry);
        if(
$_SESSION['user_coins']>=$getItem->preis) {
      
          
$getGroesse compareItems($getItem->vnum);
          
$belPos checkPos($_SESSION['user_id']);
          
$possiblePos findPos($belPos['islager'],$getGroesse['groesse']);
          if(!empty(
$possiblePos)) {
          
            
$sqlCmd="UPDATE account.account SET coins=coins-".$getItem->preis." WHERE id='".$_SESSION['user_id']."' LIMIT 1";
            
$sqlQry=mysql_query($sqlCmd,$sqlServ);
            
$sqlLog="INSERT INTO ".SQL_HP_DB.".is_log (account_id,vnum,preis,zeitpunkt) VALUES ('".$_SESSION['user_id']."','".$getItem->vnum."','".$getItem->preis."','".$sqlZeit."')";
            
$qryLog=mysql_query($sqlLog,$sqlHp);
            
$sqlItem="INSERT INTO player.item 
            (owner_id,window,pos,count,vnum,attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3, attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, socket0, socket1, socket2)
            VALUES 
            ('"
.$_SESSION['user_id']."','MALL','".$possiblePos[0]."','1','".$getItem->vnum."','".$getItem->attrtype0."', '".$getItem->attrvalue0."', '".$getItem->attrtype1."', '".$getItem->attrvalue1."', '".$getItem->attrtype2."', '".$getItem->attrvalue2."', '".$getItem->attrtype3."', '".$getItem->attrvalue3."', '".$getItem->attrtype4."', '".$getItem->attrvalue4."', '".$getItem->attrtype5."', '".$getItem->attrvalue5."', '".$getItem->attrtype6."', '".$getItem->attrvalue6."', '".$getItem->socket0."', '".$getItem->socket1."', '".$getItem->socket2."')";
            
$qryItem=mysql_query($sqlItem,$sqlServ) or die(mysql_error());
            echo
'<p class="meldung">Das item wurde erfolgreich gekauft. Sollte das Item nicht im Lager erscheinen, bitte umgehend bei einem Admin melden.</p>';
            
          }
          else {
            echo
'<p>Sie haben nicht genügend Platz in ihrem Itemshop-Lager. Ihr Guthaben wurde nicht verändert.</p>';
          }
          
        }
        else {
          echo
'<p class="meldung">Sie haben nicht genug Coins.</p>';
        }
      }
      else {
        echo
'<p class="meldung">Das angegebe Item existiert nicht.</p>';
      }
    }
    else {
      echo
'<p class="meldung">Es wurde keine gültige ID eingegeben.</p>';
    }
    echo
'<p><a href="javascript:history.back()">zurück</a></p>';
  }
  else {
    echo
'<p class="meldung">Sie müssen für diesen Bereich angemeldet sein.</p>';
  }
?>
itemshop.php

PHP Code:
<?PHP

  
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
    if(isset(
$_GET['k']) && checkInt($_GET['k'])) {
      
$sqlCmdS="SELECT * FROM ".SQL_HP_DB.".is_items WHERE kategorie_id='".$_GET['k']."' ORDER BY id DESC";
    }
    else {
      
$sqlCmdS="SELECT * FROM ".SQL_HP_DB.".is_items ORDER BY id DESC";
    }
  
?>
  <div id="isleft">
    <h2>Guthaben</h2>
    <p><b><?PHP echo $_SESSION['user_coins']; ?> Coins</b></p>
    <h2>Kategorien</h2>
    <ul>
      <?PHP
        $sqlCmd 
"SELECT * FROM ".SQL_HP_DB.".is_kategorien ORDER BY titel ASC;";
        
$sqlQry mysql_query($sqlCmd,$sqlHp);
        while(
$getKats mysql_fetch_object($sqlQry)) {
          echo
'<li><a href="index.php?s=itemshop&k='.$getKats->id.'">'.$getKats->titel.'</a></li>';
        }
      
?>
    </ul>
  </div>
  <div id="isright">
    <h2>Itemshop</h2>
      <table>
    <?PHP
      $sqlQry
=mysql_query($sqlCmdS,$sqlHp);
      while(
$getItems=mysql_fetch_object($sqlQry)) {
        
$aktItem compareItems($getItems->vnum);
        
$itemStufe = (checkInt($aktItem['stufe'])) ? "+".$aktItem['stufe'] : '';
        
?>
        <tr>
          <th colspan="2" class="topLine"><?PHP echo $aktItem['item'].$itemStufe?> (<b><?PHP echo $getItems->preis?> Coins</b>)</th>
        </tr>
        <tr>
          <td class="isImg">
            <?PHP 
              
if(!empty($getItems->bild)) echo'<img src="./is_img/'.$getItems->bild.'" title="'.$aktItem['item'].'" alt="'.$aktItem['item'].'"/>';
            
?>
          </td>
          <td class="tdunkel"><?PHP echo $getItems->beschreibung?></td>
        </tr>
        <tr>
          <td colspan="2" class="isBuy"><a href="index.php?s=is_buy&id=<?PHP echo $getItems->id?>">Kaufen</a></td>
        </tr>
        <?PHP
      
}
    
?>
      </table>
  </div>
  <?PHP
  
}
  else {
    echo
'<p class="meldung">Sie müssen für diesen Bereich angemeldet sein.</p>';
  }
?>
probier es mal damit ist auch von hen!, bloss anders ranngekommen.
weiss leider nicht ob das in seinem 1.3 cms das selbe ist da ich es von wo anders her hab was aber zu hen! gehört.
01/04/2011 15:39 .Zander#7
Meins schaut so aus
Itemshop.php:
PHP Code:
<div id="content">            <div class="postui2 text-title">
                    <h2>
             Vipmt2-Reloaded ItemSh0p
                    
                    </h2>
                
                </div>
                <div class="postui2 text-con">
                <div class="con-wrap">
<?PHP

  
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
    if(isset(
$_GET['k']) && checkInt($_GET['k'])) {
      
$sqlCmdS="SELECT * FROM ".SQL_HP_DB.".is_items WHERE kategorie_id='".$_GET['k']."' ORDER BY id DESC";
    }
    else {
      
$sqlCmdS="SELECT * FROM ".SQL_HP_DB.".is_items ORDER BY id DESC";
    }
  
?>
<table width="100%" border="0" >
 <tr>
         <td class="tdunkel" align="center">
         
      <?PHP
        $sqlCmd 
"SELECT * FROM ".SQL_HP_DB.".is_kategorien ORDER BY titel ASC;";
        
$sqlQry mysql_query($sqlCmd,$sqlHp);
        while(
$getKats mysql_fetch_object($sqlQry)) {
          echo
'
           <a href="index.php?s=itemshop&k='
.$getKats->id.'">
<input type="submit" value="'
.$getKats->titel.'" name="submit" class="button1">
        </a>'
;
        }
      
?>
       </td>
        </tr>
</table>

 <br />
  <div id="isright">
    <h2>Items</h2>
      <table>
    <?PHP
      $sqlQry
=mysql_query($sqlCmdS,$sqlHp);
      while(
$getItems=mysql_fetch_object($sqlQry)) {
        
$aktItem compareItems($getItems->vnum);
        
$itemStufe = (checkInt($aktItem['stufe'])) ? "+".$aktItem['stufe'] : '';
        
?>
        <tr>
          <th colspan="2" class="topLine"><?PHP echo $aktItem['item'].$itemStufe?></th>
        </tr>
        <tr>
          <td class="isImg">
            <?PHP 
              
if(!empty($getItems->bild)) echo'<img src="./is_img/'.$getItems->bild.'" title="'.$aktItem['item'].'" alt="'.$aktItem['item'].'"/>';
            
?>
          </td>
          <td class="tdunkel"><?PHP echo $getItems->beschreibung?><br />
          Kostet:<b> <?PHP echo $getItems->preis?> Coins</b></td>
        </tr>
        <tr>
          <td colspan="2" class="isBuy"><a href="index.php?s=is_buy&id=<?PHP echo $getItems->id?> ">
          <input type="submit" value="Kaufen"  class="button1">
          </a>
           
          </td>
        </tr>
        <?PHP
      
}
    
?>
      </table>
  </div>
  <?PHP
  
}
  else {
    echo
'<p class="meldung">Sie müssen für diesen Bereich angemeldet sein.</p>';
  }
?>
                </div>

  </div> 
                <div class="postui2 text-end">
             
                
                  
    </div></div>



is_buy.php:
PHP Code:
<?PHP

  
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
  
    if(isset(
$_GET['id']) && checkInt($_GET['id'])) {
    
      
$sqlCmd="SELECT vnum, preis, attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3, attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, socket0, socket1, socket2 FROM ".SQL_HP_DB.".is_items WHERE id='".$_GET['id']."' LIMIT 1";
      
$sqlQry=mysql_query($sqlCmd,$sqlHp);
      if(
mysql_num_rows($sqlQry)==1) {
      
        
$getItem=mysql_fetch_object($sqlQry);
        if(
$_SESSION['user_coins']>=$getItem->preis) {
      
          
$getGroesse compareItems($getItem->vnum);
          
$belPos checkPos($_SESSION['user_id']);
          
$possiblePos findPos($belPos['islager'],$getGroesse['groesse']);
          if(!empty(
$possiblePos)) {
          
            
$sqlCmd="UPDATE account.account SET coins=coins-".$getItem->preis." WHERE id='".$_SESSION['user_id']."' LIMIT 1";
            
$sqlQry=mysql_query($sqlCmd,$sqlServ);
            
$sqlLog="INSERT INTO ".SQL_HP_DB.".is_log (account_id,vnum,preis,zeitpunkt) VALUES ('".$_SESSION['user_id']."','".$getItem->vnum."','".$getItem->preis."','".$sqlZeit."')";
            
$qryLog=mysql_query($sqlLog,$sqlHp);
            
$sqlItem="INSERT INTO player.item 
            (owner_id,window,pos,count,vnum,attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3, attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, socket0, socket1, socket2)
            VALUES 
            ('"
.$_SESSION['user_id']."','MALL','".$possiblePos[0]."','1','".$getItem->vnum."','".$getItem->attrtype0."', '".$getItem->attrvalue0."', '".$getItem->attrtype1."', '".$getItem->attrvalue1."', '".$getItem->attrtype2."', '".$getItem->attrvalue2."', '".$getItem->attrtype3."', '".$getItem->attrvalue3."', '".$getItem->attrtype4."', '".$getItem->attrvalue4."', '".$getItem->attrtype5."', '".$getItem->attrvalue5."', '".$getItem->attrtype6."', '".$getItem->attrvalue6."', '".$getItem->socket0."', '".$getItem->socket1."', '".$getItem->socket2."')";
            
$qryItem=mysql_query($sqlItem,$sqlServ) or die(mysql_error());
            echo
'<p class="meldung">Das item wurde erfolgreich gekauft. Sollte das Item nicht im Lager erscheinen, bitte umgehend bei einem Admin melden.</p>';
            
          }
          else {
            echo
'<p>Sie haben nicht genügend Platz in ihrem Itemshop-Lager. Ihr Guthaben wurde nicht verändert.</p>';
          }
          
        }
        else {
          echo
'<p class="meldung">Sie haben nicht genug Coins.</p>';
        }
      }
      else {
        echo
'<p class="meldung">Das angegebe Item existiert nicht.</p>';
      }
    }
    else {
      echo
'<p class="meldung">Es wurde keine gültige ID eingegeben.</p>';
    }
    echo
'<p><a href="javascript:history.back()">zurück</a></p>';
  }
  else {
    echo
'<p class="meldung">Sie müssen für diesen Bereich angemeldet sein.</p>';
  }
?>

Welchen Client habe ich?
2010er Client mit IS lagerfix, Verschlüsselung v2
01/04/2011 22:29 Scrawler™#8
probier mal meins vielleicht funktioniert es ja^^
01/04/2011 22:36 KroNe_x3#9
mhh vllt liegts auch am Server das er das 2 mal nur darstellt? im dem sinne das er es nur 1 mal hat aber 2 mal darstellt?
01/04/2011 22:47 iKyroja :>#10
Genau das gleiche Problem habe ich auch..
Ich vermute das liegt an der is_buy.php sie startet es evtl 2x.
Aber was ich festgestellt habe:

Ich kaufe sag ma mal ssp+9
Beim1 mal bekomme ich es 2x
aber danach wiedrrum die ganze Zeit 1x
auser ich warte 10-30min dan kommt der bug wieder
01/04/2011 22:57 .Zander#11
Jo, kjo
Hab mal aus dem blanken Script die IS_Buy genommen und mit deiner ersetzt und es geht nun xD
01/04/2011 23:00 -Tuni#12
Ich hab nur den BUG wen ich mit dem selben acc zu oft einkaufe

Den warte ich einfach und den gehts wieder ^^