Php 如何在插入表之前验证变量是否存在?

Php 如何在插入表之前验证变量是否存在?,php,mysqli,Php,Mysqli,如何验证$projectname是否存在,并防止它插入一个弹出窗口,该窗口指示此项目已存在错误?我还想防止任何空插入 请帮忙 $con=mysqli_connect("127.0.0.1", "root", "password","agent"); $idq="SELECT id_project, projectname FROM project, agentsInfo WHERE (agentsInfo.idagency = project.id_agent) AND email = '$_

如何验证$projectname是否存在,并防止它插入一个弹出窗口,该窗口指示此项目已存在错误?我还想防止任何空插入

请帮忙

$con=mysqli_connect("127.0.0.1", "root", "password","agent");

$idq="SELECT id_project, projectname FROM project, agentsInfo
WHERE (agentsInfo.idagency = project.id_agent) AND email = '$_SESSION[email]'" or   die(mysql_error());


$result= mysqli_query($con, $idq);

$row_number = 1;

while ($row = $result->fetch_assoc()){

$id_agent= $row["id_agentid_agent"];
$id_project= $row["id_project"];
$projectname= $row["projectname"];


$id_project++;

$row_number++;


}

if (isset($_POST['submit'])) {

if ($projectname != $_POST['projectname']) {




$sql = "INSERT INTO project (id_project, projectname, id_agent)
VALUES ( ?,?, ( select idagency FROM agentsInfo WHERE email = ?))
ON DUPLICATE KEY UPDATE  //this is unnecessary, how do i replace this? 
`id_agent` = VALUES(`id_agent`),
`projectname` = VALUES(`projectname`)
";

if (($stmt = $con->prepare($sql)) === false) {
trigger_error($con->error, E_USER_ERROR);
}

$result= mysqli_query($con, $idq);

$row_number = 1;

while ($row = mysqli_fetch_array($result)) {

$id_project= $row["id_project"];

$id_project++;

}

if ($stmt->bind_param("sss",
$id_project,
$_POST["projectname"],
$_SESSION["email"]) === false) {
trigger_error($stmt->error, E_USER_ERROR);

}


if (($stmt->execute()) === false) {
trigger_error($stmt->error, E_USER_ERROR);
}

} else {

//DUPLICATE FOUND

echo "<script type='text/jscript'>alert('This project already exists.')</script>";

}

}

?>

只需在body的onload事件中添加对doesexist的调用。如果不存在任何项目,则只返回,如果返回,则会发出警报。我还没有测试过这段代码,因此可能存在语法问题,但这个概念是合理的。

一种方法是,由于项目名称应该是唯一的,所以为该列添加一个唯一索引。然后,每当插入新记录失败时,请检查错误,并确定它是否因唯一约束而失败,并采取相应的措施。谢谢,但我无法实现此操作,因为其他用户可能使用相同的项目名称。我设法添加了if$projectname!=$_POST['projectname']{它可以工作,但只适用于最后一个$u POST[projectname]已提交。我需要它遍历整个表并搜索重复项。我猜您的意思是希望允许两个不同的用户使用相同的名称创建一个项目。在这种情况下,您只需调整查询以同时检查用户id。因此,查询看起来像是选择count*as quaty from project where projectname='。$pro假设userid是标识用户的数据库元素,$userid是具有用户id的php变量,则userid=..userid。
$con=mysqli_connect("127.0.0.1", "root", "password","agent");
// New code
$query="Select count(*) as qty from project where projectname='".$projectname."'";
$result=mysqli_query($query);
$row=mysqli_fetch_array($query);
echo '<SCRIPT type="text/javascript">function doesexist() {';
if($row['qty']>0)
 {
 echo "alert('This project already exists!');";
 }
echo "return();\n}</SCRIPT";
// End of new code
$idq="SELECT id_project, projectname FROM project, agentsInfo
WHERE (agentsInfo.idagency = project.id_agent) AND email = '$_SESSION[email]'" or   die(mysql_error());