За последние 24 часа нас посетили 20836 программистов и 1129 роботов. Сейчас ищут 311 программистов ...

Выполняется только та форма, что выше

Тема в разделе "PHP для новичков", создана пользователем Cyrius, 15 авг 2017.

  1. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Сюжет:
    Человек может оставлять свои заявки на вступление в команду или её создание по играм.
    Человек имеет по одной заявке в каждой из этих игр (создание или вступление - без разницы).
    Человек хочет иметь возможность редактировать свои заявки.
    Вот код, который печатает форму, в которой находиться табличка со всеми данными заявки (сделано, что при клике на ячейку, ее содержимое можно менять). При малейшем изменении любого поля появляется кнопка сохранения данных.
    PHP:
    1. <?php
    2. // $id = isset($_SESSION['steamid']) ? $_SESSION['steamid'] : $_SESSION['id']; //id залогинившегося
    3. // $login = $_SESSION['login']; // login залогинившегося
    4.  
    5. // $qery1 = mysqli_query($connect,"SELECT * FROM `dotaplayers` WHERE `user_id` = '$id'");
    6. // $query2 = mysqli_query($connect,"SELECT * FROM `dotateams` WHERE `user_id` = '$id'");
    7. // $query3 = mysqli_query($connect,"SELECT * FROM `csgoteams` WHERE `user_id` = '$id'");
    8. // $query4 = mysqli_query($connect,"SELECT * FROM `csgoplayers` WHERE `user_id` = '$id'");
    9. // $query =  mysqli_query($connect,"SELECT * FROM `users` WHERE `login` = '$login' ");
    10. // $data = mysqli_fetch_array($query);
    11.  
    12. // $sql_steam ="SELECT * FROM `steam_auth` WHERE `steam_id` = '$steamid'";
    13. // $steam_authing = mysqli_query($connect,$sql_steam);
    14. // $steam_data_table = mysqli_fetch_array($steam_authing);
    15.  
    16. if(mysqli_num_rows($query1) > 0 || mysqli_num_rows($query2) > 0 || mysqli_num_rows($query3) > 0  || mysqli_num_rows($query4) > 0 ){
    17. echo "<p><b>Ваши заявки: </b> </p>";
    18. echo "<div style=' margin-bottom: 5px ; border: 1px solid rgba(255, 165, 0, 0.27); padding: 0;background-color: rgba(255, 224, 0, 0.18);'><p style='margin:0;'><img src='img/znak.png' height='40' style='float:left;'>Для редактирования просто щелкните по ячейке, затем на появившуюся кнопку.<br><span style='margin-left: 10px;'>Обычно выполнение операции длиться до 5 сек.</span> </p></div>";
    19. echo "<div id='save' style='margin:0; padding:0; position: relative;bottom: 0;top: 4px;'> </div>";
    20. //Если ищет тиму в доте
    21. if(mysqli_num_rows($query1) > 0){
    22.   $z = mysqli_fetch_array($query1);
    23.   printf("
    24.  <form method='post' id='change'>  
    25.  <table style='border-collapse:collapse;background:#d8d6d0; border: 1px #5964f1; margin:0;' border='1' id='tablee' width='834'>
    26.  <tr align='center'>
    27.    <td height='45' ><input class='mine_z' type'text' value='%s' size='10' name='nick_player_dota'></td>
    28.    <td><input class='mine_z' type'text' value='%s' size='10' name='role_player_dota'></td>
    29.    <td><input class='mine_z' type='text' value='%s' size='10' name='mmr_player_dota'></td>
    30.    <td><input class='mine_z' type='text' value='%s' size='5' name='time_player_dota'></td>
    31.    <td><input class='mine_z' type='text' value='%s' size='10' name='db_player_dota'></td>
    32.    <td><input class='mine_z' type='text' value='%s' size='10' name='sign_player_dota'></td>
    33.    <td><input class='mine_z' type='text' value='%s' size='10' name='contacts_player_dota'></td>
    34.    <td align='center' style='padding:0; background: #ff6666;' width='60'><label for='delete'><img src='img/crest.png' class='block'></label><input type='submit' name='delete_dota_player' style='display: none;' id='delete'> </td>
    35.  </tr>
    36.  </table>
    37.  </form>  <br><br>
    38.  
    39.  ",$z['nick'],$z['role'], $z['mmr'],$z['db'],$z['t1me'],$z['sign'],$z['contacts']);
    40. }
    41.  
    42. //Если создает тиму в доте
    43. elseif(mysqli_num_rows($query2) > 0){
    44. $z = mysqli_fetch_array($query2);
    45.  <form method='post' id='change' >
    46.  
    47.   <script>
    48. function newWin%s() {window.open('preview_team.php?team_id=%s', 'Профиль команды', 'width=430,height=500,left=400,top=100');}
    49.  </script>  
    50.  <table style='border-collapse:collapse;background:#d8d6d0; border: 1px #5964f1; margin:0;' border='1' id='tablee' width='834'>
    51.  <tr align='center'>
    52.    <td height='45'><span onclick='newWin%s()' style='cursor:pointer;'><img src='%s' width='70' ></span></td>
    53.    <td><input class='mine_z' type'text' value='%s' size='10' name='name_team_dota'></td>
    54.    <td><input class='mine_z' type='text' value='%s' size='10' name='role_team_dota'></td>
    55.    <td><input class='mine_z' type='text' value='%s' size='3' name='mmr_team_dota'></td>
    56.    <td><textarea class='mine_z' rows='4' cols='30' name='about_team_dota'>%s</textarea></td>
    57.    <td><input class='mine_z' type='text' value='%s' size='10' name='contacts_team_dota'></td>
    58.    <td align='center' style='padding:0; background: #ff6666;' width='60'><label for='delete'><img src='img/crest.png' class='block'></label><input type='submit' name='delete_dota_team' style='display: none;' id='delete'> </td>
    59.  </tr>
    60.  </table>
    61.  </form>  <br><br>
    62.  
    63.  ",$id,$id,$id,$z['avatar_short'], $z['name'],$z['roles'],$z['mmr'],$z['about'],$z['contacts']);
    64.      }
    65. //Если ищет тиму в csgo
    66.      if(mysqli_num_rows($query4) > 0){
    67.  
    68. $c = mysqli_fetch_array($query4);
    69.  <form method='post' id='change' >
    70.  <table style='border-collapse:collapse;background:#d8d6d0; border: 1px #5964f1; margin:0;' border='1' id='tablee' width='834'>
    71.  <tr align='center'>
    72.    <td width='104'><input class='mine_z' type'text' value='%s' size='10' name='nick_player_csgo'></td>
    73.    <td width='219'><img src='%s'></td>
    74.    <td width='68'><input class='mine_z' type'text' value='%s' size='5' name='time_player_csgo'></td>
    75.    <td width='105'><input class='mine_z' type'text' value='%s' size='10' name='primetime_player_csgo'></td>
    76.    <td><input class='mine_z' type'text' value='%s' size='20' name='contacts_player_csgo'></td>
    77.  
    78.    <td align='center' style='padding:0; background: #ff6666;' width='60'><label for='delete'><img src='img/crest.png' class='block'></label><input type='submit' name='delete_csgo_player' style='display: none;' id='delete'> </td>
    79.  </tr>
    80.  </table>
    81.  </form>
    82.  <br><br>
    83.  ",$c['nick'],$c['rank'],$c['time'],$c['game_time'],$c['contacts']);
    84.  
    85.  
    86.      }
    87.  
    88.  
    89.  
    90.  
    91.  
    92.  
    93.  
    94.      if(isset($_POST['delete_dota_team'])){
    95.   mysqli_query($connect,"DELETE FROM `dotateams` WHERE `user_id` = '$id'");
    96. header("Location:".$_SERVER['PHP_SELF']."#zayavka");
    97.   }
    98.     if(isset($_POST['delete_dota_player'])){
    99.   mysqli_query($connect,"DELETE FROM `dotaplayers` WHERE `user_id` = '$id'");
    100. header("Location:".$_SERVER['PHP_SELF']."#zayavka");
    101.   }
    102.     if(isset($_POST['delete_csgo_player'])){
    103.   mysqli_query($connect,"DELETE FROM `csgoplayers` WHERE `user_id` = '$id'");
    104. header("Location:".$_SERVER['PHP_SELF']."#zayavka");
    105.   }
    106. }
    107.  
    108. ?>
    109. <script>
    110. var elem = document.getElementsByClassName('mine_z');
    111. for (var i = 0; i < elem.length; i++) {
    112.     elem[i].oninput = function() {
    113.     var save = document.getElementById('save');
    114.     save.innerHTML = "<label><img src='img/save.png' style='cursor:pointer; margin:0;'><input type='submit' name='submit_changes' style='display:none;' form='change'></label>";
    115.     }
    116.   }
    117. </script>
    118.  
    119. <?php
    120. if(isset($_POST['submit_changes'])){
    121. //dota teams
    122.   $c_name = $_POST['name_team_dota'];
    123.   $c_role = $_POST['role_team_dota'];
    124.   $c_mmr = $_POST['mmr_team_dota'];
    125.   $c_about = $_POST['about_team_dota'];
    126.   $c_contacts = $_POST['contacts_team_dota'];
    127. //dota plsyers
    128.   $c_nick_p = $_POST['nick_player_dota'];
    129.   $c_role_p = $_POST['role_player_dota'];
    130.   $c_mmr_p = $_POST['mmr_player_dota'];
    131.   $c_db_p = $_POST['db_player_dota'];
    132.   $c_sign_p = $_POST['sign_player_dota'];
    133.   $c_time_p = $_POST['time_player_dota'];
    134.   $c_contacts_p = $_POST['contacts_player_dota'];
    135. //csgp players
    136.   $c_nick_pcs = $_POST['nick_player_csgo'];
    137.   $c_time_pcs = $_POST['time_player_csgo'];
    138.   $c_gametime_pcs = $_POST['primetime_player_csgo'];
    139.   $c_contacts_pcs = $_POST['contacts_player_csgo'];
    140.   //-------
    141.   if($c_name != '' and $c_role != '' and $c_mmr != '' and $c_about != '' and $c_contacts != ''){
    142.     $sql_cahnge_query = "UPDATE `dotateams` SET `name` = '$c_name' ,  `roles` ='$c_role' , `mmr` = '$c_mmr' , `about` = '$c_about' , `contacts` = '$c_contacts' WHERE `user_id` = '$id'";
    143. mysqli_query($connect, $sql_cahnge_query);
    144. header("Location:".$_SERVER['PHP_SELF']."#zayavka");
    145.  
    146. }
    147.   if($c_nick_p != '' and $c_role_p != '' and $c_mmr_p != '' and $c_db_p != '' and $c_sign_p != '' and $c_time_p != '' and $c_time_p != '') {
    148.     $sql_cahnge_query_p = "UPDATE `dotaplayers` SET `nick` = '$c_nick_p' ,  `role` ='$c_role_p' , `mmr` = '$c_mmr_p' , `t1me` = '$c_time_p' , `db` = '$c_db_p', `sign` = '$c_sign_p', `contacts` = '$c_contacts_p' WHERE `user_id` = '$id'";
    149. mysqli_query($connect, $sql_cahnge_query_p);
    150. header("Location:".$_SERVER['PHP_SELF']."#zayavka");
    151.   }
    152.   if($c_nick_pcs != '' and $c_time_pcs != '' and $c_gametime_pcs != '' and $c_contacts_pcs != ''){
    153. $sql_change_query = "UPDATE `csgoplayers` SET `nick` = '$c_nick_pcs' ,  `time` ='$c_time_pcs' , `game_time` = '$c_gametime_pcs' , `contacts` = '$c_contacts_pcs'  WHERE `user_id` = '$id'";
    154. mysqli_query($connect,$sql_change_query);
    155. header("Location:".$_SERVER['PHP_SELF']."#zayavka");
    156.  
    157.   }
    158. }
    159. ?>
    Если Человек имеет всего одну заявку, то все работает прекрасно. Если же он имеет две заявки, то возможность к редактированию и удалению имеет только ТА, ЧТО НАХОДИТЬСЯ ВЫШЕ.
    Не могу понять, в чем причина данный проблемы, надеюсь на вашу помощь.
    Вот небольшое видео (50 сек) с описанием проблемы более подробно. Сорян за качество, но впринципе там все понятно.
     
    denis01 нравится это.
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    типично. Результат запроса с БД выдает многомерный массив. var_dump ( результат ); покажет структуру массива. Далее с циклом нужно работать или что там за задумка, вам решать.
     
  3. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Спасибо, буду думать
     
  4. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    @MouseZver На сколько я понял мысль, у меня при двух заявках должен массив post быть двумерным. На деле же он обычный.
     

    Вложения:

    • 0QzHqmFdj5.gif
      0QzHqmFdj5.gif
      Размер файла:
      878,6 КБ
      Просмотров:
      5
    #4 Cyrius, 16 авг 2017
    Последнее редактирование: 16 авг 2017
  5. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Туплю, надо ведь бд, а не пост :_
     
  6. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Всё равно не могу сообразить ничего (
     
  7. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    А где у тебя ID заявок? должно же быть в запросе не WHERE `user_id` = '$id' а WHERE `zayavka_id` = '$id ' грубо говоря. А уже заявки прикреплять а ID юзера.
     
  8. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    @teleoperator, Дело в том, что у меня каждая заявка прикрепляется к id пользователя. Разница в вашем варианте и моем лишь в наименовании столбцов. У меня они, для удобства, одинаковые.
     
  9. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    @Cyrius неверно. дело не в разнице названия. Что бы все корректно работало, не может быть двух заявок с одинаковым ID. А ты добавляешь и обновляешь заявки, привязанные к ID юзера, то есть, получается заявки у тебя получаются с одинаковыми айдишками - айдишками юзера. Поэтому и выполняется одна форма - та, которая первая в БД нашлась. А вторая, с этим же ID, выполняться уже не будет. Покажи структуру БД. Как минимум таблица заявок должна быть так - id_заявки | id_юзера | дальше остальные столбцы
    И вот по ID заявки уже обновлять и тд.
     
  10. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    @teleoperator, заявки пользователя находятся в разных таблицах, так как по разным играм

    upload_2017-8-17_16-37-50.png upload_2017-8-17_16-38-16.png
    --- Добавлено ---
    @teleoperator, вы наверное подумали, что обе заявки в одной таблице?
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Да ну, под каждую игру свою таблицу - зачем? Просто поле ввести для игры и всё. И да, заявки должны иметь свой id, не только к юзверю крепиться, иначе вы не можете точно предсказывать, какая обновится по запросу.
     
  12. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    @Cyrius А вот теперь то, о чем я и говорил - где у каждой заявки уникальный ID? Именно у КАЖДОЙ ЗАЯВКИ, а не у каждого юзверя, который делает заявку?
    --- Добавлено ---
    должно быть: уникальный ID заявки с AUTO INCREMENT. Потом ID юзера, который сделал заявку. Потом остальные поля. И обновлять это все надо по айди заявки.
     
  13. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    @teleoperator, [туплю], как мне обновить по ид заявки, если он будет уникальным? Все равно придется обновлять WHERE user_id = $id, разве нет?
     
  14. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    @teleoperator и какой это всё имеет смысл, если у меня разные таблицы?
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    сможешь добавить where id=$ид_последней_заявки
     
  16. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Можно с кем-то в скайпе пообщаться на эту тему? Не более 5 минут.
     
  17. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    при чем тут таблицы?
    Нет, обновлять ты будешь по ID заявки, а не ID юзера.
    0QzHqmFdj5.jpg
    То есть, каждая вот эта табличка должна быть привязана к своему id, понимаешь, к чему я веду?
    --- Добавлено ---
    Ну напиши мне, пока не сплю и не более 5 минут))
     
    denis01 нравится это.
  18. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
  19. teleoperator

    teleoperator Зэк
    [ БАН ]

    С нами с:
    3 июл 2017
    Сообщения:
    107
    Симпатии:
    29
    o_O уже лень в профиле посмотреть скайп и постучать?
     
  20. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    так я чекал, у вас закрыт профиль
     
    denis01 нравится это.
  21. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Проблему помог решить teleoperator. Решение: вместо двух форм, обернуть пхп код одной.