0

我的页面上有两个来自。我用一个更新或编辑第一个 sql 表中的数据。有了第二个,我可以在第二个 sql 表中添加和删除数据。对“ID”值采取了某些措施。

这是我的表格:

<form class="form_hidden" name="form1" style="left:10px;top:10px;" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input class="final_form input_id"                  name="input_id"/>
    <input class="final_form input_date"                name="input_date" />
    <input class="final_form input_poczatkowy"          name="input_poczatkowy" />
    <input class="final_form input_gotowka"             name="input_gotowka" />
    <input class="final_form input_karta"               name="input_karta" />
    <input class="final_form input_pobrano"             name="input_pobrano" />
    <input class="final_form input_kto"                 name="input_kto" />
    <button class="hidden_button button_1" type="submit"  name="form1submit">btn</button>
</form>

<form class="form_hidden" name="form2" style="left:10px;top:300px;" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input class="final_form wydatek_id"                  name="wydatek_id"/>
    <input class="final_form wydatek_date"                name="wydatek_date" />
    <input class="final_form wydatek_kwota"               name="wydatek_kwota" />
    <input class="final_form wydatek_rodzaj"              name="wydatek_rodzaj" />
    <input class="final_form wydatek_opis"                name="wydatek_opis" />
    <button class="hidden_button button_1" type="submit" name="form2submit">btn</button>
</form>  

这是我的 php 代码:

$db_name = 'DATABASE_NAME';
$db_host = 'localhost';
$db_user = 'DATABASE_USER';
$db_pass = 'PASSWORD';


$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name);

mysql_query("SET CHARSET utf8");
mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");   

if(isset($_POST['form1submit']))
{
    $raport_id = $_POST['input_id'];
    $raport_date = $_POST['input_date'];
    $raport_poczatkowy = $_POST['input_poczatkowy'];
    $raport_gotowka = $_POST['input_gotowka'];
    $raport_karta = $_POST['input_karta'];
    $raport_pobrano = $_POST['input_pobrano'];
    $raport_kto = $_POST['input_kto'];


   if($raport_id=='null'){
       $sql = "INSERT INTO `raporty`(`id`, `data`, `stan_poczatkowy`, `platnosci_gotowka`, `platnosci_karta`, `pobrano`,`kto_pobral`, `komentarz`)
           VALUES('".NULL."','".$raport_date."','".$raport_poczatkowy."','".$raport_gotowka."','".$raport_karta."','".$raport_pobrano."','".$raport_kto."','".NULL."')";
    }else{
        $sql = "UPDATE `raporty` SET  
            `data`='".$raport_date."', 
            `stan_poczatkowy`='".$raport_poczatkowy."', 
            `platnosci_gotowka`='".$raport_karta."', 
            `platnosci_karta`='".$raport_gotowka."', 
            `pobrano`='".$raport_pobrano."',
            `kto_pobral`='".$raport_kto."',
            `komentarz`='".NULL."'
             WHERE `raporty`.`id`='".$raport_id."'";
    }
    $retval = mysql_query($conn,$sql);
    header("Location: http:page");
    exit;               
}

if(isset($_POST['form2submit']))
{
    $wydatek_id = $_POST['wydatek_id'];
    $wydatek_date = $_POST['wydatek_date'];
    $wydatek_kwota = $_POST['wydatek_kwota'];
    $wydatek_rodzaj = $_POST['wydatek_rodzaj'];
    $wydatek_opis = $_POST['wydatek_opis'];

    if($wydatek_id=='null'){
        $sql = "INSERT INTO `wydatki` (`id` ,`data` ,rodzaj` ,`kwota` ,`kategoria` ,`opis`) VALUES ('".NULL."','".$wydatek_date."','wydatek','".$wydatek_kwota."','".$wydatek_rodzaj."','".$wydatek_opis."')";      
    }else{
        $sql = "DELETE FROM `wydatki` WHERE `wydatki`.`id` = '".$wydatek_id."'";
    }
    $retval = mysql_query( $sql, $conn );
    header("Location: http:page");
    exit;        
}          

有趣的事实是,唯一有效的是对 wydatki 表的 DELETE FROM 查询。其余的只是不工作,我不知道为什么。而且,他们在我添加第二种形式之前就已经工作了。

谢谢大家的帮助。

4

1 回答 1

1

您的参数在第一次调用mysql_query().

mysql_query($conn,$sql);

应该:

mysql_query($sql,$conn);

话虽如此mysql_*,函数系列已被弃用,不应在新代码中使用。相反,它们已被替换为mysqli_*PDO准备好的语句。


还值得注意的是,由于缺少对数据库输入的任何转义,您的表单完全容易受到 MySQL 注入漏洞的攻击。这就是 mysqli 和 PDO 中存在准备好的语句以及应该使用它们的确切原因。就目前而言,任何人都可以通过您的表单运行他们自己的 SQL 代码来擦除您的整个数据库。

于 2013-09-02T19:11:14.007 回答