2016-07-02 8 views
0

In meiner Anwendung verwende ich 2 PHP-Dateien, wo man die alle funtions für die Anwendung erforderlichen Informationen enthält und die andere ist retrive und die Daten zurück an den BenutzerKann nicht einfügen Daten binden param

Meine erste PHP-Datei senden DB_Functions.php ist , die den folgenden Code

<?php 

class DB_Functions { 

    private $conn; 

    // constructor 
    function __construct() { 
     require_once 'DB_Connect.php'; 
     // connecting to database 
     $db = new Db_Connect(); 
     $this->conn = $db->connect(); 
    } 

/** 
    * Storing new user 
    * returns user details 
    */ 
    public function storeUser($name,$sex,$dob,$email,$college,$password,$latitude,$longitude,$pass) { 
    $uuid = uniqid('', true); 
    $hash = $this->hashSSHA($password); 
    $encrypted_password = $hash["encrypted"]; // encrypted password 
    $salt = $hash["salt"]; // salt 

    $stmt = $this->conn->prepare("INSERT INTO CFLASH_USERS(Name, sex, dob, mail, college, password, latitude, longitude, pass, salt, created_at) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())"); 
    $stmt->bind_param("ssssssssss", $name, $sex, $dob, $email, $college, $password, $latitude, $longitude, $pass, $salt); 

    $result = $stmt->execute(); 
    $stmt->close(); 


    // check for successful store 
    if ($result) { 
     $stmt = $this->conn->prepare("SELECT * FROM CFLASH_USERS WHERE mail = ?"); 
     $stmt->bind_param("s", $email); 
     $stmt->execute(); 
     $user = $stmt->get_result()->fetch_assoc(); 
     $stmt->close(); 

     return $user; 
    } else { 
     return false; 
    } 
} 

/** 
* Encrypting password 
* @param password 
* returns salt and encrypted password 
*/ 
public function hashSSHA($password) { 

    $salt = sha1(rand()); 
    $salt = substr($salt, 0, 10); 
    $encrypted = base64_encode(sha1($password . $salt, true) . $salt); 
    $hash = array("salt" => $salt, "encrypted" => $encrypted); 
    return $hash; 
} 

/** 
* Decrypting password 
* @param salt, password 
* returns hash string 
*/ 
public function checkhashSSHA($salt, $password) { 

    $hash = base64_encode(sha1($password . $salt, true) . $salt); 

    return $hash; 
} 

} 

?> 

Meine zweite pHP-Datei register.php enthält

<?php 

require_once 'include/DB_Functions.php'; 
$db = new DB_Functions(); 

// json response array 
$response = array("error" => FALSE); 

if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['password'])) { 

// receiving the post params 
    $name = $_POST['name']; 
$sex = $_POST['sex']; 
$dob = $_POST['dob']; 
$email = $_POST['email']; 
$college = $_POST['college']; 
$password = $_POST['password']; 
$latitude = $_POST['latitude']; 
$longitude = $_POST['longitude']; 
$pass = $_POST['pass']; 

// create a new user 
    $user = $db->storeUser($name, $sex, $dob, $email, $college ,$password, $latitude, $longitude, $pass); 
    if ($user) { 
     // user stored successfully 
     $response["error"] = FALSE; 
     $response["uid"] = $user["mail"]; 
     $response["user"]["name"] = $user["Name"]; 
     $response["user"]["sex"] = $user["sex"]; 
     $response["user"]["dob"] = $user["dob"]; 
     $response["user"]["email"] = $user["mail"]; 
     $response["user"]["college"] = $user["college"]; 
     $response["user"]["created_at"] = $user["created_at"]; 
     $response["user"]["updated_at"] = $user["updated_at"]; 
     echo json_encode($response); 
    } else { 
     // user failed to store 
     $response["error"] = TRUE; 
     $response["error_msg"] = "Unknown error occurred in registration!"; 
     echo json_encode($response); 
    } 

} else { 

$response["error"] = TRUE; 
$response["error_msg"] = "Required parameters (name, email or password) is missing!"; 
echo json_encode($response); 
} 
?> 

Meine Tabelle enthält str table

Ich kann die Daten nicht einfügen. Ich habe nach dem Post meathod gesucht, um falsch zu liegen, aber es ist nicht falsch. Also dachte ich, dass es einen Fehler mit bind_param() geben wird. Bitte lassen Sie mich wissen, wo der Fehler ist und eine Lösung, um es zu beheben.

Bitte erklären Sie mir über "Call to undefined Methode mysqli_stmt :: get_result()"

+0

'get_result()' ist 'Nur mit mysqlnd.' Check [die php docs] (http://php.net/manual/en/mysqli-stmt.get-result.php) und stellen Sie sicher, dass Sie es haben – Matt

+0

in Ordnung, aber das ist in If Bedingung Block vorhanden, so zuerst Bind Param-Funktion sollte ausgeführt werden, die nicht ausgeführt wird oder möglicherweise Fehler bei dieser Codezeile generiert wird. Daher wird der if-Block nicht aktiviert, so dass kein Fehler als Aufruf der Methode mysqli_stmt :: get_result() generiert wird. – Karrthik

+0

Dieser Treiber ist nicht Teil Ihres Codes und gehört zum Server. Bitte überprüfen Sie diese Antwort [hier] (http://stackoverflow.com/a/1475996/3140646) und überprüfen Sie. – Matt

Antwort

0

Sie wahrscheinlich mysqlnd fehlen. Diese Methode ist nur mit diesem Treiber verfügbar.

http://php.net/manual/en/mysqli-stmt.get-result.php

+0

okay, aber das ist in If-Bedingung Block vorhanden, so zuerst Bind Param-Funktion sollte ausgeführt werden, die nicht ausgeführt wird oder möglicherweise Fehler bei dieser Codezeile generiert wird. Daher wird der if-Block nicht aktiviert, so dass kein Fehler als Aufruf der Methode mysqli_stmt :: get_result() generiert wird. – Karrthik

+0

Wenn die "if" -Klausel ausgeführt wird, bedeutet das, dass Ihre Einfügung erfolgreich war (gemäß Ihrem Code). Ihre Frage bezog sich auf den Ergebnisfehler innerhalb dieser Klausel. – SArnab

+0

Sie sagen, dass Daten trotz erfolgreicher Rückkehr der Ausführung der Anweisung nicht in Ihre Datenbank eingefügt werden? – SArnab