Autor Zpráva
SirDoxik
Profil
Dobrý den, zasekl jsem se u scriptu kdy potřebuji vypsat z databáze počet kreditů kolik má uživatel na svém kontě. Jak by jste to udělali ? Předem děkuji.
Joker
Profil
Budu předpokládat, že databáze obsahuje tabulku, kde v nějakém sloupci je identifikace uživatele a v nějakém jiném počet kreditů.

V tom případě bych nad tou tabulkou provedl dotaz, kde pro záznam daného uživatele zjistím počet kreditů.
Pak bych si načetl výsledek a uložil ho do proměnné.
SirDoxik
Profil
Jakože teoreticky jo ale jak v PHP ? Sem začátečník a co jsem našel tak většinou vypisovaly třeba všechny články z db ale ne jenom od jednoho uživatele 1 údaj .
mimochodec
Profil
SirDoxik:
Co máš vytvořeno?
SirDoxik
Profil
Mám vytvořenou Tabulku s Jménem hráče a počtem peněz, kolik má na účtu a pak mám registraci která mi to jméno uloží do sessions, takže já pomocí toho jména potřebuji zjistit kolik peněz má na účtě peněz.
johnl
Profil
$mysql_query = mysql_query("SELECT kredit from hraci where jmeno = '".$_SESSION["jmeno"]."' ");
$kredit = mysql_fetch_array($mysql_query);

echo "Uživatel má kreditů: " . $kredit["kredit"];

Něco takového?
Joker
Profil
SirDoxik:
V první řadě není moc chytré identifikovat uživatele jménem.
Jednak to do aplikace zadrátuje omezení na unikátní a neměnné jméno, jednak jméno je text, možná s diakritikou (nebo si tam někdo vloží různé podivné znaky) a špatně se používá jako klíč.

Ale jinak to je úplně triviální odeslání dotazu ve stylu SELECT kredity FROM tabulka WHERE uzivatel="Pepa"
Doporučil bych si nejdřív přečíst alespoň základy v nějaké učebnici.

johnl:
mysql_* funkce jsou zastaralé a u nových projektů by se neměly používat.
SirDoxik
Profil
Dobrý den, nechci zakládat nové vlákno ale mám ještě 1 problém. Jakoby mi script ignoroval proměnou $itemid. Nemůžu najít problém. Chybu mi to nevyhodí ale script proměnou ignoruje

obchod.php
Zde
<html>
<body>
<?php

$player = $_SESSION['name'];

if (isset($_SESSION['id']))
{
  echo "Vítejte ve webshopu hráči ".$player.".";
}
else
{
  echo "musíte se přihlásit";
}
?>
<form method="POST" action="proces.php"> 
  Item <input name="item">
  Počet <input name="pocet">
    <input type="hidden" name="UzJsemToOdeslal" value="1"> 
    <input type="Submit" name="odesli"> 
</form> 
<?php
$player = $_SESSION['name'];

include"db.php";

global $mysqli;
$query = mysql_query('SELECT * FROM items');
while($item = mysql_fetch_assoc($query)){
    echo('<div class="item">');
    echo('<img src="images/icons/'.urlencode($item['image']).'.png">');
    echo(htmlspecialchars($item['item']).' za '.intval($item['prize']).' Kreditů');
    echo('
    <form action="proces.php" method="post">
    <input type="hidden" name="item" value="'.intval($item['itemid']).'">
    <label for="name">Počet</label>
    <input type="text" name="pocet" value="1">
    <input type="submit" value="Koupit"></form>');
    echo('</div>');
}
?>
</body>
<html>
Proces.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html";/>
<meta charset="UTF-8"/>
<title>Zpracování</title>
</head>
<body>
<?php session_start();
// AUTOREM JE m_pro_m, webmaster Minecraft serveru www.mineforlife.eu
// Tento script byl uvolnen pro hosting fakaheda.eu s jeho svolenim

// Dulezite je, aby jste prejmenovali soubor, jinak bude mozne, ze si kdokoliv aktivuje VIP bez zaplaceni
// Take je dulezite, aby jste meli ve stejnem umisteni jako tento soubor take rcon.php!!!

// V nasledujici casti nahradte text v uvozovkach, UVOZOVKY TAM NECHTE, STREDNIK NA KONCI TAKE!

//Kontrola jestli je přihlášen
if (isset($_SESSION['id']))
{
  echo '<script>
window.location.replace("/webshop/index.php"); 
</script>';
}
else
{
  echo "musíte se přihlásit";
}
?>
<?php
$player = $_SESSION['name'];
$server = "localhost";
$port = "26565";
$heslo = "asdfkaf1as2d31f3as1d2f";

$itemid = $_POST['itemid'];
$pocet = $_POST['pocet'];
$price = $cena*$pocet;
include "db.php";//includuje db
$mysql_query = mysql_query("SELECT balance from iconomy where username = '".$player."' ");//najde pocet kreditu v db
$kredit = mysql_fetch_array($mysql_query);
$pocet_kreditu = $kredit["balance"];
     
include_once("rcon.php"); 
$r = new rcon($server,$port,$heslo);
if($r->Auth())
{
  $r->rconCommand('give ' . $player. ' ' .$itemid. ' ' . $pocet);
  $r->rconCommand('msg ' . $player . ' Koupil jsi ' . $pocet . ' ' . $itemid);
}
else {
die('Chyba');
}
?>
</body>
</html>
Joker
Profil
SirDoxik:
Ta proměnná bude prázdná, protože na formuláři žádné pole s name=itemid není.
SirDoxik
Profil
Dobrý den, dostal jsem se do finální fáze projektu (hurá :D) ale ještě bych potřeboval s něčím pomoct. 1. problém je že mi script neodečte nic z databázáze což jsem řeši skoro celé odpoledne ale marně. Druhá věc je že script nějak ignoruje proměnnou $itemname a proměnnou $novypocet a vůbec nevím proč :/

kódy dávám zde

obchod.php

<html>
<body>
<?php

$player = $_SESSION['name'];

if (isset($_SESSION['id']))
{
  echo "Vítejte ve webshopu hráči ".$player.".";
}
else
{
  echo "musíte se přihlásit";
}
?>
<?php
$player = $_SESSION['name'];

include"db.php";

global $mysqli;
$query = mysql_query('SELECT * FROM items');
while($item = mysql_fetch_assoc($query)){
    echo('<div class="item">');
    echo('<img src="images/icons/'.urlencode($item['image']).'.png">');
    echo(htmlspecialchars($item['item']).' za '.intval($item['prize']).' Kreditů');
    echo('
    <form action="proces.php" method="post">
    <input type="hidden" name="itemid" value="'.intval($item['itemid']).'">
    <input type="hidden" name="cenna" value="'.intval($item['prize']).'">
    <label for="name">Počet</label>
    <input type="text" name="pocet" value="1">
    <input type="submit" value="Koupit"></form>');
    echo('</div>');
}
?>
</body>
<html>

proces.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html";/>
<meta charset="UTF-8"/>
<title>Zpracování</title>
</head>
<body>
<?php session_start();
// AUTOREM JE m_pro_m, webmaster Minecraft serveru www.mineforlife.eu
// Tento script byl uvolnen pro hosting fakaheda.eu s jeho svolenim

// Dulezite je, aby jste prejmenovali soubor, jinak bude mozne, ze si kdokoliv aktivuje VIP bez zaplaceni
// Take je dulezite, aby jste meli ve stejnem umisteni jako tento soubor take rcon.php!!!

// V nasledujici casti nahradte text v uvozovkach, UVOZOVKY TAM NECHTE, STREDNIK NA KONCI TAKE!

//Kontrola jestli je přihlášen
if (isset($_SESSION['id']))
{
  echo '<script>
window.location.replace("/webshop/index.php"); 
</script>';
}
else
{
  echo "musíte se přihlásit";
}
?>
<?php
$player = $_SESSION['name'];
$server = "localhost";
$port = "26565";
$heslo = "asdfkaf1as2d31f3as1d2f";

$itemid = $_POST['itemid'];
$pocet = $_POST['pocet'];
$cena = $_POST['cenna'];
$prize = $cena*$pocet;
include "db.php";//includuje db
$mysql_query = mysql_query("SELECT balance from iconomy where username = '".$player."' ");//najde pocet kreditu v db
$kredit = mysql_fetch_array($mysql_query);
$pocet_kreditu = $kredit["balance"];
$itemzdm = mysql_query("SELECT item from items where itemid = '".$itemid."' ");//najde pocet kreditu v db
$itemname = mysql_fetch_array($mysql_query);
if($prize >=$pocet_kreditu) {
  echo '<script>window.location.replace("obchod.php")';
  die ('Chyba');
  }
else {


include_once("rcon.php"); 
$r = new rcon($server,$port,$heslo);
if($r->Auth())
{
  $r->rconCommand('give ' .$player. ' ' .$itemid. ' ' .$pocet);
  $r->rconCommand('msg ' .$player. ' Koupil jsi ' .$pocet. 'x '.$itemname.' za '.$prize.' a zbylo ti '.$novypocet);
}
else {
die('Chyba');
}
$novypocet = ($pocet_kreditu-$prize);
$update = mysql_query("UPDATE iconomy SET balance = `".$novypocet."` WHERE username = `".$player."`");
}
?>
</body>
</html>
Předem děkuji za pomoc :) a velice vám děkuju za ochotu u předchozích vláken :D vím neni to se mnou lehké :)
Joker
Profil
SirDoxik:
Nic ve zlém, ale nechcete raději přizvat někoho, kdo se v PHP trochu orientuje?
Pochybuji, že takhle přes diskusi to někdy dotáhneme k použitelné úrovni.

Mimochodem, když pominu absenci jakékoliv kontroly vstupů od uživatele, zajímavá -byť podivná- vlastnost je to, jak se cena přebírá od uživatele. A uživatel si může nastavit i zápornou cenu, aby mu to přidalo věci a ještě přičetlo kredity.
SirDoxik
Profil
Mě je jedno že to nějak nedopadne :) chtěl jsem se jen s php trochu seznámit :)
Fisir
Profil
Reaguji na SirDoxika:
V $itemname je pole obsahující prvek balance. $novypocet generuješ až za posláním zprávy do hry, takže proto se tam neobjeví. Databáze se neaktualizuje proto, že řetězce se neobalují do zpětných apostrofů, ale buď do jednoduchých, nebo dvojitých uvozovek.

Je vidět, že absolutně netušíš, o co jde.
SirDoxik
Profil
Nikdo učený z nebe nespadl :) každý nějak začínal a jelikož programuji v php asi 4 dny, je možné, že nějaké věci neznám ;)
Fisir
Profil
Reaguji na SirDoxika:
O to zvláštnější/nebezpečnější je hned vyrábět obchod.
SirDoxik
Profil
On to ani neni obchod :) Je to jen pokus kde se chci s php seznámit :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: