PDA

Zobacz pełną wersję : moduł pracy i brak update



toriam
10-10-2010, 20:31
przy pisaniu kolejnego modułu natknąlem sie na mały kłopot


private function pracuj()
{

if (!in_array($_POST['czaspracy'], array(1,2,3,4)) || !in_array($_POST['pracuj'],array('money','ziola','ryby')))
{
$msg = 'blad wartosci';
header('Location: index.php?mod=Work&msg=' . urlencode($msg));
exit;
}

$data = $this->db->fetchRow('SELECT * FROM `<ezrpg>praca` where login =?',array($this->player->username));


$czaspracy = $_POST['czaspracy']; // czas pracy to wybrany przez gracza czas pracy
$nowezyski = 60*$czaspracy; // obliczanie zysków z pracy (tu gracz może wpisać swoje dane)
$koniecpracy = time()+60*$czaspracy; // obliczamy końcowy czas w sekundach

$tablica = array(
'login'=>$this->player->username,
'koniec'=>$koniecpracy,
'zyski'=>$nowezyski,
'typ'=>$_POST['pracuj']);

if($data->koniec == NULL)
{ // jeżeli koniec w tabeli jest pusty
$this->db->execute('update `<ezrpg>players` set `?`=`?`+? where `id` = ?',array($_POST['pracuj'],$_POST['pracuj'],$nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
$this->db->insert('<ezrpg>praca', $tablica);
}
else
{ // jeżeli warunek nie został spełniony
$this->db->execute('update `<ezrpg>players` set `?`=`?`+? where `id` = ?',array($_POST['pracuj'],$_POST['pracuj'],$nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
$this->db->execute('update `<ezrpg>praca` set `koniec` = ?, `zyski` = ?, `typ` = ? where `id` = ?',array($koniecpracy,$nowezyski,$_POST['pracuj'],$this->player->username)); // updatowanie rekordu w tabeli praca
}

$msg = 'Rozpoczales wlasnie prace, bedziesz pracowal przez '.$czaspracy.' godziny.';
header('Location: index.php?mod=Work&msg=' . urlencode($msg));
}

oczywiście nie działa tak jak powinno. tylko zapytanie


$this->db->insert('<ezrpg>praca', $tablica);

działa poprawnie zupełnie nie wiem dlaczego może ktos pomóc??

richcio
10-10-2010, 22:08
Spróbuj tak:


='`?`+?'

</span></span>

toriam
11-10-2010, 17:21
to mi w ogóle nie włącza modułu ;) próbowałem juz te nawiasy powstawiać ale coś mi nie idzie

Zapper
11-10-2010, 19:49
używając apostrofów wewnątrz apostrofów, należy używać backslashy: \'

toriam
11-10-2010, 20:36
żadnej poprawy a może mam cos w smarty


{include file="header.tpl" TITLE="Ekwipunek"}


<p>
{if $data->koniec > $smarty.now and $data->koniec != null}

<p>Skonczysz prace za {math equation="ceil((x-y)/z)" x=$data->koniec y=$smarty.now z=60 } minut.</p>
{else}
Na każdej godzinie pracy zarabiasz 60 zlotych.</br>
<form action="" method="post">
Pracuj przez:
<select name="czaspracy" class="button" >
<option class="button">1</option>
<option class="button">2</option>
<option class="button">3</option>
<option class="button">4</option>
</select> godziny.
<div>Płucz złoto<button type="submit" name="pracuj" value="money">Pracuj</button></div>
<div>Zbieraj zioła<button type="submit" name="pracuj" value="ziola">Pracuj</button></div>
<div>Łów ryby<button type="submit" name="pracuj" value="ryby">Pracuj</button></div>
</form>
{/if}
</p>


{include file="footer.tpl"}
ale chyba nie bo część się przeciez wykonuje

Meares
11-10-2010, 21:46
'update `<ezrpg>players` set `?`=`?`+? where `id` = ?'
Nie podstawiaj ? w miejsca nazw kolumn.

toriam
12-10-2010, 18:29
to mam zrobic switcha?? czy jakos to inaczej można to rozwiązać??
zrobiłem na switchach trochę się przedłużyło ale to nic wielkiego


if($data->koniec == null)
{
switch($_POST['pracuj'])
{
case 'money':
$this->db->execute('update `<ezrpg>players` set money=money+? where `id` = ?',array($nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
break;

case 'ziola':
$this->db->execute('update `<ezrpg>players` set ziola=ziola+? where `id` = ?',array($nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
break;

case 'ryby':
$this->db->execute('update `<ezrpg>players` set ryby=ryby+? where `id` = ?',array($nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
break;
}
$this->db->insert('<ezrpg>praca', $tablica);
}
else
{
switch($_POST['pracuj'])
{
case 'money':
$this->db->execute('update `<ezrpg>players` set money=money+? where `id` = ?',array($nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
break;

case 'ziola':
$this->db->execute('update `<ezrpg>players` set ziola=ziola+? where `id` = ?',array($nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
break;

case 'ryby':
$this->db->execute('update `<ezrpg>players` set ryby=ryby+? where `id` = ?',array($nowezyski,$this->player->id)); // dodawanie pięniędzy graczu (przykładowo kasa)
break;
}
$this->db->execute('update `<ezrpg>praca` set `koniec` = ?, `zyski` = ?, `typ` = ? where `id` = ?',array($koniecpracy,$nowezyski,$_POST['pracuj'],$this->player->username)); // updatowanie rekordu w tabeli praca
}

ten if działa


if($data->koniec == null)

niestety jego else juz mi się nie wykonuje. dlaczego??

Zapper
12-10-2010, 20:42
if(!isset($data->koniec))
lub
if($data->koniec===NULL)

toriam
14-10-2010, 15:39
else chyba działa tylko jest problem z tym zapytaniem

$this->db->execute('update `<ezrpg>praca` set `koniec` = ?, `zyski` = ?, `typ` = ? where `id` = ?',array($koniecpracy,$nowezyski,$_POST['pracuj'],$this->player->username)); czemu mi to nie działa

Zapper
16-10-2010, 00:21
`id` = $this->player->username.
?
id to nie string.

toriam
16-10-2010, 01:13
jaki fail, aż wstyd. Tak to jest jak sie nie nosi okularów ;) oczywiście powinno być `login` = $this->player->username