PHP重定向基于此错误

时间:2015-05-14 18:20:11

标签: php mysql

(请耐心等待。)如果产生此错误,我想重定向到某个页面。如果数据库中存在重复条目(即,如果在提交给db后出现问题,但用户重新提交页面。)

  

错误:INSERT INTO di_ssenisub(timestamp,business_name,business_type,username,main_email,password)VALUES(NOW(),' 123',' Hotel',' 123& #39;,' jkljllk@mrmd.com',' $ 2y $ 10 $ gYxXbmHKNmqrEHhB2qOw8uVVs7HNOmdN4oTpv8m98.lN / 3R6MwseG')重复输入' 123'关键'PRIMARY'

我的代码目前设置在其他地方:

else {
   echo "Error: " . $insertSQL . "<br>" . mysqli_error($link);
}

我想要做的是将它们重定向到登录/错误页面,这样他们就可以登录并从管理面板完成注册。

有什么想法?感谢。

 $insertSQL = sprintf("INSERT INTO di_ssenisub (timestamp,
         business_name,
         business_type,
         username,
         main_email,
         password) 

         VALUES (NOW(), %s, %s, %s, %s, %s)",
        GetSQLValueString($business_name, "text"), 
        GetSQLValueString($business_type, "text"), 
        GetSQLValueString($_POST['username_entry'], "text"), 
        GetSQLValueString($main_email, "text"), 
        GetSQLValueString($hashPass, "text"));

        if (mysqli_query($link, $insertSQL)) {
            session_start();
            $_SESSION['username'] = $username_check;
            $_SESSION['business_name'] = $business_name;
            $_SESSION['business_type'] = $business_type;
            header('Location: ../../register/' .$business_type_link);

        }

        "UPDATE $table_name SET

        business_name='$business_name',
        business_type='$business_type',
        username=$username_entry,
        main_email='$main_email',
        password = '$hashPass'


        WHERE id='$user_id' LIMIT 1");  

        mysqli_close($link);

2 个答案:

答案 0 :(得分:0)

更新

 $insertSQL = sprintf("INSERT INTO di_ssenisub (timestamp,
         business_name,
         business_type,
         username,
         main_email,
         password) 

         VALUES (NOW(), %s, %s, %s, %s, %s)",
        GetSQLValueString($business_name, "text"), 
        GetSQLValueString($business_type, "text"), 
        GetSQLValueString($_POST['username_entry'], "text"), 
        GetSQLValueString($main_email, "text"), 
        GetSQLValueString($hashPass, "text"));

$affected += mysqli_rows_affected($link);
$insert_error = mysqli_errorno($link);

        "UPDATE $table_name SET

        business_name='$business_name',
        business_type='$business_type',
        username=$username_entry,
        main_email='$main_email',
        password = '$hashPass'
        WHERE id='$user_id' LIMIT 1");  

$affected += mysqli_rows_affected($link);
$insert_error = mysqli_errorno($link);

            session_start();
            $_SESSION['username'] = $username_check;
            $_SESSION['business_name'] = $business_name;
            $_SESSION['business_type'] = $business_type;

        }
        mysqli_close($link);

INSERT和UPDATE之后,检查数据是否有问题。

让用户受宠,不要拒绝他们的用户名。允许重复的用户名。

如果您想使用唯一的用户名并强制用户提供一个唯一的名称,请添加一些分析,以查看有多少人放弃您的网站而不是继续注册。

如果必须像stackoverflow那样使用唯一的用户名,那么请输入用户名和屏幕名称。 stackoverflow使用电子邮件登录。

if ($affected == 0){

  // do error detection / correction here
  // create warnings

  include('form.php');
  exit

}
else{
  include('next_page.php');
}

更新结束

您不想重定向

使用包含,并重新填充INPUTS。

要消除重复,首先执行INSERT并立即执行INSERT并使用UPDATE。

INSERT INTO di_ssenisub (timestamp, business_name, business_type, username, main_email, password) 

无需检查错误,只需执行更新即可。记录存在时非常快。

UPDATE `di_ssenisub` SET `business_name` = '123', `business_type`,...
WHERE `username` = '123';

WHERE术语使用PRIMARY索引中的列。其余的进入SET。

如果要在发现问题时验证值,请不要执行重定向(`标题(“位置:”)

您希望将发现的问题传递给用户。

假设您发现无效电子邮件等问题:

$ warn_email ='*“;

包括( 'form.php的'); 出口;

在form.php中

$warn_email<inpupt name="email" 

重新填充INPUTS

您有提交的数据:

$timestamp = $_POST['timestamp'];
$business_name = $_POST['business_name'];
$business_type = $_POST['business_type'];
$username = $_POST['username'];
$main_email = $_POST['main_email'];

使用include,这些值将自动传递给表单。

 <input type="text" name="business_name" value="$business_name" />
 <input type="text" name="business_type" value="$business_type" />
 <input type="text" name="username" value="$username" />
 <input type="text" name="main_email" value="$main_email" />

如果他们进入Fresh,则变量为空,您在HTML中获得value=""

如果要检查INSERT和OR UPDATE错误,请执行以下操作:

$affected = 0;

INSERT ...

$affected += mysqli_rows_affected($link);

UPDATE ...

$affected += mysqli_rows_affected($link);

if ($affected == 0){echo 'Houston we have a problem';}

答案 1 :(得分:0)

您想知道什么,如何检测错误或如何重定向?如果你想重定向到另一个页面,那么holpducki的回答是正确的:

header("Location:http://www.example.com/login.php");
exit;

如果您尝试检测错误,则可以使用mysql_errno()mysql_error() PHP函数:

http://php.net/manual/en/function.mysql-error.php

http://php.net/manual/en/function.mysql-errno.php

例如:

if (mysql_errno($resource) == 1092) {
    header("Location:http://www.example.com/login.php");  // send to login
    exit;
} else {
    ...
}

可以在此处找到MySQL错误编号列表:

http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html

在这里:

http://dev.mysql.com/doc/refman/5.6/en/error-messages-client.html