2013-07-29 2 views
0

Некоторые из полей таблицы являются int (11), если пользователь заполняет форму и вставляет 1 или выше, она работает нормально, однако, когда они вставляют нуль, у меня большие проблемы, и это dosnt Работа. Как я получаю следующий скрипт для вставки 0 в качестве INTpdo throw error при вставке нуля

<?php 

    class add_qual { 

    private $db; 

    public function __construct(){ 
    $this->db = new connection(); 
    $this->db = $this->db->dbconnect(); 

    } 

    public function new_qual($user_id, 
    $providers, 
    $code, 
    $title, 
    $title_under, 
    $full_title, 
    $description, 
    $comments, 
    $level, 
    $expires, 
    $period_months 
    $is_superceded) { 


    $flag=''; 
    if($user_id==''){$flag='error'; } 
    if($providers==''){$flag='error'; } 
    if($title==''){$flag='error'; } 
    if($expires==''){$flag='error'; } 
    {$flag='error'; } 

    if ($flag=='') { 

    //if($user_id!=''){ 

    $st = $this->db->prepare("INSERT INTO national_body_qualifications_list 
    (user_id, 
    providers, 
    code, 
    title, 
    title_under, 
    full_title, 
    description, 
    comments, 
    level, 
    expires, 
    period_months, 
    is_superceded) 

    VALUES (?,?,?,?,?,?,?,?,?,?)"); 
    $st->bindParam(1, $user_id); 
    $st->bindParam(2, $providers); 
    $st->bindParam(3, $code); 
    $st->bindParam(4, $title); 
    $st->bindParam(5, $title_under); 
    $st->bindParam(6, $full_title); 
    $st->bindParam(7, $description); 
    $st->bindParam(8, $comments); 
    $st->bindParam(9, $level); 
    $st->bindParam(10, $expires); 
    $st->bindParam(11, $period_months); 
    $st->bindParam(12, $is_superceded); 

    $st->execute(); 
    echo 'Yay it worked'; 

    } else { 
     echo 'Max Fail'; 
    } 

    } 
    }    

    ?> 
+0

Название и описание не имеют большого смысла. Во всяком случае, почему вы не попробовали просто 'try {}' и 'catch()' исключения? – samayo

+0

Просто набор примечаний '$ flag = 0' NOT' $ flag = '' '. И 'if ($ user_id === '') {$ flag = 1; } 'и т. д. –

ответ

0

Использования рыхлого сравнения (==) строка пуста "" равно целого числа 0. Это не должно быть проблемой при представлении форм, потому что они всегда являются строками, но я не знаю, приписывали ли вы значения int. Попробуйте использовать строгое сравнение (===) вместо того, чтобы, например, как:

if ($title === '') { $flag = 'error'; } 

У вас также есть дополнительный { $flag = 'error'; } без if.

+0

Я попробовал разные методы проверки и даже вынимал при проверке все данные. – user1425394

+0

Если вы пробовали всевозможные способы проверки, и я даже вынул проверочный оператор, моя проблема заключается в том, чтобы этот скрипт вставлял $ var равно 0 как int. – user1425394

+0

Если вы запустили код выше, это отразится на инструкции Yay или инструкции Max Fail? Вы пытались установить параметр data_type для bindParam() в PDO :: PARAM_INT? Также обратите внимание, что у вас есть 10? Для 12 полей. – ironcito