Jump to content
MakeWebGames

MySQL error when adding items


rednspirited

Recommended Posts

thanks 🙂 will see what happens

 

<?php
/**
 * MCCodes Version 2.0.5b
 * Copyright (C) 2005-2012 Dabomstew
 * All rights reserved.
 *
 * Redistribution of this code in any form is prohibited, except in
 * the specific cases set out in the MCCodes Customer License.
 *
 * This code license may be used to run one (1) game.
 * A game is defined as the set of users and other game database data,
 * so you are permitted to create alternative clients for your game.
 *
 * If you did not obtain this code from MCCodes.com, you are in all likelihood
 * using it illegally. Please contact MCCodes to discuss licensing options
 * in this case.
 *
 * File: class/class_db_mysql.php
 * Signature: c43fdec3c66d23162f869ddcf5af599d
 * Date: Fri, 20 Apr 12 08:50:30 +0000
 */

if (!defined('MONO_ON'))
{
    exit;
}

if (!function_exists('error_critical'))
{
    // Umm...
    die('<h1>Error</h1>' . 'Error handler not present');
}

if (!extension_loaded('mysql'))
{
    // dl doesn't work anymore, crash
    error_critical('Database connection failed',
            'MySQL extension not present but required', 'N/A',
            debug_backtrace(false));
}

class database
{
    var $host;
    var $user;
    var $pass;
    var $database;
    var $persistent = 0;
    var $last_query;
    var $result;
    var $connection_id;
    var $num_queries = 0;
    var $start_time;

    function configure($host, $user, $pass, $database, $persistent = 0)
    {
        $this->host = $host;
        $this->user = $user;
        $this->pass = $pass;
        $this->database = $database;
        $this->persistent = $persistent;
        return 1; //Success.
    }

    function connect()
    {
        if (!$this->host)
        {
            $this->host = "localhost";
        }
        if (!$this->user)
        {
            $this->user = "root";
        }
        if ($this->persistent)
        {
            $conn = mysql_pconnect($this->host, $this->user, $this->pass);
        }
        else
        {
            $conn =
                    mysql_connect($this->host, $this->user, $this->pass, true);
        }
        if ($conn === false)
        {
            error_critical('Database connection failed',
                    mysql_errno() . ': ' . mysql_error(),
                    'Attempted to connect to database on ' . $this->host,
                    debug_backtrace(false));
        }
        // @overridecharset mysql
        $this->connection_id = $conn;
        if (!mysql_select_db($this->database, $this->connection_id))
        {
            error_critical('Database connection failed',
                    mysql_errno($conn) . ': ' . mysql_error($conn),
                    'Attempted to select database: ' . $this->database,
                    debug_backtrace(false));
        }
        return $this->connection_id;
    }

    function disconnect()
    {
        if ($this->connection_id)
        {
            mysql_close($this->connection_id);
            $this->connection_id = 0;
            return 1;
        }
        else
        {
            return 0;
        }
    }

    function change_db($database)
    {
        if (!mysql_select_db($database, $this->connection_id))
        {
            error_critical('Database change failed',
                    mysql_errno($this->connection_id) . ': '
                            . mysql_error($this->connection_id),
                    'Attempted to select database: ' . $database,
                    debug_backtrace(false));
        }
        $this->database = $database;
    }

    function query($query)
    {
        $this->last_query = $query;
        $this->num_queries++;
        $this->result = mysql_query($this->last_query, $this->connection_id);
        if ($this->result === false)
        {
            error_critical('Query failed',
                    mysql_errno($this->connection_id) . ': '
                            . mysql_error($this->connection_id),
                    'Attempted to execute query: ' . nl2br($this->last_query),
                    debug_backtrace(false));
        }
        return $this->result;
    }

    function fetch_row($result = 0)
    {
        if (!$result)
        {
            $result = $this->result;
        }
        return mysql_fetch_assoc($result);
    }

    function num_rows($result = 0)
    {
        if (!$result)
        {
            $result = $this->result;
        }
        return mysql_num_rows($result);
    }

    function insert_id()
    {
        return mysql_insert_id($this->connection_id);
    }

    function fetch_single($result = 0)
    {
        if (!$result)
        {
            $result = $this->result;
        }
        return mysql_result($result, 0, 0);
    }

    function easy_insert($table, $data)
    {
        $query = "INSERT INTO `$table` (";
        $i = 0;
        foreach ($data as $k => $v)
        {
            $i++;
            if ($i > 1)
            {
                $query .= ", ";
            }
            $query .= $k;
        }
        $query .= ") VALUES(";
        $i = 0;
        foreach ($data as $k => $v)
        {
            $i++;
            if ($i > 1)
            {
                $query .= ", ";
            }
            $query .= "'" . $this->escape($v) . "'";
        }
        $query .= ")";
        return $this->query($query);
    }

    function escape($text)
    {
        return mysql_real_escape_string($text, $this->connection_id);
    }

    function affected_rows()
    {
        return mysql_affected_rows($this->connection_id);
    }

    function free_result($result)
    {
        return mysql_free_result($result);
    }

}

i cant seem to find a thing wrong with the code here is the file it is referring to 

Link to comment
Share on other sites

function new_item_submit()
{
    global $db, $ir, $c, $h;
    if ($ir['user_level'] != 2)
    {
        echo 'You cannot access this area.<br />
        &gt; <a href="staff.php">Go Back</a>';
        die($h->endpage());
    }
    staff_csrf_stdverify('staff_newitem', 'staff_items.php?action=newitem');
    $itmname =
            (isset($_POST['itmname'])
                    && preg_match(
                            "/^[a-z0-9_]+([\\s]{1}[a-z0-9_]|[a-z0-9_])+$/i",
                            $_POST['itmname']))
                    ? $db->escape(strip_tags(stripslashes($_POST['itmname'])))
                    : '';
    $itmdesc =
            (isset($_POST['itmdesc']))
                    ? $db->escape(strip_tags(stripslashes($_POST['itmdesc'])))
                    : '';
    $weapon =
            (isset($_POST['weapon']) && is_numeric($_POST['weapon']))
                    ? abs(intval($_POST['weapon'])) : 0;
    $armor =
            (isset($_POST['armor']) && is_numeric($_POST['armor']))
                    ? abs(intval($_POST['armor'])) : 0;
    $_POST['itmtype'] =
            (isset($_POST['itmtype']) && is_numeric($_POST['itmtype']))
                    ? abs(intval($_POST['itmtype'])) : '';
    $_POST['itmbuyprice'] =
            (isset($_POST['itmbuyprice']) && is_numeric($_POST['itmbuyprice']))
                    ? abs(intval($_POST['itmbuyprice'])) : '';
    $_POST['itmsellprice'] =
            (isset($_POST['itmsellprice'])
                    && is_numeric($_POST['itmsellprice']))
                    ? abs(intval($_POST['itmsellprice'])) : '';
    if (empty($itmname) || empty($itmdesc) || empty($_POST['itmtype'])
            || empty($_POST['itmbuyprice']) || empty($_POST['itmsellprice']))
    $itmbuy = ($_POST['itmbuyable'] == 'on') ? 1 : 0;
    $effects = array();
    for ($i = 1; $i <= 3; $i++)
    {
        $efxkey = "effect{$i}";
        $_POST[$efxkey . 'stat'] =
                (isset($_POST[$efxkey . 'stat'])
                        && in_array($_POST[$efxkey . 'stat'],
                                array('energy', 'will', 'brave', 'hp',
                                        'strength', 'agility', 'guard',
                                        'labour', 'IQ', 'hospital', 'jail',
                                        'money', 'crystals', 'cdays',
                                        'bankmoney', 'cybermoney', 'crimexp')))
                        ? $_POST[$efxkey . 'stat'] : 'energy';
        $_POST[$efxkey . 'dir'] =
                (isset($_POST[$efxkey . 'dir'])
                        && in_array($_POST[$efxkey . 'dir'],
                                array('pos', 'neg'))) ? $_POST[$efxkey . 'dir']
                        : 'pos';
        $_POST[$efxkey . 'type'] =
                (isset($_POST[$efxkey . 'type'])
                        && in_array($_POST[$efxkey . 'type'],
                                array('figure', 'percent')))
                        ? $_POST[$efxkey . 'type'] : 'figure';
        $_POST[$efxkey . 'amount'] =
                (isset($_POST[$efxkey . 'amount'])
                        && is_numeric($_POST[$efxkey . 'amount']))
                        ? abs(intval($_POST[$efxkey . 'amount'])) : 0;
        $_POST[$efxkey . 'on'] =
                (isset($_POST[$efxkey . 'on'])
                        && in_array($_POST[$efxkey . 'on'], array('1', '0')))
                        ? $_POST[$efxkey . 'on'] : 0;
        $effects[$i] =
                $db->escape(
                        serialize(
                                array("stat" => $_POST[$efxkey . 'stat'],
                                        "dir" => $_POST[$efxkey . 'dir'],
                                        "inc_type" => $_POST[$efxkey . 'type'],
                                        "inc_amount" => abs(
                                                (int) $_POST[$efxkey
                                                        . 'amount']))));
    }
    $m =
            $db->query(
                    "INSERT INTO `items`
                     VALUES(NULL, {$_POST['itmtype']}, '$itmname', '$itmdesc',
                     {$_POST['itmbuyprice']}, {$_POST['itmsellprice']},
                     $itmbuy, '{$_POST['effect1on']}', '{$effects[1]}',
                     '{$_POST['effect2on']}', '{$effects[2]}',
                     '{$_POST['effect3on']}', '{$effects[3]}', $weapon,
                     $armor)");
    stafflog_add("Created item {$_POST['itmname']}");
    echo 'The ' . $_POST['itmname']
            . ' Item was added to the game.<br />
            &gt; <a href="staff_items.php?action=newitem">Go Home</a>';
    die($h->endpage());
}
function edit_item_begin()
{
    global $db, $ir, $c, $h, $userid;
    if ($ir['user_level'] != 2)
    {
        echo 'You cannot access this area.<br />&gt; <a href="staff.php">Go Back</a>';
        die($h->endpage());
    }
    $csrf = request_csrf_html('staff_edititem1');
    echo "
    <h3>Editing Item</h3>
    You can edit any aspect of this item.<br />
    <form action='staff_items.php?action=edititemform' method='post'>
    	Item: " . item_dropdown(NULL, 'item')
            . "
    	<br />
    	{$csrf}
    	<input type='submit' value='Edit Item' />
    </form>
       ";
}

function edit_item_form()
{
    global $db, $ir, $c, $h;
    if ($ir['user_level'] != 2)
    {
        echo 'You cannot access this area.<br />
        &gt; <a href="staff.php">Go Back</a>';
        die($h->endpage());
    }
    staff_csrf_stdverify('staff_edititem1', 'staff_items.php?action=edititem');
    $_POST['item'] =
            (isset($_POST['item']) && is_numeric($_POST['item']))
                    ? abs(intval($_POST['item'])) : '';
    if (empty($_POST['item']))
    {
        echo 'Invalid Item.<br />
        &gt; <a href="staff_items.php?action=killitem">Go Back</a>';
        die($h->endpage());
    }
    $d =
            $db->query(
                    "SELECT *
                     FROM `items`
                     WHERE `itmid` = {$_POST['item']}");
    if ($db->num_rows($d) == 0)
    {
        $db->free_result($d);
        echo 'Item doesn\'t seem to exist.<br />
        &gt; <a href="staff_items.php?action=edititem">Go Back</a>';
        die($h->endpage());
    }
    $itemi = $db->fetch_row($d);
    $db->free_result($d);
    $csrf = request_csrf_html('staff_edititem2');
    $itmname = addslashes($itemi['itmname']);
    $itmdesc = addslashes($itemi['itmdesc']);
    echo "
    <h3>Editing Item</h3>
    <form action='staff_items.php?action=edititemsub' method='post'>
    	<input type='hidden' name='itmid' value='{$_POST['item']}' />
    	Item Name: <input type='text' name='itmname' value='{$itmname}' />
    	<br />
    	Item Desc.: <input type='text' name='itmdesc' value='{$itmdesc}' />
    	<br />
    	Item Type: " . itemtype_dropdown(NULL, 'itmtype', $itemi['itmtype'])
            . "
    	<br />
    	Item Buyable: <input type='checkbox' name='itmbuyable'
       " . (($itemi['itmbuyable']) ? "checked='checked'" : '')
            . "
    	 />
    	<br />
    	Item Price: <input type='text' name='itmbuyprice' value='{$itemi['itmbuyprice']}' />
    	<br />
    	Item Sell Value: <input type='text' name='itmsellprice' value='{$itemi['itmsellprice']}' />
    	<hr />
    	<b>Usage Form</b>
    	<hr />
       ";
    $stats =
            array("energy" => "Energy", "will" => "Will", "brave" => "Brave",
                    "hp" => "Health", "strength" => "Strength",
                    "agility" => "Agility", "guard" => "Guard",
                    "labour" => "Labour", "IQ" => "IQ",
                    "hospital" => "Hospital Time", "jail" => "Jail Time",
                    "money" => "Money", "crystals" => "Crystals",
                    "cdays" => "Education Days Left",
                    "bankmoney" => "Bank money",
                    "cybermoney" => "Cyber money", "crimexp" => "Crime XP");
    for ($i = 1; $i <= 3; $i++)
    {
        if (!empty($itemi["effect" . $i]))
        {
            $efx = unserialize($itemi["effect" . $i]);
        }
        else
        {
            $efx = array("inc_amount" => 0);
        }
        $switch1 =
                ($itemi['effect' . $i . '_on'] > 0) ? " checked='checked'" : "";
        $switch2 =
                ($itemi['effect' . $i . '_on'] > 0) ? "" : " checked='checked'";
        echo "
        <b><u>Effect {$i}</u></b>
        <br />
        On?
        		<input type='radio' name='effect{$i}on' value='1'$switch1 /> Yes
        		<input type='radio' name='effect{$i}on' value='0'$switch2 /> No
        <br />
        Stat: <select name='effect{$i}stat' type='dropdown'>
        ";
        foreach ($stats as $k => $v)
        {
            echo ($k == $efx['stat'])
                    ? '<option value="' . $k . '" selected="selected">' . $v
                            . '</option>'
                    : '<option value="' . $k . '">' . $v . '</option>';
        }
        $str =
                ($efx['dir'] == "neg")
                        ? '<option value="pos">Increase</option>
                        	<option value="neg" selected="selected">Decrease</option>'
                        : '<option value="pos" selected="selected">Increase</option>
                        	<option value="neg">Decrease</option>';
        $str2 =
                ($efx['inc_type'] == "percent")
                        ? '<option value="figure">Value</option>
                        	<option value="percent" selected="selected">Percent</option>'
                        : '<option value="figure" selected="selected">Value</option>
                        	<option value="percent">Percent</option>';

        echo "
        </select>
        	Direction: <select name='effect{$i}dir' type='dropdown'> {$str} </select>
        <br />
        	Amount: <input type='text' name='effect{$i}amount' value='{$efx['inc_amount']}' />
        		<select name='effect{$i}type' type='dropdown'>{$str2}</select>
        <hr />
           ";
    }
    echo "
    <b>Combat Usage</b>
    <br />
    	Weapon Power: <input type='text' name='weapon' value='{$itemi['weapon']}' />
    <br />
    	Armor Defense: <input type='text' name='armor' value='{$itemi['armor']}' />
    <hr />
    	{$csrf}
    	<input type='submit' value='Edit Item' />
    </form>
       ";
}

function edit_item_sub()
{
    global $db, $ir, $c, $h, $userid;
    if ($ir['user_level'] != 2)
    {
        echo 'You cannot access this area.<br />&gt; <a href="staff.php">Go Back</a>';
        die($h->endpage());
    }
    staff_csrf_stdverify('staff_edititem2', 'staff_items.php?action=edititem');
    $itmname =
            (isset($_POST['itmname'])
                    && preg_match(
                            "/^[a-z0-9_]+([\\s]{1}[a-z0-9_]|[a-z0-9_])+$/i",
                            $_POST['itmname']))
                    ? $db->escape(strip_tags(stripslashes($_POST['itmname'])))
                    : '';
    $itmdesc =
            (isset($_POST['itmdesc']))
                    ? $db->escape(strip_tags(stripslashes($_POST['itmdesc'])))
                    : '';
    $weapon =
            (isset($_POST['weapon']) && is_numeric($_POST['weapon']))
                    ? abs(intval($_POST['weapon'])) : 0;
    $armor =
            (isset($_POST['armor']) && is_numeric($_POST['armor']))
                    ? abs(intval($_POST['armor'])) : 0;
    $_POST['itmtype'] =
            (isset($_POST['itmtype']) && is_numeric($_POST['itmtype']))
                    ? abs(intval($_POST['itmtype'])) : '';
    $_POST['itmbuyprice'] =
            (isset($_POST['itmbuyprice']) && is_numeric($_POST['itmbuyprice']))
                    ? abs(intval($_POST['itmbuyprice'])) : '';
    $_POST['itmsellprice'] =
            (isset($_POST['itmsellprice'])
                    && is_numeric($_POST['itmsellprice']))
                    ? abs(intval($_POST['itmsellprice'])) : '';
    $_POST['itmid'] =
            (isset($_POST['itmid']) && is_numeric($_POST['itmid']))
                    ? abs(intval($_POST['itmid'])) : '';
    if (empty($itmname) || empty($itmdesc) || empty($_POST['itmtype'])
            || empty($_POST['itmbuyprice']) || empty($_POST['itmsellprice'])
            || empty($_POST['itmid']))
    $q =
            $db->query(
                    'SELECT COUNT(`itmid`)
                     FROM `items`
                     WHERE `itmid` = ' . $_POST['itmid']);
    if ($db->fetch_single($q) == 0)
    {
        $db->free_result($q);
        echo 'Invalid item.<br />
        &gt; <a href="staff_items.php?action=edititem">Go Back</a>';
        die($h->endpage());
    }
    $db->free_result($q);
    $itmbuy = ($_POST['itmbuyable'] == 'on') ? 1 : 0;
    $effects = array();
    for ($i = 1; $i <= 3; $i++)
    {
        $efxkey = "effect{$i}";
        $_POST[$efxkey . 'stat'] =
                (isset($_POST[$efxkey . 'stat'])
                        && in_array($_POST[$efxkey . 'stat'],
                                array('energy', 'will', 'brave', 'hp',
                                        'strength', 'agility', 'guard',
                                        'labour', 'IQ', 'hospital', 'jail',
                                        'money', 'crystals', 'cdays',
                                        'bankmoney', 'cybermoney', 'crimexp')))
                        ? $_POST[$efxkey . 'stat'] : 'energy';
        $_POST[$efxkey . 'dir'] =
                (isset($_POST[$efxkey . 'dir'])
                        && in_array($_POST[$efxkey . 'dir'],
                                array('pos', 'neg'))) ? $_POST[$efxkey . 'dir']
                        : 'pos';
        $_POST[$efxkey . 'type'] =
                (isset($_POST[$efxkey . 'type'])
                        && in_array($_POST[$efxkey . 'type'],
                                array('figure', 'percent')))
                        ? $_POST[$efxkey . 'type'] : 'figure';
        $_POST[$efxkey . 'amount'] =
                (isset($_POST[$efxkey . 'amount'])
                        && is_numeric($_POST[$efxkey . 'amount']))
                        ? abs(intval($_POST[$efxkey . 'amount'])) : 0;
        $_POST[$efxkey . 'on'] =
                (isset($_POST[$efxkey . 'on'])
                        && in_array($_POST[$efxkey . 'on'], array('1', '0')))
                        ? $_POST[$efxkey . 'on'] : 0;
        $effects[$i] =
                $db->escape(
                        serialize(
                                array("stat" => $_POST[$efxkey . 'stat'],
                                        "dir" => $_POST[$efxkey . 'dir'],
                                        "inc_type" => $_POST[$efxkey . 'type'],
                                        "inc_amount" => abs(
                                                (int) $_POST[$efxkey
                                                        . 'amount']))));
    }
    $db->query(
            'UPDATE `items` SET `itmtype` = ' . $_POST['itmtype']
                    . ',`itmname` = "' . $itmname . '",`itmdesc` = "'
                    . $itmdesc . '",`itmbuyprice` = ' . $_POST['itmbuyprice']
                    . ',`itmsellprice` = ' . $_POST['itmsellprice']
                    . ',`itmbuyable` = ' . $itmbuy . ',`effect1_on` = "'
                    . $_POST['effect1on'] . '",`effect1` = "' . $effects[1]
                    . '",`effect2_on` = "' . $_POST['effect2on']
                    . '",`effect2` = "' . $effects[2] . '",`effect3_on` = "'
                    . $_POST['effect3on'] . '",`effect3` = "' . $effects[3]
                    . '",`weapon` = ' . $weapon . ',`armor` = ' . $armor
                    . ' WHERE `itmid` = ' . $_POST['itmid']);
    stafflog_add("Edited item {$_POST['itmname']}");
    echo 'The ' . $_POST['itmname']
            . ' Item was edited successfully.<br />
            &gt; <a href="staff.php">Go Home</a>';
    die($h->endpage());
}

think thats all you need

Link to comment
Share on other sites

im the same i cant see an error HOWEVER what you need to do now is a bit of detective work on the INSERT INTO

count from the insert how many is being INSERTED i can see there are 15 now goto you phpmyadmin ITEMS table and count those should be 15 or 16 (16 incase ID isnt being inserted.. so now all we do is this its a pain but for a Beginner it does work....

ALTER this

$db->query(
                    "INSERT INTO `items`
                     VALUES(NULL, {$_POST['itmtype']}, '$itmname', '$itmdesc',
                     {$_POST['itmbuyprice']}, {$_POST['itmsellprice']},
                     $itmbuy, '{$_POST['effect1on']}', '{$effects[1]}',
                     '{$_POST['effect2on']}', '{$effects[2]}',
                     '{$_POST['effect3on']}', '{$effects[3]}', $weapon,
                     $armor)");

TO this

$db->query(
                    "INSERT INTO `items`
                     VALUES(NULL, '2', '3', '4',
                     '5', '6',
                     '7', '8', '9',
                     '10', '11',
                     '12', '13', '14',
                     '15')");

That should INSERT all 15 into the ITEMS table cos the data is already there IF it does then we know that there is an issue with the INSERT now all we have to do is 1 by 1 add things back and see which one it breaks on.....

Example

 

$db->query(
                    "INSERT INTO `items`
                     VALUES(NULL, '2', '3', '4',
                     '5', '6',
                     '7', '8', '9',
                     '10', '11',
                     '12', '13', '14',
                     $armor)");

AND

$db->query(
                    "INSERT INTO `items`
                     VALUES(NULL, '2', '3', '4',
                     '5', '6',
                     '7', '8', '9',
                     '10', '11',
                     '12', '13', $weapon,
                     $armor)");

And so on till the script breaks.. 

NOTE remember when you do this create a new item for each don't use same if its being INSERTED

Edited by Uridium
Added bits
  • Thanks 1
Link to comment
Share on other sites

$itmbuy isn't set because it's part of a braceless if statement, resulting in gap between itmsellvalue and effect1.
Simply add a little logic to handle the empty inputs


Offending snippet:

if (empty($itmname) || empty($itmdesc) || empty($_POST['itmtype'])
            || empty($_POST['itmbuyprice']) || empty($_POST['itmsellprice']))
    $itmbuy = ($_POST['itmbuyable'] == 'on') ? 1 : 0;

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

10 hours ago, rednspirited said:

Will try when I'm off work funny thing is it added items then just stopped doing it

That suggests is not so much a coding error but something else.

Have you changed the php version recently or if you using your hosts default version, have they changed it?

Link to comment
Share on other sites

it was coding got it fixed by adding in a small bit of logic 🙂

 

5 minutes ago, CrazyElk said:

That suggests is not so much a coding error but something else.

Have you changed the php version recently or if you using your hosts default version, have they changed it?

the php version was what i checked first 

Link to comment
Share on other sites

4 minutes ago, rednspirited said:

it was coding got it fixed by adding in a small bit of logic 🙂

Well there ya go, good job ... I would have suggested that but it didn't ummm, seem logical at the time. 😂

Seems odd that it was working and then without reason it stopped working and then required some additional logic, hmmm.

Nothing like a good mystery I always say.

Edited by CrazyElk
  • Haha 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...