【问题标题】:How to use PHP to pass HTML form data to a MYSQL db and return the data to the browser如何使用 PHP 将 HTML 表单数据传递给 MYSQL 数据库并将数据返回给浏览器
【发布时间】:2012-08-15 20:06:36
【问题描述】:

我正在尝试使用PHP 将HTML 表单数据传递给MYSQL 数据库并将数据返回给浏览器。通过提交检查权限(M1,M2,MN1..)我想显示拥有这些权限的教师的姓名。现在,请告诉我代码有什么问题:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head><body>
<form action="akcja.php" method="post">    
<br /><br /><br />
<table>
<tr><th><br/><input type="checkbox" id="check" name="M1" value="M1,">m1</th> 
<th><br/><center><input type="checkbox" id="check" name="M2" value="M2,">m2</center></th> 
<th><br/><center><input type="checkbox" id="check" name="MN1" value="MN1,"> mn1    </center></th> </tr></table>
<input type="submit" name="submit" value="Search Database" />
</form>
</body>
</html>



<?php
$query = mysql_query("SELECT * FROM permissions WHERE m LIKE '".$_POST['M1']."' OR m LIKE '".$_POST['M2']."' OR mn LIKE '".$_POST['MN1']."' ");  
if($query)
    while($permissions = mysql_fetch_assoc($query)){
        $query2 = mysql_query("SELECT name_surname FROM instruktorzy WHERE instruktor_id='".$permissions['instruktor_id']."'");  
        while($Mdwa = mysql_fetch_assoc($query2)){
            echo "<p style=\"font-size: 14px; font-family: Helvetica; background-color: #FFFFFF\"> ".$Mdwa['name_surname']."<br />" ; "</p>" ;
        }
    }
?>

【问题讨论】:

  • 除了使用不安全的 SQL 查询构建和 mysql_ 不确定没有你说什么不起作用。
  • 永远不要在未清理数据的情况下存储 $_POST 变量。您对 SQL 注入完全开放。
  • 是的,你应该使用类似:$m2 = isset($_POST['M2']) ? $_POST['M2'] : null 来停止 E_NOTICE 这样的错误
  • 有关消毒的其他信息:net.tutsplus.com/tutorials/php/… if ($_POST['m1']) { $conditional .= 'm LIKE' .消毒($_POST['m1']);您需要有条件地构建该查询。 $query = 'SELECT * FROM permissions WHERE m LIKE ' 。 $条件;
  • 这可能无助于回答您的问题,但您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定要使用哪一个,read this article

标签: php mysql html forms


【解决方案1】:

这就是我看到的一种更简洁的代码定位方式。我应该注意的是,这只是在没有任何工具的情况下快速拼接在一起,所以不要复制和粘贴。

$connection = new PDO('mysql:host=localhost;dbname=db', 'awesome_user', 'love123',
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));

$query_obj = $connection->prepare("SELECT permissions.*, instruktorzy.name_surname 
    FROM permissions 
    LEFT JOIN instruktorzy ON instruktorzy.instruktor_id = permissions.instruktor_id  
    WHERE permissions.m IN (:m1, :m2) OR permissions.mn LIKE :mn1 LIMIT 100");
$query_obj->setFetchMode(PDO::FETCH_ASSOC);

// You will need something a little more complex here to deal with missing data, 
// I am just putting in what is required to get it working if the 
// entire $_POST is set
$query_obj->bindValue(':m1', isset($_POST['M1']) ? $_POST['M1'] : null);
$query_obj->bindValue(':m2', isset($_POST['M2']) ? $_POST['M2'] : null);
$query_obj->bindValue(':mn1', isset($_POST['MN1']) ? $_POST['MN1'] : null);

$query_obj->execute();

foreach($query_obj as $k => $row){
    echo '<p style="font-size: 14px; font-family: Helvetica; 
        background-color: #FFFFFF"> '.$row['name_surname'].'<br /></p>' ;
}

这应该可以帮助您走上编写更好代码的正确轨道;希望。

【讨论】:

  • 解析错误:语法错误,意外的 '?',在第 16 行的 C:\wamp\www\kdp\instr\pdoakcja.php 中需要 ',' 或 ')'
  • @KL1M7R0И 哎呀我忘了关闭我的括号:P再试一次
  • 终于可以用了,谢谢。还有 1 个问题 - 我应该学习 PDO 还是 Doctrine2?
  • @KL1M7R0И 这完全取决于您,Doctrine2 比 PDO 更重且资源密集,但它为您必须自己编写的许多内容提供了标准化层。我会说看看两者并选择你的套房:)
  • 也许您知道如何将数据显示在与复选框相同的页面上,而无需重新加载整个页面? AJAX?
【解决方案2】:

下面的代码是一种更简洁的处理方式。自从我以这种方式使用它已经很长时间了,但是它可能会帮助您解决问题,因为这可能是因为您在查询循环中使用了查询循环。 (不确定,但如果你像我一样这样做不会有伤害。

$permissions = Array();
$query = mysql_query("SELECT * FROM permissions WHERE m LIKE '" . $_POST['M1'] . "' OR m LIKE '" . $_POST['M2'] . "' OR mn LIKE '" . $_POST['MN1'] . "' ");
if ($query) {
  while ($row = mysql_fetch_assoc($query)) {
    array_push($permissions, $row);
  }
}
foreach ($permissions AS $key => $permission) {
  $query = mysql_query("SELECT name_surname FROM instruktorzy WHERE instruktor_id='" . $permission['instruktor_id'] . "'");
  if ($query) {
    while ($row = mysql_fetch_assoc($query2)) {
      echo "<p style=\"font-size: 14px; font-family: Helvetica; background-color: #FFFFFF\"> ".$Mdwa['name_surname']."<br />" ; "</p>" ;
    }
  }
}

【讨论】:

  • 这个脚本比发布的版本消耗更多的内存和资源不是吗?
  • 我认为在循环中执行查询也不是一个好习惯。
猜你喜欢
  • 2022-01-20
  • 2023-04-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多