Как передать данные из формы без поля формы?(PHP) - PullRequest
7 голосов
/ 23 апреля 2011

У меня есть форма для редактирования имени пользователя и электронной почты. Поэтому, когда он обновляет имя и адрес электронной почты, ему нужно имя пользователя, чтобы определить, какую строку он должен обновить.

Так что я хотел знать, есть ли какой-либо элемент, который передается с формой, но не показывает значение или не редактируется во входном теге.

Так я получаю имя пользователя из одного скрипта. Сценарий редактирования пользователя получает имя и адрес электронной почты из базы данных с указанным именем пользователя. Затем он передает это новое имя и электронное письмо с именем пользователя другому сценарию, который его обновляет.

Ответы [ 8 ]

6 голосов
/ 23 апреля 2011

Я думаю, что вы ищете

 <input type='hidden' name='username' value='theusername' />

hidden - можно увидеть только в исходном HTML-документе.
name - где он будет находиться в переменной $ _REQUEST / $ _ POST / $ _ GET ($ _POST или $ _GET в зависимости от того, как вы отправляете свою форму) при отправке
value - имя пользователя, к которому вы хотите привязать эту форму

PRO TIP : у вас есть способ узнать, кто пытается обновить пользователей, чтобы у вас не было посторонних людей, обновляющих вашу информацию о пользователях. Для кого-то было бы очень легко изменить имя пользователя в форме и попытаться обновить кого-то еще.

4 голосов
/ 23 апреля 2011

использовать:

 <input type="hidden" />

HIDDEN - это значение атрибута TYPE для элемента INPUT для FORM с.Это указывает на поле формы, которое не отображается в документе и с которым пользователь не взаимодействует.Он может использоваться для передачи информации о состоянии клиента или сервера.Скрытые поля часто хранят значение по умолчанию (например, php), или их значение изменяется с помощью JavaScript.

подробнее здесь

4 голосов
/ 23 апреля 2011

Вы можете использовать скрытый тип ввода

<input type="hidden" name = "username" value="<?php echo $username ?>">
3 голосов
/ 23 апреля 2011

Арун, вы можете использовать GET для передачи переменных с одной страницы на другую. Просто создайте URL-адреса как edituser.php?username=arun и так далее. Это единственный возможный способ передачи переменных или данных, кроме файлов cookie, на другие страницы без использования тегов формы.
Второй метод заключается в использовании JavaScript для создания скрытого поля формы и обновления его именем пользователя.
Третий - просто добавить скрытые теги ввода. Но для этого и последнего потребуются теги формы.

Слово предостережения, фильтруйте пользовательские вводы, будь то JS, GET или скрытые поля.

3 голосов
/ 23 апреля 2011

Как и все остальные, вам нужен скрытый ввод. Это БУДЕТ редактируемым, никогда не доверяйте этому, поскольку вы никогда не доверяете любым другим данным, поступающим извне.

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

Что-то вроде

<input type="hidden" name="userid" value="<?=$userid?>" />
3 голосов
/ 23 апреля 2011

Вы можете использовать скрытое поле формы:

<input type="hidden" name="originalUsername" value="something" />

Это не будет отображаться на форме в браузере и, скорее всего, будет игнорироваться и оставаться незамеченным пользователем.

Однако , имейте в виду, что это редактируемое. не следует полагаться на это в качестве меры безопасности.Когда форма отправлена, убедитесь, что пользователь, отправляющий форму (используя любые имеющиеся у вас механизмы аутентификации и авторизации), имеет право внести это изменение, прежде чем сохранить его в базе данных. Любое отправляемое поле формы можно редактировать.

3 голосов
/ 23 апреля 2011

Используйте скрытый тег ввода:

<input type='hidden' name='username' value='theusername' />
1 голос
/ 24 апреля 2011

Используйте это, если вы хотите использовать его безопасно:

<input type='hidden' name='username' value='<?php echo encode("Please Encode Me!","This is a key"); ?>' />

, что приведет к:

<input type='hidden' name='username' value='p3e4e4241674d2r4m4i5o464a4f2p3k5c2' />

и в скрипте модификации вы должны будете использовать:

<?php $username = decode("p3e4e4241674d2r4m4i5o464a4f2p3k5c2","This is a key"); ?>

Ниже представлены функции PHP для ENCODE / DECODE:

<?php

function encode($string,$key) {
    $key = sha1($key);
    $strLen = strlen($string);
    $keyLen = strlen($key);
    for ($i = 0; $i < $strLen; $i++) {
        $ordStr = ord(substr($string,$i,1));
        if ($j == $keyLen) { $j = 0; }
        $ordKey = ord(substr($key,$j,1));
        $j++;
        $hash .= strrev(base_convert(dechex($ordStr + $ordKey),16,36));
    }
    return $hash;
}

function decode($string,$key) {
    $key = sha1($key);
    $strLen = strlen($string);
    $keyLen = strlen($key);
    for ($i = 0; $i < $strLen; $i+=2) {
        $ordStr = hexdec(base_convert(strrev(substr($string,$i,2)),36,16));
        if ($j == $keyLen) { $j = 0; }
        $ordKey = ord(substr($key,$j,1));
        $j++;
        $hash .= chr($ordStr - $ordKey);
    }
    return $hash;
}

?>
...