gpt4 book ai didi

php - 停止 MVC php 上的重复数据库条目

转载 作者:行者123 更新时间:2023-11-30 00:36:27 25 4
gpt4 key购买 nike

正如标题所示,我使用 MVC 系统来显示数据库中的表。这还允许用户向表中添加新条目。

我需要一种方法来阻止添加重复条目,并需要一条消息告诉用户他们已经是与他们输入的详细信息相匹配的条目。

该代码存储在controller_create.php 文件中。我已经发布了整个文件以及 sql 文件中的 create 语句。停止重复的代码只需要对其中一个表起作用。

这段代码是我到目前为止所拥有的:

      if ($class_obj == "supplier")
{
$referred_as = $_POST['referred_as'];
$query = mysql_query("SELECT COUNT(*) AS count `supplier` WHERE `referred_as` = ' " . $referred_as. " ' ");
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
echo "Supplier already exists";
}
else
{
$sql = "INSERT INTO supplier (referred_as) VALUES ('".$_POST[referred_as]."')";
}
}

我认为我的立场是正确的。欢迎任何帮助。

为供应商表创建语句:

--
-- Table structure for table `supplier`
--

CREATE TABLE IF NOT EXISTS `supplier` (
`id` int(11) NOT NULL auto_increment,
`goodsandservices` varchar(40) default NULL,
`based` varchar(40) default NULL,
`referred_as` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Dumping data for table `supplier`
--

INSERT INTO `supplier` (`id`, `goodsandservices`, `based`, `referred_as`) VALUES

Controller_create.php:

    <?
$class_obj=$_REQUEST['class_obj'];

$pino = array(); // this is a local array used to store retrieved attributes of selected objects

foreach ($_REQUEST as $key_REQUEST => $value_REQUEST)
{
if (substr($key_REQUEST,0,6) == 'input_')
{
if ($key_REQUEST != "input_id")
{
$pino = $pino + array(substr($key_REQUEST,6) => $value_REQUEST);
}
}
}
//echo "<P>.".print_r($pino);
$this_obj = MyActiveRecord::Create($class_obj, $pino );

$this_obj->save(); // crucial command: disactivate only if you don't want to save...

$last_inserted_record = $this_obj->id;

$relation_name = $_REQUEST['jt_name'];
$relation_class = $_REQUEST['jt_class'];



if ($class_obj == "supplier")
{
$referred_as = $_POST['referred_as'];
$query = mysql_query("SELECT COUNT(*) AS count `supplier` WHERE `referred_as` = ' " . $referred_as. " ' ");
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
echo "Supplier already exists";
}
else
{
$sql = "INSERT INTO supplier (referred_as) VALUES ('".$_POST[referred_as]."')";
}
}


// echo "<p>relation_name = ".$relation_name." - strpos = ".strpos ($relation_name,$class_obj)."";


echo "<p>";

foreach ($_REQUEST as $key_REQUEST => $value_REQUEST)
{
if (substr($key_REQUEST,0,9) == 'jt_input_')
{
//$pino = (substr($key_REQUEST,9) => $value_REQUEST);

$that_id = $value_REQUEST;
//echo " that_id = ".$that_id;
//echo " key = ".$key_REQUEST;


if (strpos($relation_name,$class_obj)>0)
{
$obj2 = $this_obj;
//$obj1 = $that_id;
$obj1 = MyActiveRecord::FindById($relation_class, $that_id);
}
else
{
$obj1 = $this_obj;
$obj2 = MyActiveRecord::FindById($relation_class, $that_id);
//$obj2 = $that_id;
}
//MyActiveRecord::Link($obj1,$obj2);
MyActiveRecord::Link($obj1,$obj2);
//echo "rel_name = ".$relation_name." - class = ".$class_obj." pos = ".strpos($relation_name,$class_obj)." obj1 = ".$obj1->id." - obj2 = ".$obj2->id."; ";

}
}

?>

最佳答案

有几点需要注意。首先也是最重要的,如果这是一个合法的硬约束,您不希望它被重复,请在数据库级别使用 UNIQUE 约束强制执行它。

其次,您不应该使用 mysql_query。使用mysqli。您也无法逃避您的输入,这是一个巨大的安全风险。将准备好的语句与 PDO 结合使用。说真的,现在就学习这个。不这样做是 Not Acceptable 。

您可以使用 mysqli_result 对象中的 num_rows 来确定受影响的行数。如果它是 0,并且没有任何错误,那么您可以安全地假设它已经存在并相应地输出您的错误消息。

最后,您的 SELECT 中缺少“FROM”。

希望这有帮助。

关于php - 停止 MVC php 上的重复数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com