2015-06-10 2 views
-1

Я был на это в течение нескольких часов, вот мой код, и его предполагается зарегистрировать пользователя, чтобы позднее они могли войти в приложение. Код работает отлично на всех углах, но, один я регистрирую пользователя, он не позволит мне зарегистрировать второго пользователя. Может ли кто-нибудь помочь мне, если возможно, найти причину?MySQL только регистрирует первого пользователя

<?php 
header('Access-Control-Allow-Origin: *'); 
header("Cache-Control: cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 2097 05:00:00 GMT"); // Date in the future 

function getConnection() { 
    $dbhost="localhost"; 
    $dbuser="root"; 
    $dbpass=""; 
    $dbname="cybank"; 
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    return $dbh; 
} 

    try { 
     $conn = getConnection(); 

     // Account Number Login 
     $aclenth  = 8; 
     $accountNumber = substr(str_shuffle(md5(time())), 0, $aclenth); 
     $accountNumber = 'CYB-' . strtoupper($accountNumber); 

     //Pin Logic 
     $regpin = rand (1111 , 9999); 

     //Reg date logic 
     $regdate = date('Y-m-d'); 

     $account_id = $accountNumber; 
     $device_uuid = $_POST['reguuid']; 
     $name_first = $_POST['regfname']; 
     $name_last = $_POST['reglname']; 
     $gender = $_POST['reggender']; 
     $username = $_POST['regusername']; 
     $password = $_POST['regpassword']; 
     $pin = $regpin; 
     $email = $_POST['regemail']; 
     $do_birth = $_POST['regdob']; 
     $do_reg = $regdate; 
     $address_1 = $_POST['regaddress']; 
     $city = $_POST['regcity']; 
     $country = $_POST['regcountry']; 
     $phone_home = $_POST['regphonehome']; 
     $phone_mobile = $_POST['regphonemobile']; 
     $last_login_date = ''; 
     $account_status = 'Active'; 
     $emailVerified = '0'; 

     $cost = 10; 
     $salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.'); 
     $salt = sprintf("$2a$%02d$", $cost) . $salt; 
     $hash = crypt($password, $salt); 

     // Create token to verify with 
     $tokenVerify = bin2hex(openssl_random_pseudo_bytes(16)); 

     // set the PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "INSERT INTO cy_user_accounts (account_id,device_uuid,name_first,name_last,gender,username,password,pin,email,do_birth,do_reg,address_1,city,country,phone_home,phone_mobile,last_login_date,account_status,emailVerified,tokenClient,tokenAdmin,tokenExpires,tokenVerify) VALUES ('$account_id','$device_uuid','$name_first','$name_last','$gender','$username','$hash','$pin','$email','$do_birth','$do_reg','$address_1','$city','$country','$phone_home','$phone_mobile','$last_login_date','$account_status','$emailVerified','','','','$tokenVerify')"; 

     $conn->exec($sql); 

    } catch (PDOException $e) { 
     echo $sql . "<br>" . $e->getMessage(); 
    } 

    $conn = null; 

?> 

Вот таблица Mysql в вопросе:

  CREATE TABLE IF NOT EXISTS `cy_user_accounts` (
      `id` int(11) NOT NULL, 
       `account_id` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `device_uuid` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `name_first` varchar(150) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `name_last` varchar(150) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `gender` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `username` varchar(255) NOT NULL, 
       `password` varchar(255) NOT NULL, 
       `pin` int(10) NOT NULL, 
       `email` varchar(250) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `do_birth` date NOT NULL, 
       `do_reg` date NOT NULL, 
       `address_1` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `city` varchar(150) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `country` varchar(65) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `phone_home` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `phone_mobile` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, 
       `last_login_date` datetime NOT NULL, 
       `account_status` varchar(100) NOT NULL, 
       `emailVerified` int(11) NOT NULL, 
       `tokenClient` varchar(255) NOT NULL, 
       `tokenAdmin` varchar(255) NOT NULL, 
       `tokenExpires` date NOT NULL, 
       `tokenVerify` varchar(255) NOT NULL 
      ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;  
+0

Можете ли вы уточнить, что «это не позволит мне зарегистрировать второго пользователя»? Вы не поняли ошибку? – Mureinik

+3

вы не назначили ИИ для своего столбца id, так что auto_increment нечего. –

+0

... вам нужно будет изменить этот столбец https://dev.mysql.com/doc/refman/5.1/en/alter-table.html –

ответ

0

Это должно быть комментарий, но его немного долго ....

header("Cache-Control: cache, must-revalidate"); // HTTP/1.1 

Должно быть ....

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 

И ...

$sql = "INSERT INTO cy_user_accounts 
(account_id,device_uuid,name_first,name_last,gender, 
username,password,pin,email,do_birth,do_reg, 
address_1,city,country,phone_home,phone_mobile,last_login_date, 
account_status,emailVerified,tokenClient,tokenAdmin, 
tokenExpires,tokenVerify) 
VALUES 
('$account_id','$device_uuid','$name_first','$name_last','$gender', 
'$username','$hash','$pin','$email','$do_birth','$do_reg', 
'$address_1','$city','$country','$phone_home','$phone_mobile','$last_login_date', 
'$account_status','$emailVerified','','','','$tokenVerify')"; 

Замечательно - вам удалось написать сценарий с pdo, который уязвим для SQL-инъекции.

$accountNumber = substr(str_shuffle(md5(time())), 0, $aclenth); 
    $accountNumber = 'CYB-' . strtoupper($accountNumber); 

Это действительно ужасный бит кода.

В вашем столе нет первичного ключа, и дизайн выглядит глупо и многими другими способами. Возможно, вы захотите ознакомиться с дизайном базы данных.

Было бы полезно, если бы вы объяснили , почему вы не можете зарегистрировать второго пользователя. Вы должны опросить ошибку pdo. Подсказка: вы сказали, что идентификатор не должен быть нулевым, но вы не устанавливаете значение в вставке.

До тех пор, пока у вас не будет программирования, попробуйте работать с гораздо более простыми структурами/функциональностью и добавить функцию во время тестирования.

+0

Я ценю, но суров, но я ценю – Miley

+0

* «Было бы полезно, если бы вы объяснили, почему вы не можете зарегистрировать второго пользователя». * - На самом деле, [это причина] (http://stackoverflow.com/ вопросы/30768670/MySQL-только-регистрации-на-первых, пользователь # comment49589435_30768670). –

Смежные вопросы