2016-06-26 2 views
0

Я создаю приложение для Android, которое подключается к моему серверу mysql, вставляет нового пользователя и возвращает идентификатор или строку ошибки. моя проблема заключается в том, что я делаю загрузку с C#, она формирует php, поскольку я могу видеть пользователя в db, но он попадает в Client_UploadDataComplete.php xamarin не возвращает echo

Я вижу первые 2 тоста, но не третий. мой 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(); 

    } 

?> 

мой C# является:

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(); 
      } 
     } 
    }); 
} 

ответ

0

UploadValuesAsync пожаров UploadValuesCompleted событий. Вы используете UploadDataCompleted, который запускается методом UploadDataAsync.