Задать вопрос
  • Как защитить запрос от изменения?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    О господи, опять этот вопрос.

    Запрос никак не защищать.
    Если пользователь может видеть запись 666, то пусть смотрит что хочет.
    Если пользователь не имеет права видеть запись 666, то получив любой запрос проверять его на наличие прав. А изменение запроса оставить в покое. Клиент по определению может отправить любой.

    К CSRF это абсолютно безобидное ковыряние в хтмлочке никакого отношения не имеет.
    Ответ написан
    Комментировать
  • Как защитить запрос от изменения?

    humiliation
    @humiliation
    Чем больше знаю - тем больше дурак
    если это только гет - то пусть гетит себе на здоровье. С лимитом на запросы, не более 20 в минуту, например. А на update-delete-create, конечно, проверка прав и CSRF.
    Ответ написан
    1 комментарий
  • Как правильно сделать модальное окно?

    i__dmitry
    @i__dmitry
    Weaving a web
    Дело в том, что у вас само окно вложено в слой с оверлеем.
    Вынесите оверлей в отдельный слой, и по клику на него реализуйте скрытие и окна и оверлея:
    $('.wall_moadl').click(function(){
        $(this).fadeOut();
        $('.modal_content').fadeOut();
    });


    Разметка:
    <div class="wall_moadl">... </div>
    <div class="modal_content">...</div>
    Ответ написан
    3 комментария
  • Вывод двух переменных с AJAX?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Чтобы JS и PHP смогли друг друга понять я использую JSON, на самом деле ожно использовать что душе угодно, но это самый простой для меня способ.
    follow.php

    <?php
    	//получаем $_POST['id'], работаем с ним, и на выходе 2 параметра
    	$param1 = 'Первый параметр';
    	$param2 = 'Второй параметр';
    	//создаем массив,
    	$response = [
    		'param1' => $param1,
    		'param2' => $param2
    	];
    	//выводим массив, предварительно закодировав в JSON
    	echo json_encode($response);


    в AJAX нужно тоже указать что PHP ответит нам JSON'ом
    AJAX-запрос

    $.ajax({
    	url: 'follow.php' ,
    	dataType: 'JSON', // тип данных, которые должны к нам попасть
    	type: 'POST',
    	data: {id: id},
    	success:(data) => {
    		//тут data уже преобразован в массив
    		// можно точно так же как и в php к нему обращаться
    		$('.param1').html(data['param1']);
    		$('.param2').html(data['param2']);
    	}
    });

    Ответ написан
    1 комментарий
  • Вывод двух переменных с AJAX?

    @DiaTMss
    Есть форма

    spoiler
    <form id="book_form" method="POST" action="/submit/book">
            <div id="message">
                <?php if (!empty($_SESSION['messages'])) echo $_SESSION['messages'];?>
            </div>
            <div>
                <label for="title">Title</label>
                <input type="text" name="title" id="title" class="u-full-width" autocomplete="off" value="<?php if (!empty($_SESSION['title'])) echo $_SESSION['title'];?>">
            </div>
            <div>
                <label for="author">Author</label>
                <input type="text" name="author" id="author" class="u-full-width" autocomplete="off" value="<?php if (!empty($_SESSION['author'])) echo $_SESSION['author'];?>">
            </div>
            <div>
                <label for="isbn">ISBN#</label>
                <input type="text" name="isbn" id="isbn" class="u-full-width" autocomplete="off" value="<?php if (!empty($_SESSION['isbn'])) echo $_SESSION['isbn'];?>">
            </div>
            <div>
                <input type="submit" name="submit" value="Submit" class="u-full-width">
            </div>
        </form>


    Получаем данные из формы

    spoiler
    document.getElementById('book_form').addEventListener('submit', function(event)
    	{
    		var title  = document.getElementById('title').value,
    			author = document.getElementById('author').value,
    			isbn   = document.getElementById('isbn').value;
    
    		title  = title.trim();
    		author = author.trim();
    		isbn   = isbn.trim();
    
    		var params = 'title=' + title + '&author=' + author + '&isbn=' + isbn + '&submit=Submit';
    
    		getAjax('POST', '/submit/book', params, getShowAlert);
    
    		event.preventDefault();
    	}, false);


    spoiler
    function getAjax(method, uri, params, action)
    {
    	xhr.open(method, uri, true);
    
    	if (xhr && method === 'GET')
    	{
    		xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    	}
    
    	else if (xhr && method === 'POST')
    	{
    		xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    	}
    
    	xhr.onreadystatechange = action;
    
    	xhr.send(params);
    }


    spoiler
    var getShowAlert = function()
    	{
    		if (xhr.readyState === 4)
    		{
    			if (xhr.status === 200)
    			{
    				var mes = JSON.parse(xhr.responseText);
    
    				if (mes.message.error)
    				{
    					showAlert(mes.message.error, 'error');
    				}
    
    				else if(mes.message.success)
    				{
    					getAjax('GET', '/', null, getContent);
    					showAlert(mes.message.success, 'success');
    					clearFields();
    				}
    			}
    
    			else console.log(xhr.status + ' (' + xhr.statusText + ')');
    		}
    	}


    Нужен ещё csrf token

    spoiler
    function isAjax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH'])) ? true : false;}
    
        $uri = $_SERVER['REQUEST_URI'];
        
       else if ($uri === '/submit/book')
        {
            if (isAjax())
            {
                if ($_SERVER['REQUEST_METHOD'] === 'POST')
                {
                    if (isset($_POST['submit']) && !empty($_POST['submit']))
                    {
                        $title  = htmlspecialchars(trim($_POST['title']));
                        $author = htmlspecialchars(trim($_POST['author']));
                        $isbn   = htmlspecialchars(trim($_POST['isbn']));
    
                        if (empty($title) || empty($author) || empty($isbn)) echo '{"message":{"error":"Please fill in all fields"}}';
    
                        else
                        {
                            if ($models->insertItem($title, $author, $isbn)) echo '{"message":{"success":"Book item create!"}}';
                            else echo '{"message":{"error":"Book item no create!"}}';
                        }
                    }
                }
            }
    
            else
            {
                if ($_SERVER['REQUEST_METHOD'] === 'POST')
                {
                    if (isset($_POST['submit']) && !empty($_POST['submit']))
                    {
                        $title  = htmlspecialchars(trim($_POST['title']));
                        $author = htmlspecialchars(trim($_POST['author']));
                        $isbn   = htmlspecialchars(trim($_POST['isbn']));
    
                        if (empty($title) || empty($author) || empty($isbn))
                        {
                            $_SESSION['title']  = $title;
                            $_SESSION['author'] = $author;
                            $_SESSION['isbn']   = $isbn;
                            $_SESSION['messages'] = '<div class="error">Please fill in all fields</div>';
    
                            header('Location: /');
                            exit;
                        }
    
                        else
                        {
                            if ($models->insertItem($title, $author, $isbn))
                            {
                                $_SESSION['messages'] = '<div class="success">Book Added!</div>';
    
                                header('Location: /');
                                exit;
                            }
                        }
                    }
                }
            }
        }
    Ответ написан
    1 комментарий
  • Как сделать таблицу с произвольным количеством полей?

    coderisimo
    @coderisimo
    table_1 : id, title
    table_2: id, field, value - id ссылается на первую таблицу

    select* from table_2 where id = 1 // получаем все поля связанные с первой записью в таблице 1

    select* from table_2 where id = 1 AND field='лишний вес' // получаем поле лишний вес для первой записи в таблице 1
    Ответ написан
    Комментировать
  • Обнуляем переменную при выходе из цикла?

    coderisimo
    @coderisimo Куратор тега JavaScript
    Ну-ну ))))
    вы объявили переменную : var ValidatorCountErros;
    затем стартуете асинхронную ф-цию : $.ajax(.....
    и не дожидаясь ее завершения пытаетесь работать с переменной ValidatorCountErros , которая еще НЕ ИЗМЕНИЛАСЬ . Так как $.ajax - еще не закончился!

    суть ошибки ясна? )
    Ответ написан
    Комментировать
  • Bootstrap, не могу закрыть и открыть модал через JS?

    coderisimo
    @coderisimo
    Попробуйте заменить :
    $('#alertModal').modal('show');
    на
    setTimeout(function(){
     $('#alertModal').modal('show'); 
        
    },1000);
    Ответ написан
    2 комментария
  • Не работает функция JS?

    coderisimo
    @coderisimo
    А так ?
    $(document).ready(function () {
      $('body').on('click',  '.openelemets', function(){
        $('.modulemodule').show();
      });
    });
    Ответ написан
    Комментировать
  • Не раскрытая тайна LEFT JOIN?

    jemunjho
    @jemunjho
    Используйте GROUP BY + GROUP_CONCAT
    Либо сделайте пост-обработку результатов SQL запроса, сгруппировав данные по ID пользователя

    SELECT GROUP_CONCAT(post_comment.comment_content SEPARATOR ' ') FROM users GROUP BY users.user_id;
    Ответ написан
    1 комментарий
  • Вывести данные с помощью this?

    0xD34F
    @0xD34F Куратор тега JavaScript
    success: (data) => {
      $(this).toggleClass('like-active like_click').find('.like_count').html(data);
    },
    Ответ написан
    Комментировать
  • Почему данный код не работает в firefox?

    romandkoz
    @romandkoz
    id - это уникальный идентификатор. Не допустимо делать несколько элементов с одинаковым id.
    Ответ написан
    1 комментарий
  • Как удалить пробелы внутри текста?

    NeiroNx
    @NeiroNx
    Программист
    Наверно так, если я правильно понял суть.
    "    string to be          trimmed     ".replace(/\s+/g,' ').trim()  ->  "string to be trimmed"
    Ответ написан
    1 комментарий
  • При нажатии кнопки выделяется текст?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;

    Ответ написан
    Комментировать
  • Как реализовать это на PHP?

    @sorokinfil
    Напишу по-старинке, не помню, что как в prepare'ах. tbl_1 и tbl_2 соответствуют порядку, в котором выводятся картинки, нужно заменить на имена своих таблиц.
    // Создаём переменную, в которую будем заносить инфу из БД
    $your_list = [];
    // Получаем id и username всех пользователей из tbl_1, id которых встречаются в tbl_2
    $query = $dbpdo->query
    ("
    	SELECT tbl_1.user_id, tbl_1.username
    	FROM tbl_1
    	INNER JOIN tbl_2 ON tbl_2.id = tbl_1.user_id
    ");
    // Извлекаем, формируем двумерный массив
    while ($user = mysqli_fetch_assoc ($query))
    	$your_list[] = $user;
    // Выводим через echo
    foreach ($your_list as $user)
    	echo $user['user_id'] . ': ' . $user['username'] . '<br />';
    Ответ написан
    1 комментарий