Verbinden Android-app auf externe Datenbank (phpmyadmin)
Ich versuche eine Verbindung zu meinem android-Anwendung mit einer externen Datenbank.
Ich habe einige php-Skripte auf einem ftp-server, bieten eine Funktion für meine Datenbank.
Auf meiner phpmyadmin-Datenbank habe ich eine Tabelle 'users'.
wenn ich versuche, fügen Sie einen neuen Benutzer meine android-app Zugriff auf meine php-Skripte, sondern dann die "mysql_query" return immer false und der Benutzer erscheint nicht in meiner Tabelle auf der online-Datenbank.
in meinem ftp-site habe ich ein index.php Datei-und einen Ordner "include". in diesem Ordner habe ich die drei Dateien mit den Funktionen und Parameter: config.php, db_connect.php, db_function.php.
wahrscheinlich der Fehler ist doof, aber ich bin neu in php.
vielen Dank an alle.
hier ist mein java-code:
ich benutze registerUser einfügen der Benutzer mit getjsonfromurl
private static String loginURL = "php_script_adress_on_ftp";
private static String registerURL = "php_script_adress_on_ftp";
private static String login_tag = "login";
private static String register_tag = "register";
public JSONObject registerUser(String name, String email, String password){
//Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", register_tag));
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
//getting JSON Object
JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
//return json
return json;
}
//das ist die jsonfromurl Funktion
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
//Making HTTP request
try {
//defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
//try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
//return JSON String
return jObj;
}
hier ist meine index.php Datei, die rufe ich aus dem android app.
$user = $db->storeUser($name, $email, $Passwort); return immer false bei Fehler Nummer '1' Fehler in der Registrierung
<?php
/**
* File to handle all API requests
* Accepts GET and POST
*
* Each request will be identified by TAG
* Response will be JSON data
/**
* check for POST request
*/
if (isset($_POST['tag']) && $_POST['tag'] != '') {
//get tag
$tag = $_POST['tag'];
//include db handler
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
//response Array
$response = array("tag" => $tag, "success" => 0, "error" => 0);
//check for tag type
if ($tag == 'login') {
//Request type is check Login
$email = $_POST['email'];
$password = $_POST['password'];
//check for user
$user = $db->getUserByEmailAndPassword($email, $password);
if ($user != false) {
//user found
//echo json with success = 1
$response["success"] = 1;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
//user not found
//echo json with error = 1
$response["error"] = 1;
$response["error_msg"] = "Incorrect email or password!";
echo json_encode($response);
}
} else
if ($tag == 'register') {
//Request type is Register new user
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
//check if user is already existed
if ($db->isUserExisted($email)) {
//user is already existed - error response
$response["error"] = 2;
$response["error_msg"] = "User already existed";
echo json_encode($response);
} else {
//store user
$user = $db->storeUser($name, $email, $password);
if ($user) {
//user stored successfully
$response["success"] = 1;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$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"] = 1;
$response["error_msg"] = "Error occured in Registration";
echo json_encode($response);
}
}
} else {
echo "Invalid Request";
}
} else {
echo "Access Denied";
}
?>
hier ist meine config.php. ist es richtig, geben Sie den host in dieser Weise? ich habe auch versucht mit http
<?php
/**
* Database config variables
*/
define("DB_HOST", "sql3.freemysqlhosting.net");
define("DB_USER", "my_user");
define("DB_PASSWORD", "my_psw");
define("DB_DATABASE", "mydb_name");
?>
hier connect_db.php
<?php
class DB_Connect {
//constructor
function __construct() {
}
//destructor
function __destruct() {
//$this->close();
}
//Connecting to database
public function connect() {
require_once 'include/config.php';
//connecting to mysql
$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
//selecting database
mysql_select_db(DB_DATABASE);
//return database handler
return $con;
}
//Closing database connection
public function close() {
mysql_close();
}
}
?>
hier db_functions.php
<?php
class DB_Functions {
private $db;
//put your code here
//constructor
function __construct() {
require_once 'DB_Connect.php';
//connecting to database
$this->db = new DB_Connect();
$this->db->connect();
}
//destructor
function __destruct() {
}
/**
* Storing new user
* returns user details
*/
public function storeUser($name, $email, $password) {
$uuid = uniqid('', true);
$hash = $this->hashSSHA($password);
$encrypted_password = $hash["encrypted"]; //encrypted password
$salt = $hash["salt"]; //salt
$result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())");
//check for successful store
if ($result) {
//get user details
$uid = mysql_insert_id(); //last inserted id
$result = mysql_query("SELECT * FROM users WHERE uid = $uid");
//return user details
return mysql_fetch_array($result);
} else {
return false;
}
}
/**
* Get user by email and password
*/
public function getUserByEmailAndPassword($email, $password) {
$result = mysql_query("SELECT * FROM users WHERE email = '$email'") or die(mysql_error());
//check for result
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
$result = mysql_fetch_array($result);
$salt = $result['salt'];
$encrypted_password = $result['encrypted_password'];
$hash = $this->checkhashSSHA($salt, $password);
//check for password equality
if ($encrypted_password == $hash) {
//user authentication details are correct
return $result;
}
} else {
//user not found
return false;
}
}
/**
* Check user is existed or not
*/
public function isUserExisted($email) {
$result = mysql_query("SELECT email from users WHERE email = '$email'");
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
//user existed
return true;
} else {
//user not existed
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;
}
}
?>
EDIT: ich veränderte die db_function.php zurück auch mysql_error aber nichts zurück
public function storeUser($name, $email, $password,$error) {
$uuid = uniqid('', true);
$hash = $this->hashSSHA($password);
$encrypted_password = $hash["encrypted"]; //encrypted password
$salt = $hash["salt"]; //salt
$result = mysqli_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())");
//check for successful store
if (!$result) {
//get user details
$uid = mysqli_insert_id(); //last inserted id
$result = mysqli_query("SELECT * FROM users WHERE uid = $uid");
//return user details
$error = mysql_error();
return mysql_fetch_array($result);
} else {
$error = mysql_error();
return false;
}
}
und ich modiied die index.php die Rückkehr der mysql_error
....
....
$user = $db->storeUser($name, $email, $password,$error);
if ($user) {
//user stored successfully
$response["success"] = 1;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$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"] = 1;
$response["error_msg"] = $error;
echo json_encode($response);
}
...
...
auch ich verwendet mysqli_query und nicht mysql_query aber nichts geändert.
LÖSUNG:
Ich fand heraus, dass altervista gemacht, eine Umleitung von HTTP-POST und nach dem redirect wurde es ein HTTP-GET ohne Parameter. ich weiß nicht, was der Grund war. ich habe die domain .com -, aber es leitet die Anfrage an .org. also habe ich die Anfrage direkt zu .org und es beginnt zu arbeiten!
php scripts on a ftp server
Ich glaube nicht, dass ein FTP-server können PHP-Dateien- danke für die Antwort! sind Sie sicher? und wo muss ich den php-Dateien? und wenn der ftp-server nicht ausgeführt, php-Dateien, warum es wieder den "Fehler" string in die index.php Datei?
- Ich denke, dass du es hochgeladen mit FTP auf einen web-server? Auf einem web-server (wie Apache) mit PHP läuft.
- Versuchen Sie, die Ausgabe
mysql_error()
am Ende der MethodestoreUser()
. Ich weiß nicht, wo Ihr code fehlschlägt. Vielleicht fügen Sie einige Ausgänge, so dass Sie sehen können, die Verzweigungen, die getroffen werden, wenn die Klauseln etc. - btw: die mysql_* Funktionen sind veraltet. Schalter auf mysqli_* oder PDO
- Sorry im newby mit php.. Wie kann ich Ausgaben hinzufügen, wenn ich nicht eine Konsole? Ich setze "return mysql_error() ;" und nicht "return false;"? Und die Meldung im java-code als json-Objekt?
$error = mysql_error(); return false;
nichts zurückgibt, ist es nur weist den MySQL-Fehler auf die nicht verwendete variable $error. Wenn Sie ersetzen Sie es mitdie(mysql_error());
den MySQL-Fehler wird zurückgegeben, um Ihre Java-code- alle Rechte erhalte ich die Fehlermeldung: access denied for user 'my_user_ftp'@'localhost'(using password: NO) Wie kann ich es lösen?
- Anscheinend sind Sie nicht mit der Datenbank verbunden. Sind Sie sicher, dass Benutzer die richtigen Verbindungseinstellungen? Die Nachricht sagt, dass Sie versuchen, eine Verbindung ohne Angabe eines Kennworts.
- Ok, also das problem ist, dass die Parameter, die ich übergebe mein httppost null auf server-Seite, aber nicht auf null, wenn ich ausführen, die httppost. also, wenn ich Zugang zu index.php die "tag" - Wert null ist und das Skript zurückgeben, die mir den string in die Letzte "else" - Klausel, die lautet "Zugriff Verweigert" weiß jemand, warum meine parameter sind null auf server-Seite?
Du musst angemeldet sein, um einen Kommentar abzugeben.
LÖSUNG: ich habe herausgefunden, dass altervista gemacht, eine Umleitung von HTTP-POST und nach dem redirect wurde es ein HTTP-GET ohne Parameter. ich weiß nicht, was der Grund war. ich habe die domain .com -, aber es leitet die Anfrage an .org. also habe ich die Anfrage direkt zu .org und es beginnt zu arbeiten!