За последние 24 часа нас посетили 57406 программистов и 7239 роботов. Сейчас ищут 2872 программиста ...

Подмена одного значения другим

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

  1. LanikSky

    LanikSky Новичок

    С нами с:
    10 апр 2017
    Сообщения:
    4
    Симпатии:
    0
    Добрый день!
    Подскажите, пожалуйста, а то я совсем запуталась [​IMG]
    Мне надо реализовать вот какую штуку:
    Когда пользователь вводит код в форму, ему на счет зачисляется n-сумма и этот код срабатывает только 1 раз.
    Так вот в админке я создала форму, которая в базе в таблицу sert добавляет значения
    sert_id
    2

    sert_name
    jsyehfe22

    sert_summa
    200

    Теперь мне надо чтобы пользователь при вводе jsyehfe22 получал на счет, а именно в таблицу user в колонку user_balance к его уже существующему балансу +200 и еще сделать так чтобы после активации этот код больше ни у кого не срабатывал.

    Подскажите, пожалуйста, что дописать сюда:
    HTML:
    1. <div class="col-md-4 col-md-offset-4">
    2. <label>Сертификат</label>
    3. <input type="text" class="form-control" name="sum"><br/>
    4. <input type="submit" class="btn btn-success" value="Активировать"/>
    5. </div>
    (это форма ввода в личном кабинете в файле tpl)

    И какой php код надо прописать, чтобы это всё заработало?
     
    #1 LanikSky, 10 апр 2017
    Последнее редактирование модератором: 10 апр 2017
  2. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    И в чем проблема?

    Передавайте форму в обработчик и там играйтесь с данными как Вам надо.
    Кода обработчика я не вижу. Вижу только форму с 1 полем и кнопкой
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    надо залезть в бд, забрать строку с этим кодом, проверить флаг или дату, когда она уже использовалась. Если не использовалась - использовать, иначе - дать сообщение об ошибке и ничего не делать.
     
  4. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Это и ежу понятно! Мне бы хотелось увидеть что у него в обработчике написано.
     
  5. LanikSky

    LanikSky Новичок

    С нами с:
    10 апр 2017
    Сообщения:
    4
    Симпатии:
    0
    Только не у него, а у нее=))
    В общем, я разобралась, что писать в разработчик, вот это у меня:
    PHP:
    1. if (isset($_POST['sert'])) {
    2.             $sert = mysql_real_escape_string($_POST['sert']);
    3.             $q = mysql_query("SELECT * FROM sert WHERE sert_name = '$sert' AND sert_task = '".$task['task_id']."'");
    4.             if (mysql_num_rows($q)) {
    5.                 mysql_query("UPDATE users SET user_balance = user_balance + 800 WHERE user_id = '" . $userdata['user_id'] . "'");
    6.             } else {
    7.                 $tpl->assign("error", "Ваш сертификат не найден");
    8.             }
    9.             mysql_query("INSERT INTO `sert` SET sert_user = '".$userdata['user_id']."',
    10.            sert_datestamp = '".time()."'
    11.            ");
    12.         }
    Только пока они нефига не одноразовые получились, можно сколько угодно раз вводить один и тот же код.
    Предполагаю косяк в этой части:
    mysql_query("INSERT INTO `sert` SET sert_user = '".$userdata['user_id']."',
    sert_datestamp = '".time()."'
    Потому что у меня вместо того, чтобы напротив введенного сертификата появлялось значения юзера и врменеи они создаются ниже.
    --- Добавлено ---
    Я пока не настолько профи, к сожалению, я не знаю что писать, что бы реализовать вот эту одноразовость=(
     
    #5 LanikSky, 11 апр 2017
    Последнее редактирование модератором: 11 апр 2017
  6. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    PHP:
    1. //добавь в таблицу sert поле status
    2.  
    3. $key = $_POST['sum'];
    4. $id = //id юзера
    5.  
    6. if (!empty($key)): //если переменная с кодом не пустая
    7.  
    8.     $query = "SELECT * FROM `sert` WHERE `sert_name` = '$key'"; //запрос к таблице sert
    9.     $result = mysqli_query($link, $query); //отправляем запрос
    10.     $num_rows = mysqli_num_rows($result); //получаем количество строк в ответе
    11.  
    12.         if ($num_rows > 0): //если строк больше 0, значит такой код есть в базе
    13.      
    14.             $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //формируем ассоциативный массив, ключами которого, будут названия полей
    15.          
    16.             if ($row['status'] == 'active'): //если поле status содержит флаг active, можем начислить юзеру сумму
    17.          
    18.                 $sum_update = $row['sert_summa']; //сумма пополнения
    19.                 $query_update = "UPDATE `user` SET `user_balance` = (`user_balance` + '$sum_update') WHERE `id` = '$id'"; //запрос на обновление баланса
    20.                 $query_sert_update = "UPDATE `sert` SET `status` = 'notactive' WHERE `sert_name` = '$key'"; //запрос на обновление статуса кода
    21.                 mysqli_query($link, $query_update);//отправляем запрос
    22.                 mysqli_query($link, $query_sert_update);//отправляем запрос
    23.              
    24.                 echo 'Ваш счет пополнен на '.$sum_update.' рублей!'; //выводим сообщение об удачном зачислении средств
    25.              
    26.             else: //если поле status не содержит флаг active, значит код уже был активирован
    27.                 echo 'Этот код уже активирован!';
    28.             endif;
    29.         else: //если строк 0, значит такого кода в базе нет
    30.             echo 'Вы введи недействительный код!';
    31.         endif;
    32. else: //если переменная с кодом пустая
    33.     echo 'Вы не ввели код!';
    34. endif;
     
  7. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Ну простите я не знал у него или у нее!
    Значит надо прикрутить проверку на: "А вводился ли уже этот код"?
    Я бы наверное хранил коды в отдельной базе с булевым значением. А при вводе проводил бы проверку.

    Вобщем без проверки никак!
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.601
    Симпатии:
    423
    Адрес:
    РД, г. Махачкала.
    эм...
     
    Sergey_Tsarev нравится это.
  9. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    А нас деревенщин просветите пожалуйста!!!
     
  10. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.294
    Симпатии:
    216
    Адрес:
    Default city
    [​IMG]
     
    acho и denis01 нравится это.