【问题标题】:how can i use only one file instead of 4 php files that are basically the same?我怎样才能只使用一个文件而不是 4 个基本相同的 php 文件?
【发布时间】:2020-05-06 00:08:10
【问题描述】:

我基本上有一个简单的 porgram 来计算单击特定按钮的次数,然后将其发送到 mysql,但是对于每个按钮,我都有不同的表和分隔文件。我想知道是否有任何方法可以将 4 个文件合并为一个,因为它在不同的文件中重复了 4 次相同的事情。 这是我的代码:

index.php

<!DOCTYPE html>
<html>
<head>
    <title>Fct</title>
</head>
<body>
<form  action="inserir.php" method="post">
   <button name="A" type="submit" value="A">Senha A</button>
</form>

<form  action="inserir2.php" method="post">
   <button name="B" type="submit" value="B">Senha B</button>
</form>

<form  action="inserir3.php" method="post">
   <button name="C" type="submit" value="C">Senha C</button>
</form>

<form  action="inserir4.php" method="post">
   <button name="D" type="submit" value="D">Senha D</button>
</form>

</body>
</html> 

然后要插入mysql的文件是inserir.php;

<?php
include 'bdados.php';

$A = $_POST['A'];

$query = "INSERT into `tipo1`(`senhaa`) VALUES (  '$A' )";


mysqli_query($dbconn, $query);

header("location: index.php");



 ?>

基本上我有 4 个“inserir.php”,我想我可以将这 4 个文件缩小为一个,我只是不知道如何。 非常感谢所有帮助:)

【问题讨论】:

  • php.net/manual/en/reserved.variables.get.php 使用/inserir.php?myExampleVariable=Senha
  • 我不知道我是否理解 sry,我该如何使用它? (我是菜鸟 XD)
  • 您可以对所有输入元素使用单个表单元素。但请确保为所有输入元素提供唯一的名称和 ID(例如,

标签: php html mysql forms


【解决方案1】:

添加名称相同但值不同的提交按钮。通过$_POST['name']检索值

HTML

<form  action="inserir.php" method="post">
   <button name="val" type="submit" value="A">Senha A</button>
<button name="val" type="submit" value="B">Senha B</button>
<button name="val" type="submit" value="C">Senha C</button>
<button name="val" type="submit" value="D">Senha D</button>
</form>

PHP

<?php
include 'bdados.php';

$val = $_POST['val'];

$query = "INSERT into `tipo1`(`senhaa`) VALUES (  '$val' )";


mysqli_query($dbconn, $query);

header("location: index.php");



 ?>

【讨论】:

    【解决方案2】:

    我感觉您的数据库架构可以改进,但在不了解您的软件范围的情况下,很难提出建议。看起来您想根据提交的值更改表和列名。有几种不同的方法可以提供帮助。

    我将更改您的查询代码以使用准备好的语句(使用 PDO,据我所知)

    PHP 切换

    您将拥有一个文件来处理所有这四个提交。

    include 'bdados.php';
    
    $key = array_keys($_POST)[0];
    $value = $_POST[$key];
    switch ($key){
        case 'A':
            $column = 'senhaa';
            $table = 'tipo1';
            break;
        case 'B':
            $column = 'senhab';
            $table = 'tipo2';
            break;
        case ...
    }
    
    
    //The table name is hard-coded, so that part is not vulnerable to SQL injection
    $query = "INSERT into `{$tableName}`(`senhaa`) VALUES ( :newValue )";
    $bind = [':newValue'=>$value];
    
    $pdo = new PDO(...);
    $statement = $pdo->prepare($query);
    $statement->execute($bind);//pass the ':newValue' to be bound
    //Without binding, somebody could submit: `'');DELETE FROM senhaa WHERE (TRUE`
    // This would close your INSERT statement with an empty value & delete everything from your table
    
    
    // print_r($statement->errorInfo()); //for debugging if it doesn't work
    
    header("location: index.php");
    

    PHP 数组

    这很像上面,但我们将switch 步骤替换为一个数组,如:

    $info = [
        "A"=>['table'=>'tipo1','column'=>'tipo2']
        "B"=> ['table'=>'tipo2'...]
        ...
    ];
    $table = $info[$key]['table'];
    $column = $info[$key]['column'];
    

    隐藏的 HTML 输入

    另一种方法是通过隐藏的输入字段发送识别信息。虽然您不应该以这种方式发送表名,但您可以发送某种标识符,然后使用上面的数组方法将标识符映射到表信息。

    <form  action="inserir-todo.php" method="post">
       <button name="D" type="submit" value="D">Senha D</button>
       <input type="hidden" name="identifier" value="the-fourth-table" />
    </form>
    

    然后你会这样做:

    $key = $_POST['identifier'];
    $table = $info[$key]['table'];
    ...
    

    【讨论】:

    • 我基本上有 3 列,id、senhaa 和 data(witch 是葡萄牙语中的日期),我只想在 senhaa 列中添加“A”,基本上就是这样
    猜你喜欢
    • 2021-10-15
    • 2021-04-06
    • 2017-03-29
    • 2021-04-22
    • 2021-11-29
    • 2011-06-09
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多