我有一个PHP文件,检查通过$_POST给出的3个可能的单词是否已经在DB上创建。
如果这些单词存在于任何一个DB记录中,则返回一个错误。
如果这些词都不存在,则执行INSERT查询。
此代码正确检查3个给定的单词(如果给定)是否存在,如果存在,则正确回显错误。但如果这些都不存在,网站就会冻结,没有插入。
我怎么能要求PHP运行INSERT查询(什么是现在放在ELSE语句)在所有IF语句是假的情况下?
$ca_key1 = $_POST['ca_key1'];
$ca_key2 = $_POST['ca_key2'];
$ca_key3 = $_POST['ca_key3'];
if ($ca_key1!=="" || $ca_key2!=="" || $ca_key3!==""){
$selectKeys = mysqli_query($con, "SELECT ca_key1,ca_key2,ca_key3 FROM ws_campaigns WHERE ca_fk_us_id='$id'");
if ($ca_key1!==""){
while($registroKeys = mysqli_fetch_array($selectKeys)){
if ($registroKeys['ca_key1']===$ca_key1 || $registroKeys['ca_key2']===$ca_key1 || $registroKeys['ca_key3']===$ca_key1){
echo "No se ha creado la campaña. La palabra ".$ca_key1." ya está siendo utilizada en una campaña previa.";
}
}
}
else if ($ca_key2!==""){
while($registroKeys = mysqli_fetch_array($selectKeys)){
if ($registroKeys['ca_key1']===$ca_key2 || $registroKeys['ca_key2']===$ca_key2 || $registroKeys['ca_key3']===$ca_key2){
echo "No se ha creado la campaña. La palabra '".$ca_key2."' ya está siendo utilizada en una campaña previa.";
}
}
}
else if ($ca_key3!==""){
while($registroKeys = mysqli_fetch_array($selectKeys)){
if ($registroKeys['ca_key1']===$ca_key3 || $registroKeys['ca_key2']===$ca_key3 || $registroKeys['ca_key3']===$ca_key3){
echo "No se ha creado la campaña. La palabra '".$ca_key3."' ya está siendo utilizada en una campaña previa.";
}
}
}
else{
//DEVOLUCIÓN ID CAMPAÑA
if ($result = $con->query("INSERT INTO ws_campaigns (ca_id, ca_name, ca_content, ca_fk_us_id, ca_img, ca_prefix,ca_key1,ca_key2,ca_key3) VALUES ('','$ca_title', '$ca_content','$id','$ca_img','$ca_prefix','$ca_key1','$ca_key2','$ca_key3')")) {
echo $con->insert_id;
}
}
}
else{
//DEVOLUCIÓN ID CAMPAÑA
if ($result = $con->query("INSERT INTO ws_campaigns (ca_id, ca_name, ca_content, ca_fk_us_id, ca_img, ca_prefix,ca_key1,ca_key2,ca_key3) VALUES ('','$ca_title', '$ca_content','$id','$ca_img','$ca_prefix','$ca_key1','$ca_key2','$ca_key3')")) {
echo $con->insert_id;
}
}
我的建议是有另一个else if
作为检查
else if(empty($ca_key3) && empty($ca_key2) && empty($ca_key1))
{
}
要明确确保
检查执行查询时的结果:
$result = mysqli_query(...);
if (!$result) {
die('error: ' . mysql_error());
}
可能会失败,错误信息会告诉你原因。
最后,正如Fred -ii所说,解决这个问题的方法是创建一个INSERT查询,结合AND和OR,以便对数据库进行一次检查。
这个方法已经正确解决了这个问题:
if ($ca_key1!=="" || $ca_key2!=="" || $ca_key3!==""){
$selectKeys = mysqli_query($con, "SELECT ca_key1,ca_key2,ca_key3 FROM ws_campaigns WHERE ca_fk_us_id='$id' AND ("
. " (ca_key1!='' AND ca_key1='$ca_key1') OR (ca_key2!='' AND ca_key2='$ca_key1') OR (ca_key3!='' AND ca_key3='$ca_key1') "
. "OR (ca_key1!='' AND ca_key1='$ca_key2') OR (ca_key2!='' AND ca_key2='$ca_key2') OR (ca_key3!='' AND ca_key3='$ca_key2')"
. "OR (ca_key1!='' AND ca_key1='$ca_key3') OR (ca_key2!='' AND ca_key2='$ca_key3') OR (ca_key3!='' AND ca_key3='$ca_key3'))");
if (mysqli_num_rows($selectKeys) === 0){
if ($result = $con->query("INSERT INTO ws_campaigns (ca_id, ca_name, ca_content, ca_fk_us_id, ca_img, ca_prefix,ca_key1,ca_key2,ca_key3) VALUES ('','$ca_title', '$ca_content','$id','$ca_img','$ca_prefix','$ca_key1','$ca_key2','$ca_key3')")) {
echo $con->insert_id;
}
}
else{
echo "No se ha creado la campaña. <br>Alguna de las palabras clave utilizadas ya están presentes en una campaña anterior.";
}
}else{
//DEVOLUCIÓN ID CAMPAÑA
if ($result = $con->query("INSERT INTO ws_campaigns (ca_id, ca_name, ca_content, ca_fk_us_id, ca_img, ca_prefix,ca_key1,ca_key2,ca_key3) VALUES ('','$ca_title', '$ca_content','$id','$ca_img','$ca_prefix','$ca_key1','$ca_key2','$ca_key3')")) {
echo $con->insert_id;
}
}