如果用户名不存在,则写入文本文件

时间:2013-08-08 08:33:46

标签: php file

如果存在用户名,我在将注册表单写入.txt文件时遇到问题。目前,如果user.txt中存在用户名并打印出false并且不存在,我不想写出该文件,继续并写出user.txt文件。

<?php
    if($_POST['submit'])
    {
            $usernameexist =  $_POST['usernameexist'];
            $username = $_POST['username'];
            $password = $_POST['password'];
            $firstname = $_POST['firstname'];
            $lastname = $_POST['lastname'];
            $dob = $_POST['dob'];
            $gender = $_POST['gender'];
            $email = $_POST['email'];
            $address = $_POST['address'];
            $membership = $_POST['membership'];
            $creditcard = $_POST['creditcard'];
            $cardexpiry = $_POST['cardexpiry'];
            $duration = $_POST['duration'];
            $name = "/^[A-Za-z]+$/";
            $emailaddress = "/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/";



            $male_status = 'unchecked';
            $female_status = 'unchecked';

            // Server side form validation using php.
            // Validate username field if empty or not.
            if (empty($username)){
                    $err_username = 'Please enter your username.';
            }else{  

                    // Load file and check if username exist
                    $filename = 'user.txt';
                    if (file_exists($filename)){
                        $fp = fopen ('user.txt', 'r'); 
                        while ($line = fgetcsv($fp,100,",")) { 
                            if ( ($line[0] == $_POST['username']) ) { 
                                $usernameexist = "Username Exist!";
                                $err_usernameexist = $usernameexist;
                            } 
                        }
                        fclose ($fp);
                    }
                    else{
                        echo '<p> File does not exist! </p>';
                    }
                    //$val_username = $username;

            }

            // Validate password field if empty or not.
            if (empty($password)){
                $err_password = 'Please enter your password.';
            }else{
                $val_password = $password;
            }

            // First Name
            if (empty($firstname)){
                $err_firstname = 'Please enter your first name.';
            }else{
                $val_firstname = $firstname;
            }

            // Last Name
            if (empty($lastname)){
                $err_lastname = 'Please enter a valid last name.';
            }else{
                $val_lastname = $lastname;
            }

            // Gender
            if (isset($_POST['submit'])){
                $selected_radio = $_POST['gender'];
                if($selected_radio == 'Male') {
                    $male_status = 'checked';
                }else if ($selected_radio == 'Female'){
                    $female_status = 'checked';
                }
            }

            // Email Address
            if (!preg_match($emailaddress, $email)){
                $err_email = 'Please enter a valid email address.';
            }else{
                $val_email = $email;
            }

            if ($_POST['membership'] != 0){
                $err_membership = 'Nothing selected!';
            }else{
                $val_membership = $membership;
                }

            // Credit Card
            if (empty($creditcard)){
                $err_creditcard = 'Field is empty, please try again.';
            }else{
                $val_creditcard = $creditcard;
            }

            // Card Expiry
            if (empty($cardexpiry)){
                $err_cardexpiry = 'Field is empty, please try again.';
            }else{
                $val_cardexpiry = $cardexpiry;
            }

            // Duration
            if (empty($duration)){
                $err_duration = 'Field is empty, please try again.';
            }else{
                $val_duration = $duration;
            }

            if (!empty($username) && !empty($password) && !empty($firstname) 
                                && !empty($lastname) && preg_match($emailaddress, $email)
                                && ($_GET['membership'] != '0') && !empty($creditcard) && !empty($cardexpiry)
                                && !empty($duration)){
                $fp = fopen ('user.txt', 'r+'); 
                while ($line = fgetcsv($fp,100,",")){
                    if($line[0] == $_POST['username']){
                        $usernameexist = "Username Exist!";
                        $err_usernameexist = $usernameexist;
                        echo 'Username EXIST AND WRONG';
                    }
                    else{
                        $output_string = $username. ", "
                        .$password. ", "
                        .$firstname. ", "
                        .$lastname .", "
                        .$dob .", "
                        .$gender .", "
                        .$email .", "
                        .$address .", "
                        .$membership .", "
                        .$creditcard .", "
                        .$cardexpiry .", "
                        .$duration ."\n";

                        $fp = fopen ('user.txt', 'a');
                        fwrite ($fp, $output_string);
                        echo "<p> Your Registration was successful! </p>";
                    }
            }fclose($fp);
            }
            else{
                        echo 'Please re-check your field as field marked with "*" is required';
            }

    }

    ?>

任何帮助都非常感谢,请原谅我的问题,如果它看起来太令人困惑,因为我有点新鲜。

感谢。

1 个答案:

答案 0 :(得分:0)

请原谅明显的批评,但你的代码存在很多问题,如果我先指出一些不良做法,我认为这会有所帮助:

  1. 不要重新分配变量。只需将它们用作$ _POST ['what']将它们复制到其他内存密集型结构中没有任何优势。它混淆了而不是澄清你的代码。
  2. 请勿将信用卡详细信息存储在纯文本文件中。
  3. 您为什么使用自定义CSV数据结构?这就是数据库适用于XML的原因。
  4. 您测试用户名是否存在两次,无论是在正确的位置来解决问题。
  5. 您的回答:

    if (!empty($username) && !empty($password) && !empty($firstname) 
                                    && !empty($lastname) && preg_match($emailaddress, $email)
                                    && ($_GET['membership'] != '0') && !empty($creditcard) && !empty($cardexpiry)
                                    && !empty($duration)){
                    $fp = fopen ('user.txt', 'r+'); 
                    while ($line = fgetcsv($fp,100,",")){
                        if($line[0] == $_POST['username']){
                            $usernameexist = "Username Exist!";
                            $err_usernameexist = $usernameexist;
                            echo 'Username EXIST AND WRONG';
                        }
                        else{
                            $output_string = $username. ", "
                            etc...
    

    这里似乎是你的问题。这说的是:“如果数据错误,请检查用户名是否存在,如果存在,请说明,否则,如果数据正确,请将其发布到文件中。[但不要先测试用户名是否存在]

    基本上,您正在测试错误位置是否存在用户名。

    将用户名存在检查移动到else的另一侧。您甚至可以(冒险地)测试strlen($ err_usernameexist)&gt; 0,因为如果用户名存在,它将返回true。

    再一次,这是危险的代码,尽管它在CSV文件操作中形成一个有趣的练习,但它似乎不适合它的设计用于表观应用程序类型。如果用户在其数据中添加逗号,它也会中断。

    你可以通过创建一个不受引号影响的数组来正确使用fputcsv:

    myarray=array($name,$password,$encryptedcreditcard,$etcetc);
    fputcsv($fp,$myarray);
    

    但是,您应该将数据保存在mysql中,您至少可以在其中保存AES_ENCRYPT您的机密数据。 或者,有很多AES免费发布的AES类。 Mysql可以快速处理非常大的数据集,而你的数据集随着时间的推移变得越来越慢......