1 Востаннє редагувалося Faraon (14.10.2013 18:49:36)

Тема: Непослушний код )

Привіт, я ось ніяк не можу зрозуміти в чому справа, мене не слухається код.
Наприклад,


$qy = "SELECT * FROM battle WHERE status='1'";  // виносимо все що є в цій таблиці з статусом 1
$ult = mysql_query($qy) or die("Query failed : " . mysql_error());  
$aYew = mysql_fetch_array( $ult);  
$abattle_id = $aYew["battle_id"]; // индикатор боя
$auser1_id = $aYew["user1_id"];  // нік одного гравця
$auser2_id = $aYew["user2_id"]; // нік другого гравця
$abattlgo = $aYew["battlgo"]; // зробив хід гравець один ???
$abattlgo2 = $aYew["battlgo2"];  // зробив хід гравець два ???
$astatus = $aYew["status"];  // статус боя. (1- бій все ще іде) (2-бій закінчений)


if ($abattlgo and $abattlgo2 == "go")  { // перевіряємо якщо два гравця зробили хід то віднімаємо від життя гравця силу противника і обновляєм зеначення в базі
$aHP = $aHP - $a2Strength ; 
$sqt = mysql_query("UPDATE users SET HP=$aHP WHERE login='$aNickName' ")  or die("Савсэм плохо: " . mysql_error());
$a2HP = $a2HP - $aStrength ;
$sqtу = mysql_query("UPDATE users SET HP=$a2HP WHERE login='$a2NickName' ")  or die("Савсэм плохо: " . mysql_error());
  
$dgqt = mysql_query("UPDATE battle SET battlgo='no' WHERE user1_id='$aNickName' ");
$swdft = mysql_query("UPDATE battle SET battlgo2='no' WHERE user2_id='$a2NickName' ");

} 

Все працює! якщо дві змінні містять в собі "go" то від змінної $aHP - $a2Strength і записується значення в базу а потім повинно обновляти значення поля battlgo що знахолдиться в базі на "no" і код має зупинятися поки поля
battlgo і battlgo2 не будуть містити в собі "go", але воно чомусь не обновляє значення зразу, обновити може після 50 перезапусків сторінки а може і після двох.
Є ще багато випадків коли код не виконує те що потрібен мав робити, і це не через те що я зробив помилку.
І є ще одна проблема! Як ви всі знаєте я використовую сесії, коли гравець входить в ігру його логін записується в сесію, якщо браузер закрити то сесія має видалитися і користувача має викинути на головну сторінку, але чомусь так теж не робить. Коли я ввійшов в ігру під своїм логіном після чого я закриваю браузер і за 1хв знову відкриваю, і що я бачу???? Я авторизований.
В чому справа??? Може потрібно драйвера обновити чи щось таке! Підкажіть будь-ласка в чому справа.

2

Re: Непослушний код )

Faraon написав:

Привіт, я ось ніяк не можу зрозуміти в чому справа, мене не слухається код.

ви пробували з ним поговорити? може, його щось турбує криві руки господаря, наприклад, можливо, він постійно під тиском, переживає стрес і в нього депресія

Подякували: koala, cuhedg, ostap34PHP3

3

Re: Непослушний код )

Faraon написав:

Коли я ввійшов в ігру під своїм логіном після чого я закриваю браузер і за 1хв знову відкриваю, і що я бачу???? Я авторизований.
В чому справа??? Може потрібно драйвера обновити чи щось таке! Підкажіть будь-ласка в чому справа.

Ви майже відповіли на своє питання. Її ж потрібно витирати, тобто закривати.

4

Re: Непослушний код )

Faraon написав:

Коли я ввійшов в ігру під своїм логіном після чого я закриваю браузер і за 1хв знову відкриваю, і що я бачу???? Я авторизований.

https://replace.org.ua/extensions/om_images/img/61c66c414e37b/13605821254787.jpeg

Подякували: cuhedg, mike2

5

Re: Непослушний код )

ТС, пора читати про механізм сесій та бази даних.

І мануали

http://apikabu.ru/img_n/2012-02_5/92z.jpg

6

Re: Непослушний код )

Cyan ви кажете

криві руки господаря, наприклад

ну тоді давайте вияснимо в чому тут моя помилка!
коли два гравця нажали на кнопку атака тоді має виконуватися один раз такий код:

$qy = "SELECT * FROM battle WHERE status='1'";  // виносимо все що є в цій таблиці з статусом 1
$ult = mysql_query($qy) or die("Query failed : " . mysql_error());  
$aYew = mysql_fetch_array( $ult);  
$abattle_id = $aYew["battle_id"]; // индикатор боя
$auser1_id = $aYew["user1_id"];  // нік одного гравця
$auser2_id = $aYew["user2_id"]; // нік другого гравця
$abattlgo = $aYew["battlgo"]; // зробив хід гравець один ???
$abattlgo2 = $aYew["battlgo2"];  // зробив хід гравець два ???
$astatus = $aYew["status"];  // статус боя. (1- бій все ще іде) (2-бій закінчений)

      if ($abattlgo and $abattlgo2 == "go")  { // перевіряємо якщо два гравця зробили хід то віднімаємо від життя гравця силу противника
$aHP = $aHP - $a2Strength ;
$sqt = mysql_query("UPDATE users SET HP=$aHP WHERE login='$aNickName' ")  or die("Савсэм плохо: " . mysql_error());
$a2HP = $a2HP - $aStrength ;
$sqtу = mysql_query("UPDATE users SET HP=$a2HP WHERE login='$a2NickName' ")  or die("Савсэм плохо: " . mysql_error());

$dgqt = mysql_query("UPDATE battle SET battlgo='no' WHERE user1_id='$aNickName' "); // обновляєм значення що гравець не готовий до наступної атаки противника
$swdft = mysql_query("UPDATE battle SET battlgo2='no' WHERE user2_id='$a2NickName' "); // обновляєм значення що гравець не готовий до наступної атаки противника

}

чому зразу не обновляються значення полів

$dgqt = mysql_query("UPDATE battle SET battlgo='no' WHERE user1_id='$aNickName' "); // обновляєм значення що гравець не готовий до наступної атаки противника
$swdft = mysql_query("UPDATE battle SET battlgo2='no' WHERE user2_id='$a2NickName' "); // обновляєм значення що гравець не готовий до наступної атаки противника

після того як виконався цей код

$aHP = $aHP - $a2Strength ;
$sqt = mysql_query("UPDATE users SET HP=$aHP WHERE login='$aNickName' ")  or die("Савсэм плохо: " . mysql_error());
$a2HP = $a2HP - $aStrength ;
$sqtу = mysql_query("UPDATE users SET HP=$a2HP WHERE login='$a2NickName' ")  or die("Савсэм плохо: " . mysql_error());

???

7

Re: Непослушний код )

поля оновлюються тільки тоді коли в двох гравців обновляться сторінки в браузері, але справа в тому що якщо в одного з гравців не обновити сторінку то атака не припинеться!

8

Re: Непослушний код )

Не здогадуєтеся, чому?
$qy = "SELECT * FROM battle WHERE status='1'";  // виносимо все що є в цій таблиці з статусом 1

9

Re: Непослушний код )

Bartash написав:
Не здогадуєтеся, чому?
$qy = "SELECT * FROM battle WHERE status='1'";  // виносимо все що є в цій таблиці з статусом 1

Ні, підкажіть будь-ласка!

10

Re: Непослушний код )

Побудуйте блок-схему свого скрипта, і самі побачите, можливо.

11

Re: Непослушний код )

Ні, нічого мені не зрозуміло!
Скажіть в чому помилка?

12

Re: Непослушний код )

Викиньте цей код і напишіть нормально) ПО кроках і дивіться чи на кожному кроці все працює.
Називайте правильно змінні
Пишіть хороший код бо це що ви написали "or die("Савсэм плохо: " . mysql_error());" це жестяк)

13

Re: Непослушний код )

А можна діаграму (ERD чи класів) глянути? Бо щось я ніяк второпати не можу, що там відбувається.
Ну і

if ($abattlgo and $abattlgo2 == "go")

або маячня, або вкрай невдалі імена змінних...

14

Re: Непослушний код )

Faraon написав:

Ні, нічого мені не зрозуміло!
Скажіть в чому помилка?

З цього припускаю, що ви не розібралися з принципом роботи сайтів на PHP + БД:

1. Робите запит - перевіряйте результат.
2. Оновлення бази НЕ повернеться автоматично до скрипта. Тут або повторний запит, або Ajax.

15

Re: Непослушний код )

Оновлення бази НЕ повернеться автоматично до скрипта

Ви маєте наувазі що для оновлених полів в базі потрібно робити повторно запит?

16

Re: Непослушний код )

Faraon написав:

Оновлення бази НЕ повернеться автоматично до скрипта

Ви маєте наувазі що для оновлених полів в базі потрібно робити повторно запит?

Рома, треба було починати з основ, бо те що зараз скаже Барташ, тебе дуже розчарує

Подякували: Faraon1

17

Re: Непослушний код )

miroslav.chandler - я це чим раз тим більше розумію що нічого путнього з цього не вийде!
Bartash - пробачте що надокучаю) можете не відповідати! Завтра почитаю підручники PHP + БД

18

Re: Непослушний код )

Faraon написав:

miroslav.chandler - я це чим раз тим більше розумію що нічого путнього з цього не вийде!
Bartash - пробачте що надокучаю) можете не відповідати! Завтра почитаю підручники PHP + БД

вийде і з тебе, Ромко, путній кодер, тіки вчитися треба і башкою думати

Подякували: Faraon1

19

Re: Непослушний код )

Faraon написав:

Оновлення бази НЕ повернеться автоматично до скрипта

Ви маєте наувазі що для оновлених полів в базі потрібно робити повторно запит?

А як ще клієнт дізнається про зміни на базі у сервера?..

20

Re: Непослушний код )

Я би радив автору, для початку, підбирати логічні назви змінних.
+ без транзакцій тут не обійтись.