Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从表单到PHP的变量传输_Php_Html_Mysql_Forms - Fatal编程技术网

从表单到PHP的变量传输

从表单到PHP的变量传输,php,html,mysql,forms,Php,Html,Mysql,Forms,我有这样一种形式: <form action="del.php" method="post" enctype="multipart/form-data"> Number of field to show:<input type="text" name="limit" /><br /><br /> Top category: <select name="topcat"> <option>tech</option&g

我有这样一种形式:

<form action="del.php" method="post" enctype="multipart/form-data">
Number of field to show:<input type="text" name="limit" /><br /><br /> 
Top category: 
<select name="topcat"> 
<option>tech</option>
<option>automobile</option>
</select><br /><br />
Base category: 
<select name="cat"> 
<option>mobile</option>
<option>computer</option>
</select> 

<input type="submit" />
</form>

要显示的字段数:

顶级类别: 技术人员 汽车

基本类别: 可移动的 计算机
我正在尝试编写代码,以从页面中选择的数据库中删除特定id: del.php:

<head>
<?php
require_once('globals.php');// for database connection
?>
</head>
<body>
<?php

        $cat = $_POST['cat'];
    $topcat = $_POST['topcat'];
    $limit = $_POST['limit'];

if(isset($_GET['delete']))
{

    $query = 'DELETE FROM '.$cat.' WHERE id = '.(int)$_GET['delete'];
    echo $query;
    $result = mysql_query($query);
}



$query = 'select id,headline from '. $cat.' order by date DESC limit 0,'.$limit;
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result))
{

$headline=$row['headline'];

    echo '<div class="record" id="record-'.$row['id'].'">
                <a href="?delete='.$row['id'].'" class="delete">Delete</a>
                <strong>'.$headline.'</strong>
            </div>';
}
?>

</body>

问题:当
isset($\u GET['delete']
GET execute时,它表示未定义变量
cat
。 但是,
$cat
被定义为从前面的表单解析而来。 任何解决方案?

对所有发布的内容使用if(isset())结构,如果遇到问题,请使用else显示相关的故障排除通知


大概$delete是从表单复选框发送的,因此应该包含一个整数值,并通过GET而不是GET发送。我将把它留给您。

这里是一个简短的教训

第一课

关于HTTP GET请求的课程:
决不…使用GET请求执行任何更新/删除它是一种让施虐者破坏应用程序的邀请,例如:SQL注入 POST请求比GET更安全,但这并不意味着它们是无懈可击的..始终进行消毒

htt://yourunsecureedwebsite/del.php?delete=10

滥用者将此请求发送到网页:

htt://yourunsecureedwebsite/del.php?delete=10'或1=1'

你完蛋了。整个表都被删除了。所以千万不要使用GET请求对数据库进行任何修改

第二课:
始终对GET和POST请求进行转义/清理 在过去,我们依靠
mysql\u real\u escape\u string()
来防止恶意请求。但是,任何mysql\u*都有自己的漏洞,因此PHP管理员不赞成使用此功能

因此,我们拯救了这个拥有
prepare()
函数的机构,该机构负责处理这个恶意代码。不再担心注入问题。(我个人会在此基础上添加更多的净化措施)

现在您的代码:

正如我在评论部分提到的,它看起来不像是一个不打算删除任何内容的表单,它看起来只是一个搜索查询表单,您可以在其中选择字段数和类别,当使用POST请求提交from时,您可以根据查询显示数据。实际上,您没有发送任何关于删除类别的请求

以下是实现所需功能的步骤: 首先,当您执行post请求时,请始终检查页面是否加载了post请求。在您的情况下,第一行应该是:

if($_isset["submit"]){
    $cat = sanitize($_POST['cat']);
    $topcat = sanitize($_POST['topcat']);
    $limit = sanitize($_POST['limit']);
}
sanitize
必须创建一个自定义函数来清理POST数据。()

现在是数据库部分:阅读一个关于如何实现MySQLi或PDO()的小教程

如果您还希望将类别与表单一起删除,则必须找到检索该类别id的方法,然后将其删除: 这可以通过两种方式实现: 1> 您可以发送隐藏的id字段(不安全) 2> 根据您选择的类别从数据库检索id

注意:您一次只能执行
GET
请求或
POST
请求。有一些方法可以将值附加到URL,这可以模拟GET请求,但这是您学习过程中的另一个重要教程

我建议在在线制作任何内容之前,先学习一下创建安全应用程序的教程,因为有些人和赛昂人喜欢胡闹


Dinesh

您不需要
enctype=“多部分/表单数据”
当没有要提交的文件时。$cat不能为空,请发布您的php错误。@Pietu1998:确定删除了该错误并检查了…问题仍然存在。@Brad-如果我们每次谈到sql注入漏洞时都能得到一分钱..我们现在已经是百万富翁了..@user2320375,不不不不!先学会以正确的方式编写查询。你不知道这个问题有多严重。有一些自动机器人在互联网上漫游,寻找像你这样的坏代码。不仅如此,当你需要在字符串值中使用撇号之类的东西时,你的代码将无法正常工作。解决它。先学会正确的方法。不管你是初学者。你是一个新手我们学习的方法不对。-1.不要在答案中发布不安全的代码!人们总是复制/粘贴这些东西,而不知道他们在做什么。
if(isset($\u GET['delete'])和isset($\u post['cat'])){
这会被当作真的执行吗???在发布答案之前请想一想。不用担心,我只是在示例中演示了sprintf的使用,这样我就不会一次提供太多信息。我会解决它。