为什么我的php循环不起作用?

时间:2010-10-08 03:25:32

标签: php

好的我有一个PHP变量$问题,如下所示:

$question['3']['type'] = 'checkbox';
$question['3']['desc'] = 'checkbox question';
$question['3']['deft'] = '1';
$question['3']['opts'] = 'Check Test 1';
$question['3']['opts'] = 'Check Test 2';

我想要做的是这是一个调查问题,其中desc是问题,opts是多个答案。

我目前有这样的陈述:

 if ($type == "checkbox") {
              if (strtolower($deft) == 'y') { $box_value = "1"; $CHECKED = ' CHECKED'; }
                 else { $box_value = "0"; $CHECKED = ''; }
              print "<input type=\"checkbox\" name=\"$key\" value=\"$box_value\"$CHECKED>\n<br>";
         }

它有效,但它不允许我包含一个问题(只有答案)。

我想做这样的事情:

 if ($type == "checkbox") {
            print "<br>\n";
            $i = 1;
            foreach ($opts as $opt_key => $opt_value) {
                if ($deft == $i) {$CHECKED = "checked=\"checked\""; } 
                   else { $CHECKED = ''; }

                print "<input type=\"checkbox\" name=\"$key\" value=\"$opt_value\"$CHECKED> - $opt_value <br>\n";
                $i++;
            }
         }

我收到错误,因为我的代码很糟糕。任何人都可以帮我修复此代码吗?

感谢

以下是代码的其余部分

    <?php
$thisfile_URL = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
$thisdir_URL  = substr($thisfile_URL, 0, strrpos($thisfile_URL, '/')).'/';
$thisfile_ABS = $_SERVER['SCRIPT_FILENAME'];
$thisdir_ABS  =  substr($thisfile_ABS, 0, strrpos($thisfile_ABS, '/')).'/';
# -------------------------------------------------------------------
# ***** CONFIGURATION SETTINGS *****

# The Email address you want results mailed to.
$email_to_send_to = 'nursesurveyresults@aplusprofessionalresumes.com';

# The name of the survey. What do you want to call it?
$name_of_survey = 'Nurse Resume Toolkit Sales Page Exit Survey';

# Template files to load. The opening template, the close template.
# The template displayed before the survey form is printed and
# The template displayed after the email is sent. Or leave empty.
$open_template         = $thisdir_ABS."templates/sss.open.php";
$close_template        = $thisdir_ABS."templates/sss.close.php";
$survey_heading_page   = $thisdir_ABS."templates/sss.head.php";
$survey_complete_page  = $thisdir_ABS."templates/sss.done.php";

# The charset being used for all messages sent out. ISO-8859-1 by default,
# but you can use anything you want (Unicode, etc).
$charset = 'ISO-8859-1';

# -------------------------------------------------------------------

# ----------------------- Survey Form Information -------------------
# Type: checkbox
# Deft: Y or N for default check.
#
# Type: radio
# Deft: Default selected option
# Opts: Array of option values
#
# Type: select
# Deft: Default selected option
# Opts: Array of option values
#
# Type: text
# Deft: Default field text
# Opts: maxl, size - Maxlength and field size
#
# Type: textarea
# Deft: Default textarea field text
# Opts: rows, cols - row size, column size
#
# $hidden is an array of hidden fields.
# key being the name of the field, value as the value.
#
# $button_text is the submit button text
# -------------------------------------------------------------------

# ***** SAMPLE DATA *****

$question['1']['type'] = 'select';
$question['1']['desc'] = 'Whats Your Current Employment Status';
$question['1']['deft'] = '1';
$question['1']['opts'][] = 'Employed';
$question['1']['opts'][] = 'Unemployed';
$question['1']['opts'][] = 'Not Sure';

$question['2']['type'] = 'radio';
$question['2']['desc'] = 'Are You Currently Looking for a Job';
$question['2']['deft'] = '1';
$question['2']['opts'][] = 'Yes';
$question['2']['opts'][] = 'No';

/*
$question['1']['type'] = 'text';
$question['1']['desc'] = 'Test Text';
$question['1']['deft'] = 'Blah';
$question['1']['opts']['maxl'] = '30';
$question['1']['opts']['size'] = '10';

$question['2']['type'] = 'checkbox';
$question['2']['desc'] = 'Check Test 1';
$question['2']['deft'] = 'y';
*/

$question['3']['type'] = 'checkbox';
$question['3']['desc'] = 'checkbox question';
$question['3']['deft'] = '1';
$question['3']['opts'] = 'Check Test 1';
$question['3']['opts'] = 'Check Test 2';


$question['4']['type'] = 'radio';
$question['4']['desc'] = 'Radio Test';
$question['4']['deft'] = '2';
$question['4']['opts'][] = 'Option 1';
$question['4']['opts'][] = 'Option 2';
$question['4']['opts'][] = 'Option 3';

$question['5']['type'] = 'select';
$question['5']['desc'] = 'Select Test';
$question['5']['deft'] = '2';
$question['5']['opts'][] = 'Option 1';
$question['5']['opts'][] = 'Option 2';
$question['5']['opts'][] = 'Option 3';

$question['6']['type'] = 'textarea';
$question['6']['desc'] = 'Textarea Test';
$question['6']['deft'] = 'Default Junk';
$question['6']['opts']['rows'] = '10';
$question['6']['opts']['cols'] = '30';

$hidden['test1'] = "TEST!";
$hidden['test2'] = "TESTO!";
$button_text     = 'Send it!';

# -------------------------------------------------------------------
function my_remove_slashes($st) {
  if (get_magic_quotes_gpc()) { return stripslashes($st); }
  else { return $st; }
}

function security_filter($st) {
   $attribs = 'javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|'.
              'onmousemove|onmouseout|onkeypress|onkeydown|onkeyup';

   $st = my_remove_slashes($st);
   $st = stripslashes(preg_replace("/$attribs/i", 'forbidden', $st));
   $st = strip_tags($st);
   $st = htmlentities($st);
   return $st;
}
# -------------------------------------------------------------------

if (!(empty($open_template))) { include($open_template); }

if (isset($_POST['button'])) {
   foreach ($_POST as $key => $value) {
     if ($key != 'button') {
        if (preg_match('/^hidden_(.*)/i',$key)) {
           $value = security_filter($value);
           $key = trim(strstr($key,'_'),'_');

           if (isset($hidden[$key])) { 
               $hidden_data[$key] = $value; 
           }
        }
        else {
           if (isset($question[$key])) {
               $value = security_filter($value);
               if ($question[$key]['type'] == 'checkbox') { $value = "YES"; }
               $results[$key] = $value;
           }
        }
     }
   }

   # Now that the responses are processed, prepare the email.

   $msg  = "----------------- User Info -----------------\n\n";
   $msg .= "Sent from: ".$_SERVER['REMOTE_HOST']." [".$_SERVER['REMOTE_ADDR']."] \n";
   $msg .= "Coming from (referer): ".$_SERVER['HTTP_REFERER']."\n";
   $msg .= "Using (user agent): ".$_SERVER['HTTP_USER_AGENT']."\n\n";
   $msg .= "---------------------------------------------\n\n";

   if (isset($question)) {
      $lineflag = FALSE;
      foreach ($results as $key => $value) {
         if ($lineflag == FALSE) { 
              $msg .= "----------------- Questions -----------------\n\n";
              $lineflag = TRUE;
         }
         $msg .= "Question: ". $key ." - ". $question[$key]['desc'] ."\n";
         $msg .= "Response: ". $value . "\n\n";
      }
      $msg .= "---------------------------------------------\n";
   }

   $msg .= "\n";

   if (isset($hidden_data)) {
      $lineflag = FALSE;
      foreach ($hidden_data as $key => $value) {
         if ($lineflag == FALSE) { 
              $msg .= "---------------- Hidden vars ----------------\n\n";
              $lineflag = TRUE;
         }
         $msg .= $key ." - ". $value ."\n";
      }
      $msg .= "\n---------------------------------------------\n";
   }

   # Prep and send email.
   $headers  = "Return-Path: $email_to_send_to\r\n";
   $headers .= "From: $name_of_survey processor < $email_to_send_to >\r\n";
   $headers .= "Content-type: text/plain; charset=$charset\r\n";
   mail($email_to_send_to, $name_of_survey . " mailer", $msg, $headers);

   # Include template file.
   if (!(empty($survey_complete_page))) { include($survey_complete_page); }
}

else {

     if (!(empty($survey_heading_page))) { include($survey_heading_page); }

     print "<form action=\"$thisfile_URL\" method=\"POST\"> \n";

     foreach ($question as $key => $value) {
         $type = strtolower($question[$key]['type']);
         $desc = $question[$key]['desc'];
         $deft = $question[$key]['deft'];
         $opts = $question[$key]['opts'];

         print $desc."\n";

         /*
         if ($type == "checkbox") {
              if (strtolower($deft) == 'y') { $box_value = "1"; $CHECKED = ' CHECKED'; }
                 else { $box_value = "0"; $CHECKED = ''; }
              print "<input type=\"checkbox\" name=\"$key\" value=\"$box_value\"$CHECKED>\n<br>";
         }
         */

            if ($type == "checkbox") {
            print "<br>\n";
            $i = 1;
            foreach ($opts as $opt_key => $opt_value) {
                if ($deft == $i) {$CHECKED = "checked=\"checked\""; } 
                   else { $CHECKED = ''; }

                print "<input type=\"checkbox\" name=\"$key\" value=\"$opt_value\"$CHECKED> - $opt_value <br>\n";
                $i++;
            }
         }


         if ($type == "radio") {
            print "<br>\n";
            $i = 1;
            foreach ($opts as $opt_key => $opt_value) {
                if ($deft == $i) { $CHECKED = " checked=\"checked\""; } 
                   else { $CHECKED = ''; }

                print "<input type=\"RADIO\" name=\"$key\" value=\"$opt_value\"$CHECKED> - $opt_value <br>\n";
                $i++;
            }
         }

         if ($type == "select") {
             print "<br>\n";
             print "<select name=\"$key\">\n";

             $i = 1;
             foreach ($opts as $opt_key => $opt_value) {
                 if ($deft == $i) { $CHECKED = ' SELECTED'; } 
                     else { $CHECKED = ''; }
                     print "<option value=\"$opt_value\"$CHECKED>$opt_value</option>\n";
                 $i++;
             }
             print "</select><br>\n";
         }

         if ($type == "text") {
             print "<br>\n";
             $size = $opts['size'];
             $maxl = $opts['maxl'];
             print "<input maxlength=\"$maxl\" size=\"$size\" name=\"$key\" value=\"$deft\"><br>\n";
         }

         if ($type == "textarea") {
             print "<br>\n";
             $colz = $opts['cols'];
             $rowz = $opts['rows'];
             print "<textarea name=\"$key\" rows=\"$rowz\" cols=\"$colz\">$deft</textarea><br>\n";
         }

       # Spacing between survey questions -----------

       print "<br>\n";

       # --------------------------------------------

     }

     foreach ($hidden as $key => $value) {
        print "<input type=\"hidden\" name=\"hidden_$key\" value=\"$value\">\n";
     }

     print "<input type=\"submit\" name=\"button\" value=\"$button_text\">\n";
     print " &nbsp; -- &nbsp; \n";
     print "<INPUT TYPE=\"reset\" VALUE=\"Clear\">\n";
     print "</form>";
     print "<center><font size=\"2\">Powered by <A HREF=\"http://www.violetonresumes.com\">A Plus Professional Resumes</A></font></center><br>\n";
}

if (!(empty($close_template))) { include($close_template); }
?>

3 个答案:

答案 0 :(得分:0)

在打印行中$CHECKED之前是否需要空格?

我假设您正在某个地方突破$ {问题}以获取$key$deft$opts,因为您没有显示它们的定义位置。 $key应该是$opt_key吗?

答案 1 :(得分:0)

我明白了:

$question['3']['opts'] = 'Check Test 1';
$question['3']['opts'] = 'Check Test 2';

这些是变量:第二个赋值覆盖第一个。

答案 2 :(得分:0)

这有点难,因为我似乎无法找到你的问题,但你的代码看起来像这样:

            foreach ($opts as $opt_key => $opt_value) {
                if ($deft == $i) {$CHECKED = "checked=\"checked\""; } 
                   else { $CHECKED = ''; }

                print "<input type=\"checkbox\" name=\"$key\" value=\"$opt_value\"$CHECKED> - $opt_value <br>\n";
                $i++;
            }

肯定会在html中引起问题。

我建议改写一下(以及报告是否会影响你的错误)。

            foreach ($opts as $opt_key => $opt_value) {
                $CHECKED = $deft == $i ? ' checked="checked"' : '';
                print "<input type=\"checkbox\" name=\"$key\" value=\"$opt_value\"$CHECKED> - $opt_value <br>\n";
                ++$i;
            }

您的代码的问题是生成的标记看起来像name="key"checked="checked"。应该有一个像name="key" checked="checked"

这样的分隔空格