Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
weverka
Člen
Avatar
weverka:19.2.2021 9:28

Ahoj, mám další problém s PHP. Programuji aplikaci kde na formuláři zadáte výdaj, vaše výchozí konto je 1000 Kč po odeslání vás to má přesměrovat na další formulář který vypíše "Ahoj na kontě máš a výsledek", ale druhý formulář mi vypíše tento error:

>
Parse error: syntax error, unexpected 'na' (T_STRING), expecting ';' or ',' in C:\xampp\htdoc­s\project\kdo­vi.php on line 14

Nevíte co s tím?

Chci docílit: Fungování programu

Odpovědět
19.2.2021 9:28
Weby jsou budoucnost IT
Avatar
weverka
Člen
Avatar
weverka:19.2.2021 9:36
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <link rel="stylesheet" href="">
</head>
<body>

        <?php
           require 'penize.php';
       $penize = $penize - $_POST[konto];
       echo Ahoj na kontě máš: $penize;
         ?>
</body>
</html>

Ještě zdroják chybového souboru :)

Nahoru Odpovědět
19.2.2021 9:36
Weby jsou budoucnost IT
Avatar
Samuel Hél
Tvůrce
Avatar
Odpovídá na weverka
Samuel Hél:19.2.2021 15:12

Ahoj, funkce echo požaduje pro vypsání textu uvozovky nebo apostrofy:

echo "Ahoj, na kontě máš: $penize.";

viz lekce na výpis textu.

 
Nahoru Odpovědět
19.2.2021 15:12
Avatar
weverka
Člen
Avatar
Odpovídá na Samuel Hél
weverka:19.2.2021 17:53

Taková chyba a to mám z toho že jsem to nepsal v editoru s nápovědou syntaxe.

Nahoru Odpovědět
19.2.2021 17:53
Weby jsou budoucnost IT
Avatar
weverka
Člen
Avatar
Odpovídá na weverka
weverka:19.2.2021 17:56

Tak chyba vyřešena, program funguje ale před výpisem textu to vypíše:

Warning: Use of undefined constant konto - assumed 'konto' (this will throw an Error in a future version of PHP) in C:\xampp\htdocs\project\kdovi.php on line 13

edit: vyřešena chyběli mi tam uvozovky. :-` Doporučili byste mi editor sublime text?

Editováno 19.2.2021 17:58
Nahoru Odpovědět
19.2.2021 17:56
Weby jsou budoucnost IT
Avatar
Odpovídá na weverka
Patrik Strišovský:19.2.2021 18:59

Aj ten je dobrý, ale osobne používam VS code..

Nahoru Odpovědět
19.2.2021 18:59
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Samuel Hél
Tvůrce
Avatar
Odpovídá na Patrik Strišovský
Samuel Hél:19.2.2021 19:43

Jsem přehlédl, to konto v superglobálním poli, to taky do uvozovek :) Každopádně ohledně IDE, kde se ti dělá nejlépe, ten je pro tebe nejlepší. Každý má rád něco jiné, přirovnal bych to k zmrzlině :D Také podle jazyků, v kterých píšeš kód.

 
Nahoru Odpovědět
19.2.2021 19:43
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.2.2021 12:46

notepad++, pspad, a ja pouzivam Far manager. Moderni editory neznam.

kazdopadne, muze zkusit googlovat a zkouknout online dokumentaci. V online verzi jsou priklady od uzivatelu. Obcas se tam najde reseni, pripadne tam mas priklady, jak se co pise podle autoru php. Ja to pouzivam dost casto, protoze nekdere funkce maji rozdilne poradi argumentu a nikdy si nepamatuji, jake zrovna je u te, co chci pouzit :)

 
Nahoru Odpovědět
26.2.2021 12:46
Avatar
weverka
Člen
Avatar
weverka:26.2.2021 21:41

Ještě jeden problém, tato aplikace je součástí jednoho většího projektu. Potřebuji poradit s tím že odečtu peníze, to proběhlo v pořádku,ale také potřebuji aby se nové konto uložilo do proměnné v jiném souboru například proměnné.php.

Nahoru Odpovědět
26.2.2021 21:41
Weby jsou budoucnost IT
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.3.2021 8:29

session ( session_start() )?
file_put_content?
databazi?
Nebo, co ja vim, jake s tim mas plany. Mozna by ti stacilo pouzit session, ulozit to dokud je uzivatel online a pouzit v jinem php. Pokud to potrebujes trvale, tak ulozit do souboru nebo databaze.

 
Nahoru Odpovědět
1.3.2021 8:29
Avatar
weverka
Člen
Avatar
Odpovídá na Peter Mlich
weverka:1.3.2021 11:06

Plánuji jednu webovou hru. Když kliknete na tlačítko zaplatit, potřebuji aby se přepsala výchozí hodnota ve všech dokumentech.

Nahoru Odpovědět
1.3.2021 11:06
Weby jsou budoucnost IT
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.3.2021 7:53

Zkus lepe popsat princip, jak to ma fungovat. Pripadne, jak uz to mas udelane, kod?

Webove hry se daji delat ruznymi zpusoby. Pokud ma stejnou informaci sdilet vice uzivatelu, ukladaji se data do databaze. Soubor je take mozny, ale je to krajni moznosti nebo, pokud se jedna o jednoduche informace. V tom pripade doporucuji zkusit pouzivat kodovani poli do csv nebo json.

<?php
// php.net/fputcsv / php.net/fgetcsv

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);

---
// php.net/json_encode / php.net/json_decode / file_get_contents / file_put_contents

$file = 'people.txt';
$list = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
$content =  json_encode($list);
file_put_contents($file, $content);
?>

Problem nastava, ze stranka je staticka. Takze, pokud se ma informace zmenit co nejdriv, je treba se neustale dotazovat serveru, pridat do ni javascript. Jinak se ceka, az uzivatel klikne na tlacitko nebo odkaz, aby se stranka znova nacetla. Tento zpusob se pouziva treba u bank, tabulek: nakup, prodej cizi meny

 
Nahoru Odpovědět
3.3.2021 7:53
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.3.2021 7:58

Momentalne moderni je usporna socket komunikace, kdy si prohlizec sleduje nejaky kanal, web-socket nebo RTC, ale to je slozitejsi na programovani, pripadne by sis musel sehnat a spustit na serveru program, ktery se bude s uzivateli bavit pres sockety. Ale, tak, pokud to nedelas prilis casto, tak ti staci javascriptovy httprequest nebo staticke obnoveni stranky pres odkaz nebo tlacitko.

 
Nahoru Odpovědět
3.3.2021 7:58
Avatar
weverka
Člen
Avatar
weverka:3.3.2021 9:01

Aplikace bude nějaký simulátor života a moc toho nemám pracuji na této aplikaci protože je klíčová. Na začátku budete mít nějakou částku ( testovací = 1000 Kč) a bude nakupovat a vydělávat. Potřebuji aby po kliknutí na tlačítko koupit se odečetly peníze a to požadovaná částka a potřebuji aby ve všech souborech kde byla hodnota 1000 byla třeba hodnota 467 a po kliknutí vydělat se má přičíst třeba 5 kč.

Nahoru Odpovědět
3.3.2021 9:01
Weby jsou budoucnost IT
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.3.2021 9:31

Nevim, zda se chapeme.

  1. Kdyz prepises soubor, je to trvale. Pokud app otevre 10 lidi, 10 lidi vidi data z toho souboru. Data se objevi, kdyz obnovi stranku. Pokud to ma byt hra pro 1 hrace, jenom nejaka skolni uloha, zapis do souboru ti postaci. Ale data bych zapisoval stejne pomoci jsonu.
  2. Pokud ale hru muze spustit vice hracu najednou. A vsichni maji videt stav i ostatnich, pak je treba kazdemu pridelit id a zapisovat organizovaneji. To lze i do souboru, ale mnohem jednoduseji to resi databaze.
  3. Pokud je to pro jednoho hrace a staci, kdyz data uvidi ten jeden hrac, tak staci pouzit session. Data se pak zapisuji jen do pameti. Kazdy hrac ma vlastni session pri otevreni browseru. Prijde o session, kdyz browser zavre. Coz je nevyhoda, lze to ulozit pak treba do cookies, ale mozna te to ani nezajima.

google = php session_start example
google = php session example

  1. Nebo data muzes kazdym kliknutim odesilat, treba ve forme COOKIES nebo stringu do formulare. Pak ale musis vedet, jak pouzit odkaz a jak tlacitko formulare pro ovladani... Idealne pouzivat jen tlacitka a nejaky input name=command (prikaz) menit podle toho, jaka akce se ma vykonat
<?php
$data = array('penize' => 10);
$data_json = json_endode($data);
?>
<form>
<input type=hidden name=data value="<?php echo $data_json?>">
<input type=text name=penize value="<?php echo $data['penize']?>">
<input type=submit>
</form>

Cili, slo by to zjednodusit, ze by vsechny formulare meli stejna data. Coz neni uplne cool, duplicity ale taky to jde pro tak malou hru.

<?php
if (!isset($GET['cmd']))
{ // nova hra
$data = array('penize' => 10);
}
else
{
$cmd = $GET['cmd'];
if ($cmd=='add') {$data['penize'] += 1;}
elseif ($cmd=='sub') {$data['penize'] -= 1;}
}
$data_json = json_endode($data);
?>
Penize <?php echo $data['penize']; ?>

<form method=get>
  <input type=hidden name=data value="<?php echo $data_json; ?>">
  <input type=hidden name=cmd value="add">
  <input type=submit value=plus>
</form>

<form method=get>
  <input type=hidden name=data value="<?php echo $data_json; ?>">
  <input type=hidden name=cmd value="add">
  <input type=submit value=minus>
</form>
 
Nahoru Odpovědět
4.3.2021 9:31
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.3.2021 9:37

Jeste jedna uprava, oprava. Pisi to z hlavy, takze to nemusi fungovat, ale principialne. Snad si to upravis uz sam :)

<?php
if (!isset($GET['cmd']))
  { // nova hra
  $data = array('penize' => 10);
  }
else
  {
  $cmd = $GET['cmd'];
  $data = isset($GET['data']) ? json_decode($GET['data']) : null;
  $data = is_array($data) && isset($data['penize']) ? $data : array('penize' => 10); // jestlize je chyba s daty, tak   resetuj na novou hru
  if ($cmd=='add') {$data['penize'] += 1;}
  elseif ($cmd=='sub') {$data['penize'] -= 1;}
  }
$data_json = json_endode($data);
?>
Penize <?php echo $data['penize']; ?>

<form method=get>
  <input type=hidden name=data value="<?php echo $data_json; ?>">
  <input type=hidden name=cmd value="add">
  <input type=submit value=plus>
</form>

<form method=get>
  <input type=hidden name=data value="<?php echo $data_json; ?>">
  <input type=hidden name=cmd value="sub"> <!--taky oprava-->
  <input type=submit value=minus>
</form>
Editováno 4.3.2021 9:38
 
Nahoru Odpovědět
4.3.2021 9:37
Avatar
weverka
Člen
Avatar
weverka:4.3.2021 9:53

Mělo by to být pro mě a pár kámošů co budou znát IP adresu aby se připojili na server. A měli by vidět co u sebe má jiný hráč. Takže by cookies byly asi ideální. Pokud tedy chápu.

Nahoru Odpovědět
4.3.2021 9:53
Weby jsou budoucnost IT
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na weverka
Peter Mlich:5.3.2021 10:06

Pokud to ma videt jiny clovek na jinem pc, pak data musis ukladat na server.
Takze se skrta js Cookies/Storage, php Session, html form GET/POST. To jsou data, ktera vidis jen ty.
Zustava tedy soubor nebo databaze. Doporucuji databazi, jestli je to vetsi projekt, pripadne to budes rozsirovat. Nebo pouzij ten soubor, ale budes muset data organizovat, aspon pomoci json. Mysleno tak, ze bude treba zapisovat data jednotlivych hracu.

  • precti cely soubor
  • vyber data hrace
  • uprav data hrace
  • zapis zpet cely soubor
class classMyDB
{
private $file_name;

function __construct($file_name)
  {
  $this->file_name = $file_name;
  }

private function create()
  {
  $bool = false;
  if (!file_exists($file_name))
    {
    $list = array();
    $content =  json_encode($list);
    $bool = file_put_contents($file, $content);
    }
  if ($bool===false)
    {}// soubor se nepodarilo vytvorit, protoze...
      // nejsou linuxova opravneni pro zapis do slozky (php file fileperms)
      // NEBO soubor jiz existuje
  return $bool;
  }

private function save($list = array())
  {
  if (!file_exists($file_name))
    {
    return $this->create();
    }
  if (file_exists($file_name))
    {
    $content =  json_encode($list);
    return file_put_contents($file, $content);
    }
  }

private function load()
  {
  if (!file_exists($file_name))
    {
    $this->create()
    $list = array();
    return $list;
    }
   else
    {
    $content = file_get_contents($file_name, $content);
    $list = json_decode($content);
    return $list;
    }
  }
}



$myDB = classMyDB('people.txt');

// db SELECT
$players_list = $myDB->load();
$players_list = is_array($players_list) ? $players_list : array(); // pokud je soubor spatne, neni to array, pak resetuj na prazdnou array

// player changes
$player = array();
$player['penize'] = 123;
$player['name'] = 'pepa';
$player['psw'] = 'pepa';

// $players_list update
$players_list[$player['name']] = $player;

// db UPDATE
$myDB->save($players_list);

---
// Penize resis pres GET / POST (ja bych pouzil post, <form method="post">), jmeno hrace mas v SESSION, pripadne ho logujes. Take si to muzes obalit do class. Totez upravu hodnot playera, muze byt vlastni class.

// login
function login(&$players_list, $name='', $psw='')
{
if (isset($players_list[$name]))
  {
  $player = players_list[$name];
  if ($player['name']==$name && $player['psw']==$psw)
     {
     return $player;
     }
  }
}

$name = isset($_POST['name']) ? $_POST['name'] : ''; // <input name=name>
$psw = isset($_POST['psw']) ? $_POST['psw'] : ''; // <input name=psw>

$player = login($players_list, $name, $psw);
if ($player==false) {} // player neexistuje, bud ho vytvorit nebo se prihlasuje nekdo, kdo nezna jmeno a heslo

pisu to z hlavy, takze, opet, mozna nejaka chybka...

Editováno 5.3.2021 10:07
 
Nahoru Odpovědět
5.3.2021 10:06
Avatar
weverka
Člen
Avatar
weverka:5.3.2021 11:48

Použiji asi databázi. Protože jednou to bude trošku větší projekt, díky.

Nahoru Odpovědět
5.3.2021 11:48
Weby jsou budoucnost IT
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.