我正在寻找可以帮助我入门的所有或任何信息。我对如何让球滚动感到困惑。我的 register.php 页面中应该有哪些代码?如果有的话,什么 php 代码应该与我的 html 表单元素在同一页面上。
形式:
<form id='register' action='register.php' onsubmit="return validateForm()" method='post' accept-charset='UTF-8'>
<fieldset>
<legend><br/>Create An Account</legend><br/>
<input type='hidden' name='submitted' id='submitted' value='1'/>
<label for='username' >Username*: </label>
<input type='text' name='username' id='username' maxlength="50" /><br/><br/>
<label for='email' >Email Address*:</label>
<input type='text' name='email' id='email' maxlength="50" /><br/><br/>
<label for="password">Password*:</label>
<input type="password" name="password" placeholder="password" required><br/><br/>
<label for="password">Confirm Password*:</label>
<input type="password" name="password" placeholder="password" required><br/><br/>
<label for='cpassword' >‌</label>
<input type="hidden" name="submitted" value="TRUE"><input type='submit' name='rsubmit' id="rsubmit" value='Register' />
</fieldset>
</form>
这是我的 php 类:
// Most objects in this framework are populated by calling the constructor, but
// this one has a variety of entry points. They don't do any sanity checking
// with eachother, so you can have $user->create and $user->register refer to
// completely different rows.
class Shopper extends Base {
protected $shopper_id;
protected $email;
protected $user_name;
protected $temp_token;
protected $sign_in_token;
protected $UserShoppingList;
function __construct($email = null) {
// For testing use only. Declined to wrap in this_is_dev because I
// foresee using it somewhere in the code, pushing live, and being
// parent::__construct('jfw_shoppers', array('SHOPPER_ID' => $shopper_id));
// Allow them to pass an e-mail address or the token
if (strpos($email, '@') === false) {
$this->sign_in_token = $email;
} else {
$this->email = $email;
}
}
// todo: need a new function to do the actual activation.
public function activate($temp_token) {
global $db;
$this->set_temp_token($temp_token);
$vars = array();
$vars[] = array(':i_temp_token', $this->get_temp_token());
// Returns a Y or N
return $db->get_function_as_proc('custom.japi_shopper_identity.Activate_User(:i_temp_token)', $vars) == 'Y';
}
public function create($password) {
global $db;
if (!$this->get_email() || !$this->get_username()) {
return false;
}
$vars = array();
$vars[] = array(':email', $this->get_email());
$vars[] = array(':username', $this->get_username());
$vars[] = array(':password', $password);
$id = $db->get_function_as_proc('custom.japi_shopper_identity.create_user(:email, :username, :password)', $vars);
$this->set_id($id);
// If it failed, it'll puke on the procedure. If we've come this far, we
// know it worked.
return true;
}
public function get_email() {
return $this->email;
}
private function get_id() {
if (isset($this->shopper_id)) {
return $this->shopper_id;
// If this object has an e-mail address or the user sent one
} else if ($this->get_email()) {
global $db;
$vars = array();
$vars[] = array(':i_email_id', $this->get_email());
// FUNCTION get_id_by_email(i_email_id IN jfw_shoppers.email%TYPE)
$id = array_pop(array_pop($db->get_function('custom.japi_shopper_identity.get_id_by_email(:i_email_id)', $vars)));
$this->set_id($id);
$this->shopper_id = $id;
return $this->shopper_id;
// Can also get from token
} else if ($this->get_sign_in_token()) {
// todo: call get_id_by_token
return false;
}
}
// todo: test
public function get_lists($clobber = false) {
global $pd;
// $pd->print_object($this, 'User - has token?');
// $pd->print_object($this->get_sign_in_token(), 'Token');
if ($this->UserShoppingList != null && !$clobber) {
return $this->UserShoppingList;
} else if ($this->get_sign_in_token()) {
global $db;
$pd->print_object($this, 'User - has token?');
$pd->print_object(strtolower($this->get_sign_in_token()), 'token?');
$vars = array();
$vars[] = array(':i_sign_in_token', strtolower($this->get_sign_in_token()));
$pd->print_object($this->get_sign_in_token(), 'About to seek lists using token');
$rows = $db->get_function('custom.japi_shopper_identity.get_lists_for_shopper(:i_sign_in_token)', $vars);
$pd->print_object($rows, 'Rows returned by get_lists using token '.$this->get_sign_in_token());
// Turn the rows into objects
$this->UserShoppingList = array_to_objects($rows, 'UserShoppingList');
return $this->UserShoppingList;
} else {
return false;
}
}
public function get_sign_in_token() {
if ($this->sign_in_token != null) {
return $this->sign_in_token;
} else {
return false;
}
}
public function get_temp_token() {
if ($this->temp_token != null) {
return $this->temp_token;
} else {
return false;
}
}
public function get_username() {
return $this->user_name;
}
public function json($obj = null, $return_json = false) {
if ($obj == null) {
$obj = $this;
}
return parent::json($obj, $return_json);
}
// Most objects in this framework are populated by calling the constructor,
// but the only way to populate this one is to call this function with good
// credentials.
public function login($password) {
global $db;
if (!$this->get_email()) {
return false;
}
// Log them in now that we know who they are.
$vars = array();
$vars[] = array(':i_email_id', $this->get_email());
$vars[] = array(':i_password', $password);
// This also exists, but is not yet in use:
// $token = $db->get_function_as_proc('custom.japi_shopper_identity.login_by_username(:i_username, :i_password)', $vars);
$token = $db->get_function_as_proc('custom.japi_shopper_identity.Login_by_Email(:i_email_id, :i_password)', $vars);
// todo: what if it's bad credentials?
if ($token == null) {
return false;
} else {
$this->set_sign_in_token($token);
return $this->get_sign_in_token();
}
}
public function password_reset($tmp_token, $password) {
global $db;
if (strlen($password) < 8) {
return false;
}
$vars = array();
$vars[] = array(':temp_token', $tmp_token);
$vars[] = array(':new_password', $password);
return $db->get_function_as_proc('custom.japi_shopper_identity.password_reset(:temp_token, :new_password)', $vars) == 'Y';
}
public function request_activation() {
global $db;
$vars = array();
$vars[] = array(':i_shopper_id', $this->get_id());
// Returns a temp token
$temp_token = $db->get_function_as_proc('custom.japi_shopper_identity.activate_user_request(:i_shopper_id)', $vars);
if ($temp_token == null) {
return false;
} else {
$this->send_activation_email();
return $temp_token;
}
}
public function request_password_reset() {
global $db, $pd;
if (!$this->get_id()) {
return false;
}
$vars = array();
$vars[] = array(':shopper_id', $this->get_id());
$temp_token = $db->get_function_as_proc('custom.japi_shopper_identity.password_reset_request(:shopper_id)', $vars);
if ($temp_token == null) {
return false;
} else {
$this->set_temp_token($temp_token);
$pd->print_object('About to send the e-mail');
$this->send_password_email();
$pd->print_object('Sent the email');
return $this->get_temp_token();
}
}
private function send_activation_email() {
if (!$this->get_email() || !$this->get_temp_token()) {
return false;
}
$fancy = '
<div style="text-align: center;"><img src="logo.jpg" /></div>
<h2>Welcome to com!</h2>
<p>To complete your registration, <a href="todo: ">click here</a> or copy and paste the URL into your browser:</p>
URL?token='.$this->get_temp_token().'
Thanks!
';
$plain = 'Welcome to com!
To complete your registration, please activate your account by going to the URL below:
URL?token='.$this->get_temp_token().'
Thanks!
';
// todo: subject could probably be better
return email_customer($this->get_email(), 'Welcome to com!', $fancy, $plain);
}
private function send_password_email() {
global $pd;
$pd->print_object('In send_password_email');
$pd->print_object($this->get_email(), 'E-mail');
$pd->print_object($this->get_temp_token(), 'Token');
if (!$this->get_email() || !$this->get_temp_token()) {
return false;
}
$pd->print_object($this->get_email(), 'Have all the data I need');
$fancy = '
<div style="text-align: center;"><img src="logo.jpg" /></div>
<h2>Welcome to com!</h2>
<p>To reset your password, <a href="todo: ">click here</a> or copy and paste the URL into your browser:</p>
<p>URL?token='.$this->get_temp_token().'</p>
<p>Thanks!</p>
';
$plain = 'Welcome to com!
To reset your password by going to the URL below:
URL?token='.$this->get_temp_token().'
Thanks!
';
$pd->print_object('About to actually e-mail');
return email_customer($this->get_email(), "Reset your com password", $fancy, $plain);
}
public function set_email($email) {
return $this->email = $email;
}
public function set_id($email) {
return $this->shopper_id;
}
public function set_sign_in_token($token) {
return $this->sign_in_token = $token;
}
public function set_temp_token($token) {
return $this->temp_token = $token;
}
public function set_username($username) {
return $this->user_name = $username;
}
}