2014-01-15 2 views
0

Прежде всего позвольте мне сказать, что я в первую очередь разработчик iOS, который только недавно изучает захватывающие приключения полной разработки стека. Я новичок в PHP и MySQL. Сказав, что у меня есть проблема, которая, я надеюсь, требует прямого решения.

Я создаю новый api для клиента, у которого есть существующая база данных, где они хотят использовать адрес электронной почты и пароль для аутентификации пользователей.

Мой код:

Клиент: Я начинаю проводкой адрес электронной почты и пароль из формы в PHP скрипт. Я проверял, что сообщение происходит, как ожидалось, т. Е. Я получаю адрес электронной почты и пароль, введенные пользователем. (по моему вопросу, релевантно только электронная почта.) Я не хочу обсуждать «шифровать ваши пароли». Это не мой вопрос.

Сервер: (для чего это стоит, это использует структуру CodeIgniter)

public function authenticateUser() 
{ 
    $user = $_POST['user']; 
    $password = $_POST['password']; 

    $this->load->model('user_model'); 
    // for testing purposes, I'm just trying to echo the email address. 
    echo $this->user_model->authenticateUser('user', $user, $password); 
} 

Функция authenticateUser из user_model:

public function authenticateUser($table, $email, $password) 
    { 
     $sql = "SELECT email FROM " . $table . " WHERE email = " . "$email"; 
     $query = $this->db->query($sql); 
     $row = $query->row(); // this is the line referenced in the error. 

     return $row->email; 
    } 

Для ясности я называю параметр $ пользователю до он передается authenticateUser, а затем я называю его $ email. Очевидно, это не имеет значения.

Здесь ошибка, которая генерируется:

Fatal error: Call to a member function row() on a non-object in /path/to/core/MY_Model.php on line 76 



76 || $row = $query->row(); 

электронной почты хранится в электронной базе данных столбца в таблице пользователей, как VARCHAR (100).

Если я запрашиваю другие критерии, такие как userId, я могу получить доступ к адресу электронной почты только отлично, но я не могу использовать адрес электронной почты в качестве критериев поиска для моего запроса. (извините, если я не могу использовать надлежащую номенклатуру.)

Есть ли что-то дополнительное, что связано с адресом электронной почты, чтобы использовать его как способ аутентификации пользователя? Неужели я все это делаю неправильно? Любая помощь будет принята с благодарностью.

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

Update

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

$sql = "SELECT email FROM " . $table . " WHERE email = '".$email."'"; 

Благодарим вас так много за быстрые, сердечные ответы!:)

заявление
+0

, где должно быть условие WHERE email = '". $ Email."'; –

+0

@Rikesh. Нет. Мы можем использовать строку напрямую. Проверка Pls http://ellislab.com/codeigniter/user-guide/database/ results.html –

ответ

0

изменение SQL в модели:

$sql = "SELECT email FROM " . $table . " WHERE email = '" . $email."'"; 
0

Изменить Ваш SQL-запрос в функции модели для:

$sql = "SELECT email FROM '".$table."" WHERE email = '".$email."'"; 
0

Попробуйте это,

$sql = "SELECT email FROM " . $table . " WHERE email = '$email' "; 

вместо

$sql = "SELECT email FROM " . $table . " WHERE email = " . "$email"; 
0

ошибка близка к $ email.ie не правильно written.Rewrite код

public function authenticateUser($table, $email, $password) 
    { 
     $sql = "SELECT email FROM " . $table . " WHERE email = '".$email."'"; 
     $query = $this->db->query($sql); 
     $row = $query->row(); // this is the line referenced in the error. 

     return $row->email; 
    } 

Вы можете использовать активные записи. Этот метод легко понять и не имеет сложной структуры.

0

почему бы вам не использовать Active Record

$this->db->select('email'); 
$this->db->from($table); 
$this->db->where('email',$email); 

$query = $this->db->get(); 

if ($query->num_rows() > 0) 
{ 
    $result = $query->row(); 
    return $result->email; 
} 

return false; 
+1

Я пошел с простой фиксацией синтаксиса из-за ограничений по времени. Тем не менее, я попробую ваше решение во время моего следующего прохода при очистке кода. Спасибо, Kanishka! –

+0

@JasonElwood welcome: D –

0

Большие вам спасибо всем за быстрые, сердечные ответы.

Кажется, я неправильно форматировал строку запроса.

Это фиксированная моя проблема:

$ SQL = "SELECT FROM электронной почты". $ table. "WHERE email = '". $ Email. "'";

Снова, очень ценится. Хорошего дня!