| Autor | Zpráva | ||
|---|---|---|---|
| Clarity Profil * |
#1 · Zasláno: 20. 2. 2015, 15:18:26 · Upravil/a: Moderátor (editace znemožněna) 20. 2. 2015, 18:58:31
Vytvoril som si kód na verbovanie jednotiek, mal by fungovať takto: Hráč si vybere a zapíše do políčka koľko chce daných jednotiek.
<table cellspacing="0" cellpading="0"> <form method="POST"> <tr><td><b>Šermiari</b> </td> <td><?php echo $sermiar['sermiar'] ?></td><td><input type="text" name="ser"></td></tr> <tr><td><b>Lukostrelci</b> </td> <td><?php echo $lukostrelec['lukostrelec'] ?></td><td><input type="text" name="luk"></td></tr> <tr><td><b>Kopíjníci</b> </td><td> <?php echo $kopijnik['kopijnik'] ?></td><td><input type="text" name="kop"></td></tr> <tr><td><b>Halapartníci</b> </td><td><?php echo $halapartnik['halapartnik'] ?></td><td><input type="text" name="hal"></td></tr> <tr><td><b>Husári</b></td> <td><?php echo $husar['husar'] ?></td><td><input type="text" name="hus"></td></tr> <tr><td><b>Rytieri </b></td> <td><?php echo $rytier['rytier'] ?></td><td><input type="text" name="ryt"></td></tr> <tr><td><b>Lukostrelci na koňoch </b></td><td> <?php echo $lukostrelecKon['lukostrelecKon'] ?></td><td><input type="text" name="kon"></td></tr> <tr><td><b>Baranidlá </b></td> <td><?php echo $baranidlo['baranidlo'] ?></td><td><input type="text" name="bar"></td></tr> <tr><td><b>Bojové vozy </b></td> <td><?php echo $voz['voz'] ?></td><td><input type="text" name="voz"></td></tr> <tr><td></td> <td></td><td><input type="submit" value="Verbovať" name="verbuj"></td></tr> </form> </table> Potom klikne na tlačítko "Verbovať" a mal by nastať tento PHP kód: <?php
$verS = mysql_real_escape_string($_POST['ser']);
$verL = mysql_real_escape_string($_POST['luk']);
$verK = mysql_real_escape_string($_POST['kop']);
$verH = mysql_real_escape_string($_POST['hal']);
$verHs = mysql_real_escape_string($_POST['hus']);
$verR = mysql_real_escape_string($_POST['ryt']);
$verLk = mysql_real_escape_string($_POST['kon']);
$verB = mysql_real_escape_string($_POST['bar']);
$verV = mysql_real_escape_string($_POST['voz']);
if(isset($_POST['verbuj'])){
$sermiar = $sermiar + $verS;
$lukostrelec = $lukostrelec + $verL;
$kopijnik = $kopijnik + $verK;
$voz = $voz + $verV;
$baranidlo = $baranidlo + $verB;
$lukostrelecKon = $lukostrelecKon + $verLk;
$halapartnik = $halapartnik + $verH;
$rytier = $rytier + $verR;
mysql_query("INSERT INTO uzivatelia(sermiar,kopijnik,lukostrelec,halapartnik,husar,rytier,lukostrelecKon,baranidlo,voz) VALUES('$sermiar', '$kopijnik', '$lukostrelec', '$halapartnik', '$husar', '$rytier', '$lukostrelecKon', '$baranidlo', '$voz') WHERE meno = '". $_SESSION["meno"] ."'");
}No z neznámej príčiny to nechce fungovať, neviete prečo? Hodnota jednotky sa proste nezmení. Moderátor Davex: Titulek „Verbovanie jednotiek“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
|
||
| lionel messi Profil |
Clarity:
Pár pripomienok: 1. Escapovanie (riadky 2–10) presuň až do podmienky kontrolujúcej odoslanie formulára (detail). 2. K riadkom 13–20: Nemajú logiku, veľmi im nerozumiem. Buď ide len o akýsi úryvok alebo o chybu, pretože hodnota $sermiar sa vypočíta 0 + $verS, pretože s týmito premennými predtým nepracuješ. Ale k zmene hodnoty by malo prísť tak či onak.
3. Čo sa stane, keď upravíš záver podmienky takto: mysql_query("INSERT INTO uzivatelia(sermiar,kopijnik,lukostrelec,halapartnik,husar,rytier,lukostrelecKon,baranidlo,voz) VALUES('$sermiar', '$kopijnik', '$lukostrelec', '$halapartnik', '$husar', '$rytier', '$lukostrelecKon', '$baranidlo', '$voz') WHERE meno = '". $_SESSION["meno"] ."'");
if (mysql_error()) {
echo "Došlo k chybe dotazu: ". mysql_error();
}Ak to nefungovalo doteraz, nebude ani po tejto zmene, ale ide o nájdenie chyby, ktorá sa v prípade zlyhania dotazu vypíše. PS: Nikde som si nevšimol, že by si sa k db pripájal, ale predpokladám, že to riešiš v kóde na inom mieste (podobne session_start). |
||
| Clarity Profil * |
#3 · Zasláno: 20. 2. 2015, 15:45:41 · Upravil/a: Clarity
Ahoj, vďaka za reakciu
2. To je môj spôsob verbovania, do premennej $sermiar sa pripočíta hodnota, ktorú sme zadali vo formulári a vypíše sa už tá nová. A súbor na pripojenie ku databáze tam mám. |
||
| lionel messi Profil |
Clarity:
Ďakujem za objasnenie. Vyskúšal si upraviť kód podľa bodu 3 z predošlého príspevku? Vypisuje sa chyba? |
||
| Clarity Profil * |
#5 · Zasláno: 20. 2. 2015, 15:53:36
Nič sa nevypísalo.
|
||
| lionel messi Profil |
Clarity:
„Nič sa nevypísalo.“ Žiaľ, iné problémy než tie, na ktoré som poukázal v [#2], v úryvkoch nevidím. Spýtam sa však na niečo iné, možno od veci. Nehľadáš náhodou UPDATE miesto INSERT? Chceš v tabuľke prepísať existujúci záznam alebo vložiť nový (nie je mi to na 100% jasné)? Čo vkladá do db tvoj kód (niečo by mal, keďže mysql_error mlčí)?
|
||
| Clarity Profil * |
#7 · Zasláno: 20. 2. 2015, 16:01:57
Prepísať existujúci, akurát pozerám jeden tutorial, kde použil UPDATE, idem to vyskúšať.
|
||
| lionel messi Profil |
Clarity:
„idem to vyskúšať.“ V tom prípade sa možno bude hodiť nakuknúť do dokumentácie na správnu syntax. |
||
| Clarity Profil * |
#9 · Zasláno: 20. 2. 2015, 16:37:46 · Upravil/a: Clarity
Upravil som kód takto, stále nechce fungovať už vážne netuším prečo :(
<?php
include "config.php";
$verS = $_POST['ser'];
$verL = $_POST['luk'];
$verK = $_POST['kop'];
$verH = $_POST['hal'];
$verHs = $_POST['hus'];
$verR = $_POST['ryt'];
$verLk = $_POST['kon'];
$verB = $_POST['bar'];
$verV = $_POST['voz'];
if(isset($_POST['verbuj'])){
$sermiar = $sermiar + $verS;
$lukostrelec = $lukostrelec + $verL;
$kopijnik = $kopijnik + $verK;
$voz = $voz + $verV;
$baranidlo = $baranidlo + $verB;
$lukostrelecKon = $lukostrelecKon + $verLk;
$halapartnik = $halapartnik + $verH;
$rytier = $rytier + $verR;
$husar = $husar + $verHs;
mysql_query("UPDATE 'uzivatelia' SET
'sermiar' = '.$sermiar.',
'kopijnik' = '.$kopijnik.',
'lukostrelec' = .$lukostrelec.',
'halapartnik' = '.$halapartnik.',
'husar' = '.$husar.',
'rytier' = '.$rytier.',
'lukostrelecKon' = '.$lukostrelecKon.',
'baranidlo' = '.$baranidlo.',
'voz' = '.$voz.'
WHERE 'meno' = '".$_SESSION['meno']."'");
}
?>Pri .$lukostrelec je '
|
||
| lionel messi Profil |
Clarity:
„Upravil som kód takto,“ Zaniesol si do neho bezpečnostnú chybu, pretože si odstránil escapovanie (ja som ti ho radil iba presunúť a to spolu s priradeným užívateľských vstupov do lokálnych premenných). Navyše je syntakticky chybný, väčšina bodiek (okrem tých vo WHERE) tam nemá čo hľadať (základy spájania reťazcov). Správna verzia: mysql_query("UPDATE uzivatelia SET
'sermiar' = '$sermiar',
'kopijnik' = '$kopijnik',
'lukostrelec' = '$lukostrelec',
'halapartnik' = '$halapartnik',
'husar' = '$husar',
'rytier' = '$rytier',
'lukostrelecKon' = '$lukostrelecKon',
'baranidlo' = '$baranidlo',
'voz' = '$voz'
WHERE 'meno' = '".$_SESSION['meno']."'"); |
||
| Slark Profil * |
#11 · Zasláno: 20. 2. 2015, 16:49:24
U lukostřelce Vám chybí apostrof.
|
||
| lionel messi Profil |
Slark:
„U lukostřelce Vám chybí apostrof.“ Komu? Ak Claritymu, dodatočne sa o tom v [#9] zmienil: „Pri .$lukostrelec je '“ a chyba bola aj tak inde. Vo svojom kóde žiadny chýbajúci apostrof nevidím.
|
||
| Keeehi Profil |
Je co updatovat? Když provedeš
"SELECT * FROM uzivatelia WHERE meno = '".$_SESSION['meno']."'" tak to získá jednoho uživatele?
Názvy sloupců nepatří do apostrofů! Pokud už tam chceš něco dát, tak tento znak `
Počty jednotek snad nejsou stringy! Měl by to být nějaký typ integeru. Takže ani kolem nich nepatří apostrofy. S tím ale pak souvisí i to, že se nepoužívá mysql_rel_escape_string ale musíš zajistit, že to budy vždy číslo (třeba přetypováním) A za další by mělo být bezpečnější použít "sermiar = sermiar + ".$verS než "sermiar = $sermiar". Ta první veze vždy zvětší hodnotu o dané číslo, u té druhé (aktuální) se může stát, že ne.
|
||
| Clarity Profil * |
#14 · Zasláno: 20. 2. 2015, 17:16:36
Upravil som kód takto, no výsledok stále ten istý:
<?php
include "config.php";
$verS = (int)$_POST['ser'];
$verL = (int)$_POST['luk'];
$verK = (int)$_POST['kop'];
$verH = (int)$_POST['hal'];
$verHs =(int)$_POST['hus'];
$verR = (int)$_POST['ryt'];
$verLk =(int)$_POST['kon'];
$verB = (int)$_POST['bar'];
$verV = (int)$_POST['voz'];
if(isset($_POST['verbuj'])){
mysql_query("UPDATE 'uzivatelia' SET
sermiar = $sermiar + $verS,
kopijnik = $kopijnik + $verK,
lukostrelec = $lukostrelec + $verL,
halapartnik = $halapartnik + $verH,
husar = $husar + $verHs,
rytier = $rytier + $verR,
lukostrelecKon = $lukostrelecKon + $verLk,
baranidlo = $baranidlo + $verB,
voz = $voz + $verV
WHERE meno = '".$_SESSION['meno']."'");
}
?> |
||
| lionel messi Profil |
#15 · Zasláno: 20. 2. 2015, 17:21:20
Clarity:
Stále zle. mysql_query("UPDATE uzivatelia SET
sermiar = sermiar + $verS,
kopijnik = kopijnik + $verK,
lukostrelec = lukostrelec + $verL,
halapartnik = halapartnik + $verH,
husar = husar + $verHs,
rytier = rytier + $verR,
lukostrelecKon = lukostrelecKon + $verLk,
baranidlo = baranidlo + $verB,
voz = voz + $verV
WHERE meno = '".$_SESSION['meno']."'"); |
||
| Clarity Profil * |
#16 · Zasláno: 20. 2. 2015, 17:27:29
Funguje. :)
Veľká vďaka. |
||
| lionel messi Profil |
Clarity:
„Veľká vďaka.“ Za málo, na to tu sme. :-) |
||
| Keeehi Profil |
#18 · Zasláno: 20. 2. 2015, 17:44:43
|
||
| Lamicz Profil |
#19 · Zasláno: 22. 2. 2015, 20:22:50
Vím, že podle kódu je Clarity začátečník, ale ta struktura DB se mi moc nezdá. Osobně bych volil číselník jednotek a M:N vazební tabulku mezi jednotky a uživatele s počtem dané jednotky
číselník jednotek - jednotka: id (PK), nazev vazební tabulka - jednotka_uzivatel: id (PK) - nepovinné, jednotka_id (vazba na jednotku), uzivatel_id (vazba na uzivatele), pocet (pocet naverbovanych jedn.) |
||
|
Časová prodleva: 11 let
|
|||
0