【问题标题】:How to display echo if user has not selected from a drop down menu如果用户没有从下拉菜单中选择,如何显示回声
【发布时间】:2012-10-27 21:01:59
【问题描述】:

在下面的代码中,我有 2 个下拉菜单。一个是“课程”下拉菜单,另一个是“模块”下拉菜单:

下面是代码:

   <?php

    // connect to the database
    include('connect.php');

    /* check connection */
    if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
    }

    $sql = "SELECT CourseId, CourseName FROM Course ORDER BY CourseId"; 

    $sqlstmt=$mysqli->prepare($sql);

    $sqlstmt->execute(); 

    $sqlstmt->bind_result($dbCourseId, $dbCourseName);

    $courses = array(); // easier if you don't use generic names for data 

    $courseHTML = "";  
    $courseHTML .= '<select name="courses" id="coursesDrop" onchange="getModules();">'.PHP_EOL; 
    $courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

    while($sqlstmt->fetch()) 
    { 
    $course = $dbCourseId;
    $coursename = $dbCourseName; 
    $courseHTML .= "<option value='".$course."'>" . $course . " - " . $coursename . "</option>".PHP_EOL;  
    } 

    $courseHTML .= '</select>'; 

    $moduleHTML = "";  
    $moduleHTML .= '<select name="modules" id="modulesDrop">'.PHP_EOL; 
    $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
    $moduleHTML .= '</select>'; 


    include('noscript.php');

    ?>

    <script type="text/javascript">

    function getModules() { 
    var course = jQuery("#coursesDrop").val(); 
    jQuery('#modulesDrop').empty(); 
    jQuery('#modulesDrop').html('<option value="">Please Select</option>'); 
    jQuery.ajax({ 
    type: "post", 
    url:  "module.php", 
    data: { course:course }, 
    success: function(response){ 
    jQuery('#modulesDrop').append(response); 
    } 
    }); 


    }

    </script> 

<h1>EDIT AN ASSESSMENT'S DATE/START TIME</h1>    

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<table>
<tr>
<th>Course: <?php echo $courseHTML; ?></th>
<th>Module: <?php echo $moduleHTML; ?></th>
</tr>
</table>
<p><input id="moduleSubmit" type="submit" value="Submit" name="moduleSubmit" /></p>
</form>

<?php

if (isset($_POST['moduleSubmit'])) {

$sessionquery = "
SELECT SessionId, SessionDate, SessionTime, ModuleId, TeacherId
FROM Session
WHERE
(ModuleId = ? AND TeacherId = ?)
ORDER BY SessionDate, SessionTime 
";

$sessionqrystmt=$mysqli->prepare($sessionquery);
// You only need to call bind_param once
$sessionqrystmt->bind_param("si",$moduleId,$userid);
// get result and assign variables (prefix with db)

$sessionqrystmt->execute(); 

$sessionqrystmt->bind_result($dbSessionId,$dbSessionDate,$dbSessionTime, $dbModuleId, $dbTeacherId);

$sessionqrystmt->store_result();

$sessionnum = $sessionqrystmt->num_rows();   

if($sessionnum ==0){
echo "<p>Sorry, You have No Sessions under this Module</p>";

module.php 显示“模块”下拉菜单:

 <?php

         // connect to the database
     include('connect.php');

     /* check connection */
     if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
    }


    $course = isset($_POST['course']) ? $_POST['course'] : ''; 

    $sql = "
    SELECT cm.CourseId, cm.ModuleId, 
    c.CourseName,
    m.ModuleName
    FROM Course c
    INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId
    JOIN Module m ON cm.ModuleId = m.ModuleId
    WHERE
    (c.CourseId = ?)
    ORDER BY c.CourseId, m.ModuleId
    "; 

     $sqlstmt=$mysqli->prepare($sql);

     $sqlstmt->bind_param("s",$course);

     $sqlstmt->execute(); 

     $sqlstmt->bind_result($dbCourseId,$dbModuleId,$dbCourseName,$dbModuleName);


    $moduleHTML  = "";  

     while($sqlstmt->fetch()) { 
        $moduleHTML .= "<option value='$dbModuleId'>" . $dbModuleId . " - " . $dbModuleName . "</option>".PHP_EOL;   
    } 


    echo $moduleHTML; 

     $sqlstmt->execute(); 


    ?>

现在,如果您查看代码的底部,会发生什么情况是它在用户提交“课程”和“模块”下拉菜单后执行查询。如果它没有找到与该模块相关的会话,那么它会回显"Sorry, You have No Sessions under this Module"

但是我的问题是,如果用户没有从下拉菜单中选择“课程”和“模块”,或者用户从“课程”中选择了课程,我不希望显示此回声下拉菜单,但尚未从“模块”下拉菜单中选择模块。

下面是我想要的每种情况的回声:

  1. 如果用户没有选择课程和模块:echo "Please Select a Course and Module";
  2. 如果用户选择了课程但没有选择模块:echo "Please Select a Module";
  3. 如果用户选择了课程和模块但没有出现会话:echo "Sorry, You have No Sessions under this Module";

目前上面的列表 3 有效,但我怎样才能通过仅显示它们的回声而不显示其他回声来让列表 1 和 2 工作?

更新:

验证下拉菜单的Javascript代码:

     function validation() {

                var isDataValid = true;

                var moduleTextO = document.getElementById("coursesDrop");
            var courseTextO = document.getElementById("modulesDrop");

            var errModuleMsgO = document.getElementById("moduleAlert");

  if (courseTextO.value == "" && moduleTextO.value == ""){
          errModuleMsgO.innerHTML = "Please Select a Course and Module";
          isDataValid = false;
  } else if (courseTextO.value == ""){
          errModuleMsgO.innerHTML = "Please Select a Course";
          isDataValid = false;      
  }else  if (moduleTextO.value == ""){
          errModuleMsgO.innerHTML = "Please Select a Module";
          isDataValid = false;    
    }else{
                errModuleMsgO.innerHTML = ""; 
        }

        return isDataValid;

        }

以下是 HTML 代码:

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<table>
<tr>
<th>Course: <?php echo $courseHTML; ?></th>
<th>Module: <?php echo $moduleHTML; ?></th>
</tr>
</table>
<p><input id="moduleSubmit" type="submit" value="Submit" name="moduleSubmit" /></p>
<div id="moduleAlert"></div>
</form>

【问题讨论】:

  • $moduleId的来源是什么?推测它应该来自$_POST['modules']`,但我们没有看到该代码。
  • @MichaelBerkowski 模块下拉菜单位于名为 module.php 的单独页面上,这是通过 jquery 访问的。我现在已经包含在问题中的代码
  • 您是否在某处调用“验证”功能?
  • @mali303 不是真的,我应该如何以及在哪里调用 validation() 函数?

标签: php


【解决方案1】:

您可以使用 javascript 在其中创建一个函数来执行此操作,您可以在其中检查天气每个字段是否已填充或不能像这样显示在那里

<script type="text/javascript">
function validate()
{
if(document.dropdownmenuname.course.value=="")
{
alert("Please fill in your form");
document.dropdownmenuname.course.focus() ;
 return false;
}
}
....

【讨论】:

  • 我在 javascript 代码中包含了类似的内容,但我没有显示警报,而是显示了一个字符串。问题是我无法显示要显示的字符串。我在我的问题下面包含了一个更新,它显示了 javascript 代码和 HTML,你能看到我的代码有什么问题吗?为什么这不起作用?
【解决方案2】:

更改表单标签

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" onsubmit="return validation();">

在服务器端进行验证也是一个好主意,如果您想在服务器端检查值,只需在现有的 PHP 中添加一些代码:

<?php

if (isset($_POST['moduleSubmit'])) {

if(empty($_POST['courses']) && empty($_POST['modules'])) {
   echo 'Please Select a Course and Module';
} elseif(empty($_POST['courses'])) {
   echo 'Please Select a Course';
} elseif(empty($_POST['modules'])) {
   echo 'Please Select a module';
} else {

$sessionquery = "
SELECT SessionId, SessionDate, SessionTime, ModuleId, TeacherId
FROM Session
WHERE
(ModuleId = ? AND TeacherId = ?)
ORDER BY SessionDate, SessionTime 
";

$sessionqrystmt=$mysqli->prepare($sessionquery);
// You only need to call bind_param once
$sessionqrystmt->bind_param("si",$moduleId,$userid);
// get result and assign variables (prefix with db)

$sessionqrystmt->execute(); 

$sessionqrystmt->bind_result($dbSessionId,$dbSessionDate,$dbSessionTime, $dbModuleId, $dbTeacherId);

$sessionqrystmt->store_result();

$sessionnum = $sessionqrystmt->num_rows();   

if($sessionnum ==0){
echo "<p>Sorry, You have No Sessions under this Module</p>";

}

【讨论】:

  • 谢谢,我可以问一点,我可以问一点,如果我有单选按钮,我可以使用 php empty 来检查服务器端是否没有选择单选按钮?
  • 是的,可以类似地在服务器端验证无线电。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 2017-10-06
  • 2020-06-24
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多