これは少し時間がかかることをお詫びしますが、私はコードを示して何も残したくありませんでした。URL識別子が存在する場合のPHPの未定義変数
ゴール:ユーザは、フォームにデータベースにフォームを送信する登録フォームを送信し、情報とユニークな文字列をデータベースに追加します。ユーザーは、それらが取られているリンクをクリックすると
xyz.com/activate.php?uid=292ca78b727593baad9a
:ユーザーが電子メールを送信するとそのような終わりにURL識別子としてその固有の文字列を持っているPHPのページへのリンクが含まれているユーザーに送信されますそのページで別のフォームに記入し、送信ボタンをクリックするとアカウントが有効になります。
問題:
Undefined index: variable in process.php
しかしURLのように示して、ユーザーがURL識別子を削除する場合:
ユーザーがリンクに行く、彼らはそうのように私の検証ページからエラーを受け取り提供しましたxyz.com/activate.php
ユーザーにエラーが表示されず、検証ページ(process.php)が正常に動作します。私は$_GET['uid']
で識別子を使用し、コードを実行する前にそれが存在するかどうかを確認しようとしましたが、結果は同じでした。私はこの問題をGoogleにしようとすると答えが見つからないので、これが以前に尋ねられた場合はお詫びします。
質問:なぜこれはURL識別子なしでは機能するのですか?私はURL識別子がを実行しているページが最初に読み込まれるときに基本的に$_REQUEST
を実行することを認識しています。それを防ぐ方法はありますか?
あなたが私が作業しているコードを知っているので、私はそれを下に掲載しました。
activate.php:
<?php
// validate the form.
require_once('process.php');
$validation_rules = array(
'company_name' => array(
'required' => true,
'min-length' => 2
)
);
$db_error = '';
$validate = new validator();
$validate->validate($validation_rules);
if ($validate->validate_result()) {
// the validation passed!
}
?>
<div class="bg v-100 cm-hero-activate">
<div class="v-100">
<div class="v-set v-mid">
<form class="v-mid v-bg-white <?php if(!$validate->validate_result() && $_POST || !empty($error)) { echo "shake"; } ?>" name="activation" action="" method="post">
<fieldset>
<div class="form-content">
<div id="content">
<div class="form-inner in" data-id="1" data-name="activate">
<h1>ACTIVATE YOUR ACCOUNT</h1>
<div class="form-section">
<h2>Personal Info</h2>
<?php if (!empty($db_error)) {
echo $db_error;
} ?>
<div class="field-group">
<input type="text" id="company_name" class="field required" name="company_name" value="<?php $validate->form_value('company_name'); ?>">
<label for="company_name" class="placeholder">Company Name</label>
<?php $validate->error(array('field' => 'company_name', 'display_error' => 'single')); ?>
</div>
</div>
<div class="field-bottom">
<button name="submit" data-name="activate" class="bttn btn-dark btn-hover-gloss">ACTIVATE MY ACCOUNT</button>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</div>
process.php:
<?php
class validator {
private $validation_rules;
private $errors = array();
private $validate_result = array();
public function validate($rules) {
$this->validation_rules = $rules;
if($this->validation_rules && $_REQUEST) {
foreach($this->validation_rules as $field => $rules) {
$result = $this->process_validation($field, $rules);
if($result == false) {
$this->validate_result[] = 0;
} elseif($result == true) {
$this->validate_result[] = 1;
}
}
}
}
public function form_value($field_name = '') {
if($this->validation_rules) {
if($_REQUEST && $_REQUEST[$field_name]) {
if(!$this->validate_result()) {
echo $_REQUEST[$field_name];
}
}
}
}
public function validate_result() {
if($this->validation_rules) {
if($_REQUEST) {
$final_result = true;
$length = count($this->validate_result);
for($i=0;$i < $length; $i++) {
if($this->validate_result[$i] == 0) {
$final_result = false;
}
}
return $final_result;
}
}
}
private function process_validation($field, $rules) {
$result = true;
$error = array();
foreach($rules as $rule => $value) {
if($rule == 'required' && $value == true) {
if(!$this->required($field, $value)) {
$error[] = "$field - required";
$result = false;
}
} elseif($rule == 'min-length') {
if(!$this->minlength($field, $value)) {
$error[] = "$field - minimun length is $value";
$result = false;
}
}
}
$this->errors[] = array($field => $error);
return $result;
}
public function error($data = '') {
if($this->validation_rules) {
if($_REQUEST) {
foreach($this->errors as $err) {
if(isset($data['field'])) {
foreach($err as $field => $field_error) {
if($data['field'] == $field) {
foreach($field_error as $error_data) {
if(isset($data['display_error']) == 'single') {
echo '<p class="error">' . $error_data . '</p>';
goto next;
} else {
echo '<p class="error">' . $error_data . '</p>';
}
}
next:
}
}
} else {
foreach($err as $field => $field_error) {
foreach($field_error as $error_data) {
if(isset($data['display_error']) == 'single') {
echo '<p class="error">' . $error_data . '</p>';
goto next1;
} else {
echo '<p class="error">' . $error_data . '</p>';
}
}
next1:
}
}
}
}
}
}
private function required($field, $value) {
if(empty($_REQUEST[$field])) {
return false;
} else {
return true;
}
}
private function minlength($field, $value) {
if(strlen($_REQUEST[$field]) < $value) {
return false;
} else {
return true;
}
}
?>
EDIT:if(strlen($_REQUEST[$field]) < $value)
min-length
機能に
if statement
で起こっているようです
EDIT 2:これはまた、 se。 <br /><font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'><tr><th align='left' bgcolor='#f57900' colspan=
をし、その下に、私はこのエラーが表示されます:テキストボックスは、これで満たされているNotice: Undefined index: company_name in C:\...\process.php on line 25 Call Stack #TimeMemoryFunctionLocation 10.0005369632{main}()...\activate.php:0 20.0029403928validator->form_value()...\activate.php:80 ">
いいえ私はそうではありません。このコードは私のサーバー上でwampでホストされています。 (関連性があるかどうかは分かりませんが、今のところCodeIgniterが何であったのか分かりませんでした) – Matthew
申し訳ありませんが、愚かなコメントでした。質問を正しく読まなかった。今すぐ削除する –
「未確認のインデックス」がどの行にあるのか、コード – Jason