0

2 段階のサインアップ フォームがあります。最初のステップからメールとユーザー名を取得し、2 番目のステップから名と姓を取得して DB に追加します。POSTしかし、問題は、正確には、最初のフォームから取得した変数が、$bridge_username以下の IF ステートメント (下から 1 つ目) で使用できないことです。IF問題は、それらが他の場所に表示されることですが、この特定のステートメント内では表示されません。私はセッションを含むすべてを試しました。変数がまだそこにあることがはっきりとわかります (それを使用するvardumpか、それを単にechoing out するだけです)。

$bridge_email = $_POST['email'];
$bridge_username = $_POST['username'];
$bridge_pass = $_POST['password'];
$bridge_pass_conf = $_POST['passconf'];
$bridge_terms = $_POST['terms'];
$bridge_pass_counted = strlen($bridge_pass);
$bridge_username_counted = strlen($bridge_username);
if (isset ($_POST['email']) AND isset ($_POST['password']) AND isset ($_POST['passconf']) AND isset ($_POST['username'])) { 

if ($bridge_email != '' AND $bridge_pass != '' AND $bridge_pass_conf != '' AND $bridge_username != '' AND $bridge_terms != '') {

if ($bridge_pass == $bridge_pass_conf) {

if ($bridge_pass_counted >= 33 OR $bridge_pass_counted <= 5) {
} else {

if ($bridge_username_counted >= 65 OR $bridge_username_counted <= 3) {
} else {

if (is_numeric(substr($bridge_username, 0, 1))) {
                } else {
//CHECK IF USERNAME OR EMAIL ALREADY EXIST  
$checkreguser = $mysqli->query("SELECT username FROM `engine_users` WHERE username = '$bridge_username' OR email = '$bridge_email' LIMIT 0, 1 ");
$checkreguser = $checkreguser->fetch_assoc();
if ($checkreguser == '') {
//CREATING A NEW USER 
$mysqli->query("INSERT INTO `users` (`id`, `username`, `password`, `email`, `fname`, `lname`, `company`, `address`, `city`, `state`, `zip`, `country`, `currency`, `phone`, `vat`, `userlevel`, `created`, `notes`, `lastlogin`, `lastip`, `active`) VALUES\n"
    . "(NULL, '$bridge_username', '1411678a0b9e25ee2f7c8b2f7ac92b6a74b3f9c5', '$bridge_email', '', '', NULL, '', '', '', '', '', '', '', NULL, 5, '2011-05-01 18:10:14', '', '2013-04-19 22:25:11', '127.0.0.1', 'y')");
}}}}}}}

$bridge_fname = $_POST['1_1_3'];
$bridge_lname = $_POST['1_1_4'];
if (isset ($_POST['1_1_3']) AND isset ($_POST['1_1_4'])) {
$mysqli->query("UPDATE `users` SET `fname` = '$bridge_fname',`lname` = '$bridge_lname' WHERE `users`.`username` = '$bridge_username'");
}
4

4 に答える 4

0

セッションが開始されているかどうかを確認していますか。データがセッションに渡されたことに言及し続けているようです。これを設定して、確実に処理されるようにすることをお勧めします。

セッション変数が作成されていることを確認し、作成されていない場合は登録/ログイン ページにリダイレクトしてください。

例として...セッションが登録されていない場合、別のスクリプトまたは場所に移動します。

session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");

セッションの isset のコンテンツをエコーし​​てテストを続けることで、セッションをさらにテストできます。繰り返しますが、コードを最も基本的な形式に分解して、何が起こっているのかを学びます。何が起こっているかを確認するために、前のページ コードを確認する必要がある場合もあります。

あなたを助けるかもしれないオンラインの別の例を見つけました。http://www.phpeasystep.com/phptu/6.html

于 2013-04-20T06:32:23.080 に答える
0

使用する

if(isset($_POST['bridge_username']))

存在するかどうかを確認します。

三項演算子も使用できます。

$email = isset($_POST['bridge_username']) ? $_POST['bridge_username'] = false;

そして、あなたがた..「正確には、$bridge_username は、以下の IF ステートメントでは使用できません。」

より詳細な回答が必要な場合は、正確なエラーを表示してください:)

于 2013-04-20T05:16:14.050 に答える
0

良い例にするためにコードを少し修正しました。主な問題は、クエリ文字列を作成する方法でした

..." username = '$bridge_username' "

これにより、表示されているような文字列が得られます
(クエリを実行する前に、クエリを出力することをお勧めします)。次のように変更する必要があります。

." username = '".$bridge_username."' "

変数はその値に置き換えられます。

post 値のチェックも追加されたので、値が設定されていなくても警告は表示されません。

$bridge_email = (isset($_POST['email']) ? $_POST['email'] : null);
$bridge_username = (isset($_POST['username']) ? $_POST['username'] : null);
$bridge_pass = (isset($_POST['password']) ? $_POST['password'] : null);
$bridge_pass_conf = (isset($_POST['passconf']) ? $_POST['passconf'] : null);
$bridge_terms = (isset($_POST['terms']) ? $_POST['terms'] : null);
//$bridge_pass_counted = strlen($bridge_pass); 
//$bridge_username_counted = strlen($bridge_username);

//return early and stay back from chained IFs
if (!$bridge_email || !$bridge_username || !$bridge_pass || !$bridge_pass_conf) {
    return;
}

if ($bridge_pass != $bridge_pass_conf) {
    return;
}

if ($bridge_pass AND strlen($bridge_pass) > 5 AND strlen($bridge_pass) < 33) {
    return;
}

if ($bridge_username AND strlen($bridge_username) > 5 AND strlen($bridge_username) < 33) {
    return;
}

if (is_numeric(substr($bridge_username, 0, 1))) {
    return;
}

$result = $mysqli->query("SELECT username FROM `engine_users` WHERE username = '" . $bridge_username . "' OR email = '" . $bridge_email . "' LIMIT 0, 1 ");
$checkreguser = $result->fetch_assoc(); // returns associative array of strings  or NULL if there are no more rows 
//if ($checkreguser == '') {

if ($checkreguser === null) {
//CREATING A NEW USER 
    $mysqli->query("INSERT INTO `users` (`id`, `username`, `password`, `email`, `fname`, `lname`, `company`, `address`, `city`, `state`, `zip`, `country`, `currency`, `phone`, `vat`, `userlevel`, `created`, `notes`, `lastlogin`, `lastip`, `active`) VALUES\n"
            . "(NULL, '" . $bridge_username . "', '1411678a0b9e25ee2f7c8b2f7ac92b6a74b3f9c5', '" . $bridge_email . "', '', '', NULL, '', '', '', '', '', '', '', NULL, 5, '2011-05-01 18:10:14', '', '2013-04-19 22:25:11', '127.0.0.1', 'y')");
}

$bridge_fname =  (isset($_POST['1_1_3']) ? $_POST['1_1_3'] : null);
$bridge_lname =  (isset($_POST['1_1_4']) ? $_POST['1_1_4'] : null);
if ($bridge_fname AND $bridge_lname ) {
    $mysqli->query("UPDATE `users` SET `fname` = '" . $bridge_fname . "',`lname` = '" . $bridge_lname . "' WHERE `users`.`username` = '" . $bridge_username . "'");
}

IF 構造を調べてください。早期に戻るとコードが読みやすくなります。

于 2013-04-20T06:22:05.270 に答える
0

http://php.net/manual/en/function.isset.php

コードを単純な数行に分解して、if ステートメントをテストします。壊れている場所を特定することをお勧めします。おそらく、さまざまなステップまたはコメント中にいくつかのエコーステートメントを追加して、コードをステップスルーします。以下の例。

$bridge_email = $_POST['email'];
$bridge_pass = $_POST['password'];

if (isset($_POST['email']) AND isset($_POST['password']){
   // EXECUTE AN ALERT
echo"email and pass are set";
}else {
echo"not passing";
}
于 2013-04-20T05:32:52.967 に答える