Сохранение значений полей в случае возникновения ошибки - PullRequest
0 голосов
/ 29 декабря 2011

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

if ($action == "submit" && ($member_submit == 0 || ($member_submit==1
   && $_SESSION['loggedin']==1))){

                   $frompage = $_SERVER['HTTP_REFERER'];

                   if($_POST['thumburl']=="http://")
                   $_POST['thumburl']="";

                   // Check to see if the user is trying to bypass your requirements, and if so, redirect them!
                   if ($_SESSION['nosubmit']==1){
                     $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> There was something wrong with your
   submission. Please try again later</div>";
                       header('Location: '.$frompage.'');
                       exit;        

                   }
                   // End Cheat Check

                   // Check to see if IP address is allowed to submit. If not, redirect!
                   if (ban_check("submit") == "banned"){
                     $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Cannot Add Submission At This Time</div>";
                       header('Location: '.$frompage.'');
                       exit;        

                   }
                   // End Ban Check

                   $submissiontime = time();
                   if (($submissiontime - $delay) <= $_SESSION['submission']){
                    $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Flood Control Initiated</div>";
                       header('Location: '.$frompage.'');
                       exit; 
                   }
       $ipaddress = $_SERVER['REMOTE_ADDR']; 
               $contenttitle = clean_string($_POST['contenttitle']);
               $contentdescription = clean_string($_POST['contentdescription']);
               $contenturl = clean_string($_POST['contenturl']);
               $contenturl2 = strtolower($contenturl);
               $category = clean_string($_POST['category']);

                 // Make sure they selected a category
                if ($category == 0){
                $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Please select a category</div>";
                   header('Location: '.$frompage.'');
                   exit; 
               }

       // Check to see if have backlink and nofollow atribute
       $parse = parse_url($contenturl);
       $base_url = $parse["host"]; // domain.com

       $linkback1 = reciprocal_linkback($contenturl, "http://www.dumpvid.com", 1);

       if ("$linkback1"=="0") {


       $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Backlink was not found, or nofollow detected.</div> ";
       header('Location: '.$frompage.'');
        exit; 

       }

       // Check to see if have backlink in the main also
       $parse = parse_url($contenturl);
       $base_url = $parse["host"]; // domain.com

       $linkback2 = reciprocal_linkback($base_url, "http://www.dumpvid.com", 1);

       if ("$linkback2"=="0") {


       $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Backlink found only on content url.</div> ";
       header('Location: '.$frompage.'');
        exit; 

       }

               // Check if TITLE and URL are filled in
               if (empty($contenttitle) || $contenttitle == "Title?"){
                $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Please Fill In Title</div>";
                   header('Location: '.$frompage.'');
                   exit; 
               }

               elseif (empty($contenturl) || $contenttitle == "http://"){
                $_SESSION['submitstatus'] = "<div class=error><b>Error:</b>Invalid URL</div>";
                   header('Location: '.$frompage.'');
                   exit; 
               }
               elseif (empty($contentdescription) || $contentdescription == "Nice description gets more traffic..."){
                $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Invalid or Missing Descriptio</div>";
                   header('Location: '.$frompage.'');
                   exit; 
               }


               // Check if VALID URL
               if (is_url("$contenturl")) {     
               } else { 
                   $_SESSION['submitstatus'] = "<div class=error><b>Error:</b> Doesn't seem to be a valid URL</div>";
                   header('Location: '.$frompage.'');
                   exit; 
               }

Структура файла проверки в основном такая: если вам нужно, чтобы я опубликовал весь файл проверки и форму, пожалуйста, сообщите мне.

Я просто хочу сохранить значения полей, которые пользователь заполнил ранее, в случае неудачи проверки.

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Вы должны снова отобразить форму при ошибке, но без использования header('Location:...'), потому что вы потеряете параметры, отправленные с помощью формы после перенаправления. Вы можете использовать функцию для получения параметров в html:

function getParam($name, $defaultVal = null){
    return isset($_REQUEST[$name]) ? $_REQUEST[$name] : $defaultVal;
}


<input type="text" value="<?php echo getParam('firstname', ''); ?>" name="firstname">

EDIT

Если у вас есть 2 файла: form.php - ваше определение формы save_form.php - проверка формы,

Тогда в save_form.php вы можете использовать что-то вроде этого:

//...
if($error){
    include 'form.php';
    die();
}

и в form.php

<input type="text" value="<?php echo getParam('firstname', ''); ?>" name="firstname">
0 голосов
/ 29 декабря 2011
<?php
session_start();

//save post values into session
if(strtolower($_SERVER['REQUEST_METHOD']) == 'post'){
    $_SESSION['_postHistory'] = $_POST;
}


//this will restore your previously posted values into $_POST global
if(isset($_SESSION['_postHistory']) && is_array($_SESSION['_postHistory'])){
   foreach($_SESSION['_postHistory'] as $key => $val){
      if(!isset($_POST[$key])) $_POST[$key] = $val;
   }
}

function getPostValue($key, $default = null){
   return (isset($_POST[$key])) ? $_POST[$key] : $default;
}
?>

<input type="text" value="<?php echo getPostValue('fieldname')?>" name="fieldname"/>

Я не рекомендую использовать $ _REQUEST для публикации, так как у вас может быть такой же параметр, определенный в $ _GET, который может конфликтовать друг с другом.

0 голосов
/ 29 декабря 2011

Как я понимаю, я думаю, что вы должны сделать это в HTML, как:

<input type="text" value="<?php echo (isset($_REQUEST['firstname'])) ? $_REQUEST['firstname'] : ''; ?>" name="firstname">

это вернет вам то, что вы хотите .. Примените что-то подобное ко всем полям ..

РЕДАКТИРОВАТЬ: выше будет работать, когда вы нажмете на кнопку отправки, затем вы получите значение 'firstname', иначе оно будет отображаться пустым. И, пожалуйста, никогда не забывайте проверять на выше Тег <form> означает вверху страницы.

...