如何在PHP和MySQL上使用下拉菜单同时删除和插入
我在尝试同时使用下拉菜单插入和删除时遇到问题如何在PHP和MySQL上使用下拉菜单同时删除和插入,php,mysql,drop-down-menu,Php,Mysql,Drop Down Menu,我在尝试同时使用下拉菜单插入和删除时遇到问题 <div id="blabla"> <div style="position: relative;"> <p style="position: absolute; top: 185px; left: 58px;"> <select name="lista"> <option selected="selected"&
<div id="blabla">
<div style="position: relative;">
<p style="position: absolute; top: 185px; left: 58px;">
<select name="lista">
<option selected="selected"></option>
<optgroup label="Selecciona">
<option> Option 1</option>
<option> Option 2</option>
<option> Option 3</option>
<option> Option 4</option>
<option> Option 5</option>
</optgroup>
</select>
选择1
选择2
选择3
选择4
备选案文5
这是ADD.php代码
<html>
<head>
</head>
<body>
<?php
if(isset($_POST['justifica']) && !empty($_POST['justifica']) &&
isset($_POST['si']) && !empty($_POST['si']) &&
isset($_POST['lista']) && !empty($_POST['lista']))
{
mysql_connect("123", "123", "p123") or die(mysql_error()) ;
mysql_select_db("123") or die(mysql_error()) ;
mysql_query("INSERT INTO dos (lista,justifica,si) VALUES ('$_POST[lista]','$_POST[justifica]','$_POST[si]')");
mysql_query("DELETE FROM dos2 WHERE lista5='$_POST[lista]')");
if ($_POST['value'] === '') {
$_POST['value'] = null; // null en mayuscula si es SQL
}
echo "<img src=imagenes/Satisf.jpg>";
}else{
echo "<img src=imagenes/Error.jpg>";
}
?>
</body>
</html>
我会用MySQLi来做这个,我更喜欢OOP
<?php
class MyDBHandle
{
public $objDB;
//Creates the DB Object
public function Init($strHost, $strUsername, $strPassword, $strDB)
{
$this->objDB = new mysqli($strHost, $strUsername, $strPassword, $strDB);
}
//SQL Query 1
public function Dos($strLista, $strJustifica, $strSi)
{
$objStatement = $this->objDB->prepare("INSERT INTO dos ('lista', 'justifica', 'si') VALUES (?, ?, ?)");
$objStatement->bind_param("sss",
$strLista,
$strJustifica,
$strSi);
$objStatement->execute();
$objStatement->free_result();
}
//SQL Query 2
public function Dos2($strLista)
{
$objStatement = $this->objDB->prepare("DELETE FROM dos2 WHERE lista2=?");
$objStatement->bind_param("s",
$strLista);
$objStatement->execute();
$objStatement->free_result();
}
//disconnect from the db
public function Disconnect()
{
$this->objDB->Close();
}
}
//db variables
$dbHost = "xxx";
$dbUser = "xxx";
$dbPass = "xxx";
$dbDB = "xxx";
//initialize and connect to the DB
$objDB = new MyDBHandle();
$objDB->Init($dbHost, $dbUser, $dbPass, $dbDB);
//here is a moded version of your code to execute the new methods
if(isset($_POST['justifica']) && !empty($_POST['justifica']) &&
isset($_POST['si']) && !empty($_POST['si']) &&
isset($_POST['lista']) && !empty($_POST['lista']))
{
$objDB->Dos($_POST['lista'], $_POST['justifica'], $_POST['si']);
$objDB->Dos2($_POST['lista']);
}
$objDB->Disconnect();
?>
这个问题的答案太明显了。它不会在将来帮助任何人。@developerwk是吗?我不知道答案是什么,我想我是个笨蛋。用户3583216 dos和dos2之间的关系是什么,我们如何知道您要删除的id?您是否试图在“dos”中插入一行,将“选项1”作为lista
,并在“dos2”中删除一行,将“选项1”作为lista
?我知道这听起来有些多余,但我想澄清一下你的英语。如果是这种情况,那么您确实需要两个查询,第二个查询就是:DELETE FROM dos2 WHERE lista2='$\u POST[lista]'
@laughbor耶,这就是我想要的!,为什么你的意思是我不需要两个查询?我需要合并它们还是什么?您可能需要通过以下三种方式之一来执行此操作:1)在事务中执行两种查询操作以使操作原子化2)在insert表上创建触发器以自动删除删除表中的行3)编写存储过程来包装insert和delete操作。调用成员非对象(第23行,第一个绑定)上的函数bind_param()如果您看到,所有的DB代码都写在“类MyDBHandle{…}”中。您必须在初始化对象时使用“$objDB=new MyDBHandle()”将其写在上面。就像你必须在你使用它的区域上面写一个函数一样。是这样写的(和你发布的代码一样,我唯一改变的是db变量)。。你的意思是我必须添加更多的代码还是什么?我在Dos2中有一些糟糕的代码(我的一些模板代码)。重新复制剂量2。抱歉。仍然给我一个错误,在第24行的非对象上调用成员函数bind_param(),我无法找出问题所在:/