为了账号安全,请及时绑定邮箱和手机立即绑定

使用 PHP 读取和排序用户的下拉菜单

使用 PHP 读取和排序用户的下拉菜单

PHP
潇潇雨雨 2021-06-15 13:13:48
我正在做一个项目,我需要在用户中阅读(我使用 MySQL)并且能够排序 1. 男性/女性 2. 薪水(例如 30k+、50k+、100k+...)我试过设置一个选择下拉菜单,但由于某种原因,它只显示男性,即使我选择了女性。<form action="#" method="post">      <select name="Gender">         <option value=''>Select Gender</option>         <option value="Men">Men</option>         <option value="Women">Women</option>      </select>   <input type="submit" name="submit" value="Get Selected Values" /></form>if(isset($_POST['submit']) && $_POST['submit'] = "Men"){        $selected_val = $_POST['Gender'];          echo "You have selected :" .$selected_val;        $conn = create_Conn();        $sql = "SELECT * FROM users WHERE kon='Man'";        $result = $conn->query($sql);        if (isset($_SESSION['anvnamn'])) {            while($row = $result->fetch_assoc()) {              //Prints user data            }        }        else {            while($row = $result->fetch_assoc()) {             //Prints user data but emails            }        }}elseif (isset($_POST['submit']) && $_POST['submit'] = "Women"){        $selected_val = $_POST['Gender'];          echo "You have selected :" .$selected_val;        $conn = create_Conn();        $sql = "SELECT * FROM users WHERE kon='Woman'";        $result = $conn->query($sql);        if (isset($_SESSION['anvnamn'])) {            while($row = $result->fetch_assoc()) {               //Prints user data            }        }        else {            while($row = $result->fetch_assoc()) {               //Prints user data but emails            }        }}else {        print("-");}
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您已经在ifs 中分配了值,而不是与它们进行比较。此外,您使用了错误的输入进行比较。$_POST['submit']将始终包含值Get Selected Values。


if (isset($_POST['submit']) && $_POST['Gender'] === "Men") {

    $selected_val = $_POST['Gender'];

    echo "You have selected :" . $selected_val;

    $conn   = create_Conn();

    $sql    = "SELECT * FROM users WHERE kon='Man'";

    $result = $conn->query($sql);

    if (isset($_SESSION['anvnamn'])) {

        while ($row = $result->fetch_assoc()) {

            //Prints user data

        }

    } else {

        while ($row = $result->fetch_assoc()) {

            //Prints user data but emails

        }

    }


} elseif (isset($_POST['submit']) && $_POST['Gender'] === "Women") {

    $selected_val = $_POST['Gender'];

    echo "You have selected :" . $selected_val;

    $conn   = create_Conn();

    $sql    = "SELECT * FROM users WHERE kon='Woman'";

    $result = $conn->query($sql);

    if (isset($_SESSION['anvnamn'])) {

        while ($row = $result->fetch_assoc()) {

            //Prints user data

        }

    } else {

        while ($row = $result->fetch_assoc()) {

            //Prints user data but emails

        }

    }


} else {

    print("-");

}

这里的代码更简单,冗余更少。并假设您使用的是 PHP PDO。


if (strtolower($_SERVER['REQUEST_METHOD']) === 'post') {

    $gender = $_POST['Gender'] ?? null; // your old $selected_val variable


    if (!$gender) {

        // do something to abort the execution and display an error message.

        // for now, we're killing it.

        print '-';

        exit;

    }


    /** @var PDO $dbConnection */

    $dbConnection = create_Conn();

    $sql = 'SELECT * FROM users WHERE kon = :gender';

    $stmt = $dbConnection->prepare($sql);

    $stmt->bindParam('gender', $gender);

    $stmt->execute();


    foreach ($stmt->fetchAll() as $user) {

        if (isset($_SESSION['anvnamn'])) {

            // Prints user data

        } else {

            // Prints user data but emails

        }

    }

}


查看完整回答
反对 回复 2021-06-19
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

由于在我之前提供了一个宏伟的答案,现在这只是要审查的内容。

如果您查看表单,则有两个元素。在提交时,您的脚本将看到..

  1. 性别 - $_POST['Gender'] 将是 ''、'Men' 或 'Women'

  2. 提交 - $_POST['submit'] 将为空或值“获取选定值”。如果 php 文件被其他东西调用,它只能为 null。

您可以通过在第一个 if() 之前在代码中使用命令 print_r($_POST) 来查看这一点。这允许您测试和检查调试期间实际发布的内容。

因此,要查看表单是否已发布,您可以使用外部检查提交代码,然后检查 Gender 的状态。

以下是对 IF() 的更正,以及一些对代码进行整理的建议。

<?php


// Process the form data using Ternary operators

// Test ? True Condition : False Condition

$form_submitted = isset($_POST['submit'])? $_POST['submit']:FALSE;

$gender = isset($_POST['Gender'])? $_POST['Gender']:FALSE;


if($form_submitted){

  if($gender == 'Men') {

    // Stuff here

  }

  else if($gender == 'Women') {

    // Stuff here

  }

  else {

    print("-");

  }

} else {

  // Optional: Case where the form wasn't submitted if other code is present.

}

您也可以考虑使用 switch / case 结构。我会把它留给你查查。


查看完整回答
反对 回复 2021-06-19
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信