0

Setting the "method" attribute of form fixed this for me, everything is submitting to the database fine, now, I have a similar problem with my validating credentials but maybe it has the same root as this problem since I forgot about method in the first place, thank you all very much.

I have a problem while attempting to learn CodeIgniter and general MVC principles.

I have a sign up form view

<div class="container">
<form class="form-horizontal" style="width:500px;" action="sign_up">
<fieldset>

<!-- Form Name -->
<legend>Sign Up</legend>

<!-- Text input-->
<div class="control-group">
  <label class="control-label" for="username">Username</label>
  <div class="controls">
    <input id="username" name="username" placeholder="Username" class="input-xlarge" required="" type="text">
    <p class="help-block">Your username</p>
  </div>
</div>

<!-- Text input-->
<div class="control-group">
  <label class="control-label" for="email_address">Email</label>
  <div class="controls">
    <input id="email_address" name="email_address" placeholder="Email address " class="input-xlarge" required="" type="text">
    <p class="help-block">Enter your email address</p>
  </div>
</div>

<!-- Text input-->
<div class="control-group">
  <label class="control-label" for="first_name">First Name</label>
  <div class="controls">
    <input id="first_name" name="first_name" placeholder="First name" class="input-xlarge" required="" type="text">
    <p class="help-block">Enter your first name</p>
  </div>
</div>

<!-- Text input-->
<div class="control-group">
  <label class="control-label" for="last_name">Last Name</label>
  <div class="controls">
    <input id="last_name" name="last_name" placeholder="Last name" class="input-xlarge" type="text">
    <p class="help-block">help</p>
  </div>
</div>

<!-- Password input-->
<div class="control-group">
  <label class="control-label" for="password">Password Input</label>
  <div class="controls">
    <input id="password" name="password" placeholder="Password" class="input-xlarge" required="" type="password">
    <p class="help-block">help</p>
  </div>
</div>

<div class="control-group">
  <label class="control-label" for="password">Password Confirmation</label>
  <div class="controls">
    <input id="password2" name="password2" placeholder="Password" class="input-xlarge" required="" type="password">
    <p class="help-block">help</p>
  </div>
</div>

<!-- Button -->
<div class="control-group">
  <label class="control-label" for="singlebutton"></label>
  <div class="controls">
    <button class="btn btn-success" onclick="submit" >Sign Up</button>
  </div>
</div>

</fieldset>
</form>
</div>

Which submits to (user/)sign_up

public function sign_up() {

     $this->load->model('login_model');
        if($query = $this->login_model->create_member()){
            $data['main_content'] = 'user_login_view';
            $this->load->view('template', $data);
            }

    }

And passes to the model function "create_member"

function create_member()
    {
        $newdata = array(
            'user_name' => $this->input->post('username'),
            'password' => md5($this->input->post('password')),
            'email' => $this->input->post('email_address'),
            'first_name' => $this->input->post('first_name'),
            'last_name' => $this->input->post('last_name') 
            );

        $insert = $this->db->insert('users', $newdata);
        return $insert;
    }

I believe I have the correct table set up and I am following the MVC principle.

id  int(11)         
user_name   varchar(25)         
password    varchar(32)         
email   varchar(50)         
first_name  varchar(32)         
last_name   varchar(32)

My problem is the password is the only value that is passing over into the database for the rest it simply submits 0, any suggestions or obvious mistakes to point out?

ID      user_name   password                        email first_name last_name
20      0       d41d8cd98f00b204e9800998ecf8427e    0   0   0

Thank you

9
  • Are you using ajax form submission? Try without md5() function and check the password value. Is it also value 0 for password? Commented Jan 31, 2014 at 20:36
  • have you checked in your console if you are really submitting the form. Open the console and check it. Commented Jan 31, 2014 at 20:40
  • 1
    @Pheonix2105 are you using ajax form submission? If not why you don't have your action and method attributes. Commented Jan 31, 2014 at 20:58
  • 1
    form_open should always be used! Using form_open function also prevent csrf attacks. Commented Jan 31, 2014 at 21:01
  • 2
    @RahilWazir only prevents CSRF attacks if you have $config['csrf_protection'] = TRUE; in config.php Commented Jan 31, 2014 at 21:03

2 Answers 2

1

I would suggest you change your form open tag to explicitly call the controller, and you need to include a method="post" attribute to get the form to post. E.g.

<form class="form-horizontal" style="width:500px;" action="/user/sign_up" method="post">

If you wanted to use CI's form helper, you could use the following:

$attributes = array('class' => 'form-horizontal', 'style' => 'width:500px;');

echo form_open('user/sign_up', $attributes);
Sign up to request clarification or add additional context in comments.

Comments

1

Var_dump on your post variables, you not getting any post variables and the only reason you think you are getting the password is because you running md5 on an empty string.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.