2017-02-14 20 views
0

Хорошо, я не могу понять это.Обновить таблицу db с INT

Я хочу, чтобы вошедший в систему пользователь обновил строку с количеством (INT), я продолжаю получать недопустимую ошибку параметра, а также функцию вызова функции-члена execute() для не-объекта.

Вот PHP и HTML, которые должны обновить БД

<?php 
ini_set("log_errors", 1); 
ini_set("error_log", "/tmp/php-error.log"); 
session_start(); 
require_once 'class.user.php'; 
$user_home = new USER(); 

if(!$user_home->is_logged_in()) 
{ 
    $user_home->redirect('index.php'); 
} 

$stmt = $user_home->runQuery("SELECT * FROM tbl_client_info WHERE UCODE=:uid"); 
$stmt->execute(array(":uid"=>$_SESSION['userSession'])); 
$row = $stmt->fetch(PDO::FETCH_ASSOC); 

    if($stmt->rowCount() == 1) 
    { 
     if(isset($_POST['btn-update-data'])) 
     { 
      $purchasedata = $_POST['purchasedata']; 
      $cpurchasedata = $_POST['cpurchasedata']; 


      if($cpurchasedata!==$purchasedata) 
      { 
       $msg = "<div class='alert alert-block'> 
         <button class='close' data-dismiss='alert'>&times;</button> 
         <strong>Sorry!</strong> Input Does Not Match. Make sure the details match. 
         </div>"; 
      } 
      else 
      { 

       $stmt = $user_home->register("INSERT INTO tbl_client_info (purchasedata) VALUES (?)"); 
       $stmt->execute(array(":purchasedata"=>$purchasedata)); 

       // 

       $msg = "<div class='alert alert-success'> 
         <button class='close' data-dismiss='alert'>&times;</button> 
         Okay, we have added data to your account. 
         </div>"; 
      } 
     } 
    } 
    else 
    { 
     $msg = "<div class='alert alert-success'> 
       <button class='close' data-dismiss='alert'>&times;</button> 
       No Sorry That Did Not Work, Try again 
       </div>"; 

    } 

?> 

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Forgot Password</title> 
    <!-- Bootstrap --> 
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen"> 
    <link href="bootstrap/css/bootstrap.css" rel="stylesheet" media="screen"> 
    <link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen"> 
    <link href="assets/styles.css" rel="stylesheet" media="screen"> 

    <link href="css/bootstrap.min.css" rel="stylesheet"> 

    <link href="fonts/css/font-awesome.min.css" rel="stylesheet"> 
    <link href="css/animate.min.css" rel="stylesheet"> 
    <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> 
    <!--[if lt IE 9]> 
     <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> 
    <![endif]--> 
    <!-- Custom styling plus plugins --> 
    <link href="css/custom.css" rel="stylesheet"> 
    <link href="css/icheck/flat/green.css" rel="stylesheet"> 
<script src="js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script> 

<!-- Sweet Alert --> 
    <script src="dist/sweetalert-dev.js"></script> 
    <link rel="stylesheet" href="dist/sweetalert.css"> 
    <!--.......................--> 

    </head> 



<body style="background:#f3f3f3;"> 

    <div id="wrapper"> 
     <div id="login_content" class="animate form"> 
     <section class="login_content"> 
      <form method="post"> 
      <h1>Purchase Data</h1> 

      <div class='alert alert-success'> 
      <strong>Hello </strong><?php echo $row['firstname'] ?>! //add more text here 
     </div> 

     <?php 
     if(isset($msg)) 
     { 
      echo $msg; 
     } 
     ?> 
     <input type="text" class="input-block-level" placeholder="500mb" name="purchasedata" required /> 
     <input type="text" class="input-block-level" placeholder="Retype the bundle" name="cpurchasedata" required /> 
     <hr /> 
     <button class="btn btn-large btn-primary" type="submit" name="btn-update-data">Add data to my account</button> 
      <div class="clearfix"></div> 
      <div class="separator"> 

и вот class_user.php

<?php 

require_once 'dbconfig.php'; 

class USER 
{ 

    private $conn; 

    public function __construct() 
    { 
     $database = new Database(); 
     $db = $database->dbConnection(); 
     $this->conn = $db; 
    } 

    public function runQuery($sql) 
    { 
     $stmt = $this->conn->prepare($sql); 
     return $stmt; 
    } 

    public function lasdID() 
    { 
     $stmt = $this->conn->lastInsertId(); 
     return $stmt; 
    } 

    public function register($uname,$email,$upass,$code,$purchasedata) 
    { 
     try 
     {       
      $password = md5($upass); 
      $stmt = $this->conn->prepare("INSERT INTO tbl_client_info(User_Name,billingemail,password,purchasedata,tokenCode) 
                 VALUES(:User_Name, :billingemail, :password, :purchasedata, :active_code)"); 
      $stmt->bindparam(":user_name",$uname); 
      $stmt->bindparam(":user_mail",$email); 
      $stmt->bindparam(":user_pass",$password); 
      $stmt->bindparam(":active_code",$code); 
      $stmt->bindparam(":purchasedata",$purchasedata); 
      $stmt->execute(); 
      return $stmt; 
     } 
     catch(PDOException $ex) 
     { 
      echo $ex->getMessage(); 
     } 
    } 

    public function login($email,$upass) 
    { 
     try 
     { 
      $stmt = $this->conn->prepare("SELECT * FROM tbl_client_info WHERE billingemail=:email_id"); 
      $stmt->execute(array(":email_id"=>$email)); 
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

      if($stmt->rowCount() == 1) 
      { 
       if($userRow['userStatus']=="Y") 
       { 
        if($userRow['password']==md5($upass)) 
        { 
         $_SESSION['userSession'] = $userRow['UCODE']; 
         return true; 
        } 
        else 
        { 
         header("Location: index.php?error"); 
         exit; 
        } 
       } 
       else 
       { 
        header("Location: index.php?inactive"); 
        exit; 
       } 
      } 
      else 
      { 
       header("Location: index.php?error"); 
       exit; 
      }  
     } 
    catch(PDOException $ex) 
    { 
     echo $ex->getMessage(); 
    } 
} 

любая помощь будет действительно оценили

+0

При вызове '$ user_home-> register()' не должен иметь SQL-запрос в качестве параметра. –

+0

ваши названные заполнители - это еще одна проблема –

+0

, вы делаете те же ошибки, что и в предыдущем вопросе, http: // stackoverflow.com/q/42219923/1415724, и не знаю, почему вы приняли ответ там, так как они не полностью решили его. –

ответ

0

Посмотрите на ваше имени заполнители:

(:User_Name, :billingemail, :password, :purchasedata, :active_code) 

и

 $stmt->bindparam(":user_name",$uname); 
     $stmt->bindparam(":user_mail",$email); 
     $stmt->bindparam(":user_pass",$password); 
     $stmt->bindparam(":active_code",$code); 
     $stmt->bindparam(":purchasedata",$purchasedata); 
  • Они не совпадают.

Каждый именованный заполнитель обязательно матч и в lettercase.

Пример:

:user_name и :User_Name являются не то же самое.

так здесь:

(:user_name, :user_mail, :user_pass, :purchasedata, :active_code) 

Руководство довольно четко на это:

и не идти жить с этим при помощи MD5, это уже не безопасно.

Использование password_hash():

Проверка на наличие ошибок:

и убедитесь, что имена столбцов верны, а буквенный регистр может быть фактором.

+0

спасибо. Позвольте мне установить это –

+0

@sean welcome. Проверьте также ошибки, я включил несколько ссылок в нижней части, на которые вы можете посмотреть и использовать. –

+0

@sean и убедитесь, что имена столбцов верны в запросе. Возможно, вы использовали неправильные имена столбцов с заполнителями. Именованные заполнители не должны совпадать с именами столбцов (это личное предпочтение), но имена столбцов должны быть правильными, а имена заполнителей должны совпадать с значениями VALUES и bind. –