Как проигнорировать знак - в input number

65
10 февраля 2022, 06:50

Есть поле input type="number" и кнопка при нажатию на которую данные с инпута, которые обрабатывает php, уходят в бд. нужно сделать следующее: чтобы при вводе с клавиатуры знака - он не учитывался при обработке скриптом после нажатия на кнопку. т.е. если пользователь ввел знак - первым символом, а потом цифры, то этот - должен игнорироваться. иначе баланс пользователя не уменьшается, а наоборот увеличивается

Вопрос: как это реализовать?

Пробовал некоторые варианты решений с гугла, но результата 0 или я что то не так делаю. HTML:

<input type="number" name="creditoff">
    <button id="repaycredit" name="repaycredit" class="btn">погасить кредит</button> 

PHP:

if (isset($_POST['repaycredit']) && $us_bal >= $creditoff) {
    $stmt = $pdo->prepare("UPDATE users SET 
            balance = balance - :balcredit,
            credit = credit - :credit,
            status_credit = '1'
            WHERE id = :id");
    $stmt->bindParam(':id', $us_id, PDO::PARAM_INT);
    $stmt->bindParam(':balcredit', $creditoff, PDO::PARAM_INT);
    $stmt->bindParam(':credit', $creditoff, PDO::PARAM_INT);
    $stmt->execute();
}
Answer 1

Если на js, то можно так:

FU.onkeydown = function (e) { 
    var s = e.keyCode; 
    return (s > 47 && s < 58) || (s > 95 && s < 105) || (s > 32 && s < 41) || s == 8 || s == 46; 
}
<input type='text' id="FU"/>

Если хотите на jquery, то так :

$('input').on('keydown', function(e){ 
    if(e.key.length == 1 && e.key.match(/[^0-9'".]/)){ 
        return false; 
    }; 
}) 
$("#FU").bind("contextmenu", function(e) { 
    e.preventDefault(); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<input id="FU"/>

Оба варианта с защитой от вставки данных из буфера.

Answer 2

ваш js запрет могут легко переделать и написать любой тип. вам нужно ставить проверку на php . и самый простой вариант это типизация переменной. например: $num = (int)$_POST['mynumber'];

Answer 3

Лучше использовать событие oninput.

let input = document.body.children[0]; 
input.oninput = function() { 
  this.value = this.value.replace(/[^0-9]/g, ''); 
};
<input type="text">

Answer 4

так все будет работать

if (isset($_POST['repaycredit']) && $us_bal >= $creditoff) { 
			if ($creditoff < 0) { 
				echo "..."; 
			} 
			else { 
				$stmt = $pdo->prepare("UPDATE users SET  
					balance = balance - :balcredit, 
					credit = credit - :credit, 
					status_credit = '1' 
					WHERE id = :id"); 
				$stmt->bindParam(':id', $us_id, PDO::PARAM_INT); 
				$stmt->bindParam(':balcredit', $creditoff, PDO::PARAM_INT); 
				$stmt->bindParam(':credit', $creditoff, PDO::PARAM_INT); 
				$stmt->execute(); 
			} 
		}

READ ALSO
Как добавить класс к элементам (JS)

Как добавить класс к элементам (JS)

У меня дана таблица и ссылка, при нажатии на ссылку к таблице добавляется строкаКак к добавляющимся элементам дать класс?

75
Обьекты, созданные через &quot;=&quot; и конструктор - в чем отличия?

Обьекты, созданные через "=" и конструктор - в чем отличия?

) Почему только у обьекта, созданного через конструктор есть контекст? Какие концептуальные разницы между объектом, созданным через =, и обьектом,...

85
Функция unity GetContacts(hit) всегда возвращает 0

Функция unity GetContacts(hit) всегда возвращает 0

Обидно что все работало, но я игрался с камерой и физикой и теперь не работаетВот картинки моих нынешних настроек

73