Я создаю приложение для Android, которое подключается к моему серверу MySQL, вставляет нового пользователя и возвращает идентификатор или строку ошибки. моя проблема заключается в том, что я делаю загрузку из c #, он объявляет php, как я вижу пользователя в БД, но он попадает в Client_UploadDataComplete.
я вижу первые 2 элемента тоста, но не третий. Мой PHP работает из веб-браузера. также это все на фрагменте диалога.
PHP это:
<?php
function create_password_hash($strPassword, $numAlgo = 1, $arrOptions = array())
{
if (function_exists('password_hash')) {
// php >= 5.5
$hash = password_hash($strPassword, $numAlgo, $arrOptions);
}
else
{
$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
$salt = base64_encode($salt);
$salt = str_replace('+', '.', $salt);
$hash = crypt($strPassword, '$2y$10$' . $salt . '$');
}
return $hash;
}
function verify_password_hash($strPassword, $strHash)
{
if (function_exists('password_verify')) {
// php >= 5.5
$boolReturn = password_verify($strPassword, $strHash);
} else {
$strHash2 = crypt($strPassword, $strHash);
echo $strHash2."<BR>";
$boolReturn = $strHash == $strHash2;
}
return $boolReturn;
}
$conn = new mysqli("localhost", "username", "password", "dbname");
// check connection
if ($conn->connect_error)
{
echo ('Database connection failed: ' .mysqli_connect_error);
}
else
{
$id="";
$firstName = $_REQUEST['firstName'];
$lastName = $_REQUEST['lastName'];
$email = $_REQUEST['email'];
$password = $_REQUEST['password'];
$encryptedPassword = create_password_hash($password);
$code = $_REQUEST['code'];
$diabetes = $_REQUEST['diabetes'];
$bloodpressure = $_REQUEST['bloodpressure'];
$fitness = $_REQUEST['fitness'];
$cholesteral = $_REQUEST['cholesterol'];
$codeId = "";
$result = "";
$strHash2 = crypt($password, $encryptedPassword);
$boolReturn = ($encryptedPassword == $strHash2);
$stmt=$conn->prepare('SELECT id FROM mentor where mcode = ?');
$stmt->bind_param('s', $code);
$stmt->execute();
$stmt->bind_result($codeId);
$stmt->store_result();
$stmt->fetch();
if(($stmt->num_rows)===1)
{
$stmt = $conn->prepare('INSERT INTO users (firstname,lastname,email,encrypted_password,diabetes,cholesterol,bloodPressure,fitnessTraining,mentor_id) values(?,?,?,?,?,?,?,?,?)');
$stmt->bind_param('ssssiiiii',$firstName,$lastName,$email,$encryptedPassword,$diabetes,$cholesteral,$bloodpressure,$fitness,$codeId);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
$id = $conn->insert_id;
echo $id;
}
else
{
echo "mentor id is invalid";
}
/*
//check hash vs password
if (verify_password_hash($password, $encryptedPassword))
{
echo 'Password is valid!';
} else
{
echo 'Invalid password.';
}
*/
$stmt->close();
$conn->close();
}
?>
мой с # это:
private void _btnSignUp_Click(object sender, EventArgs e)
{
if (CheckFields())
{
//save to db
WebClient client = new WebClient();
Uri uri = new Uri("http://www.sbmgroup.ca/test/biteboard/CreateContact.php");
NameValueCollection parameters = new NameValueCollection();
string diabetesValue = itemChecked(_diabetes.Checked);
string cholesterolValue = itemChecked(_cholesertal.Checked);
string fitnessValue = itemChecked(_fitness.Checked);
string bloodValue = itemChecked(_bloodPressure.Checked);
parameters.Add("firstName", _firstName.Text);
parameters.Add("lastName", _lastName.Text);
parameters.Add("email", _email.Text);
parameters.Add("password", _password.Text);
parameters.Add("code", _mentorCode.Text);
parameters.Add("diabetes", diabetesValue);
parameters.Add("bloodpressure", bloodValue);
parameters.Add("fitness", fitnessValue);
parameters.Add("cholesterol", cholesterolValue);
Toast.MakeText(Activity.ApplicationContext, "before upload", ToastLength.Long).Show();
client.UploadDataCompleted += Client_UploadDataCompleted;
client.UploadValuesAsync(uri, parameters);
Toast.MakeText(Activity.ApplicationContext, "after upload", ToastLength.Long).Show();
}
}private void Client_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
{
Toast.MakeText(Activity.ApplicationContext, "upload complete", ToastLength.Long).Show();
Activity.RunOnUiThread(() =>
{
string id = Encoding.UTF8.GetString(e.Result);
int newId = 0;
if (OnSignupComplete != null)
{
if (int.TryParse(id, out newId))
{
OnSignupComplete.Invoke(this, new OnSignupEventArgs(newId, _firstName.Text, _lastName.Text, _email.Text, _password.Text, _retypePassword.Text, _mentorCode.Text, _bloodPressure.Checked, _cholesertal.Checked, _fitness.Checked, _diabetes.Checked));
this.Dismiss();
}
}
});
}
UploadValuesAsync
увольняет UploadValuesCompleted
событие. Ты используешь UploadDataCompleted
, который уволен UploadDataAsync
метод.
Других решений пока нет …