HTML до Javascript до PHP параметров, дающих странные значения - PullRequest
0 голосов
/ 10 апреля 2020

В настоящее время я использую Codeigniter для базового c CRUD. У меня есть следующий код

JS

function approve(args){
if(confirm('Do you want to approve this document?')){
                    window.location = "http://52.45.5.57/index.php/FinalizeCase/approve/" + args;
   }else{
      return false;
   }

HTML с некоторыми PHP до l oop всех PK для генерации чего-то подобного

<input type="submit" name="submit" value="Approve" onclick="approve(0000000004)"/>
<input type="submit" name="submit" value="Approve" onclick="approve(0000000008)"/>

Но странно, что иногда, когда я нажимаю на ссылки, я получаю действительно странные значения, т. Е. Для 15 я получил 13. Я подумал, может быть, я смешал циклы или что-то еще и попытался изменить ячейку на 215 ~, и когда я ее протестировал, я получил 140, хотя моя максимальная ячейка и БД около 15, исключая ту, которую я поднял для тестирования.

Перед нажатием проверил параметры ссылки, и он получил соответствующее значение в ячейке.

Попытка с использованием следующего, но осталась прежней, 251 становится 141 и 12 становится 8.

  1. используйте кнопку вместо тега ввода
  2. используйте уникальные имена и значения в html tag

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Вам действительно нужны ведущие нули? Вы испытываете один из недостатков языков со слабой типизацией, таких как php или JavaScript: интерпретатор решает, какой тип является каждой переменной, а не вы. Это экономит работу большую часть времени, потому что «это просто работает», но иногда тип данных, выбранный интерпретатором, не тот, который вы ожидаете, и вы попадаете сюда.

Вы можете думать, что ваши аргументы являются либо строками, либо целые числа с большим количеством начальных нулей, но интерпретаторы на самом деле видят восьмеричные числа (которые при преобразовании в десятичное значение изменяются)

В зависимости от того, какой фактический тип вы ожидаете, у вас есть много альтернатив:

Если вы ожидаете, что аргумент будет обрабатываться как строка, вам нужно сохранить ведущие нули, но не допускать любой восьмеричной интерпретации, подобной этой

function approve(args)
{
var a = String(args); // force the type to string
if(confirm('Do you want to approve this document?'))
{
   window.location = "http://52.45.5.57/index.php/FinalizeCase/approve/" + a;

 }

else 
{
  return false;
}

Просто чтобы быть в безопасности, вы также можете захотеть значение в вашем контроллере и приведите его как строку тоже. Предполагая, что args также называется $ args в вашей PHP части, вы можете сделать что-то вроде

public function approve( (string) $args = null)
{
    // Do whatever you need to do
}

Это также будет мой рекомендуемый порядок действий, если ваши аргументы представляют собой целое число с нулем в базе данных .

Если вам нужно рассмотреть аргументы как строки, вы должны обрезать лидирующие нули и привести их к типу int, используя parseInt(); в JavaScript и / или $args = (int) $args; в php

0 голосов
/ 10 апреля 2020

Как сказал @Funk Forty Niner.

Решение простое, просто удалите начальные нули.

$str = ltrim($str, '0');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...