مشکل در قسمت آپدیت پروژه Note (حل شد)
با سلام خدمت دوستان و استاد گرامی
پروژه Note که من نوشتم تا قسمت ReadData و SendData داشت درست اجرا میشد اما به قسمت updateData که رسیدم روی دیتابیس اطلاعاتی که می فرستم آپدیت نمیشه برنامه بدون خطا میاد بالا حتی خطاهای نارنجی رنگ هم نمیده به نظرم مشکل از سمت php باشه من ورژن جدید wamp دارم کدهای php استاد روش جواب نمیده از مثالهای داخل سایت w3school استفاده کردم تا اینجا ، خواهشا منو راهنمایی کنید مشکل کارم چی هست .
این کد قسمت ActivityEdit و پایینش کد قسمت service.php
package hadi.rock.apps.notes;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class ActivityEdit extends ActivityEnhanced {
@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
final EditText edtTitle = (EditText) findViewById(R.id.edtTitle);
final EditText edtDescription = (EditText) findViewById(R.id.edtDescription);
final CheckBox chkDone = (CheckBox) findViewById(R.id.chkDone);
Button btnOk = (Button) findViewById(R.id.btnOk);
Bundle extras = getIntent().getExtras();
int position = 0;
if (extras != null) {
position = extras.getInt("POSITION");
}
final StructTask note = G.tasks.get(position);
edtTitle.setText(note.title);
edtDescription.setText(note.desc);
chkDone.setChecked(note.done);
btnOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
note.title = edtTitle.getText().toString();
note.desc = edtDescription.getText().toString();
note.done = chkDone.isChecked();
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "" + note.id));
params.add(new BasicNameValuePair("title", note.title));
params.add(new BasicNameValuePair("desc", note.desc));
params.add(new BasicNameValuePair("done", "" + (note.done ? 1 : 0)));
Commands.updateData(params);
finish();
}
});
}
}
<?php
if (isset($_REQUEST['action'])){
$action = $_REQUEST['action'];
}else {
echo "Invalid Data";
exit;
}
if ($action=="read"){
readData();
} elseif ($action=="insert"){
sendData();
}elseif($action=="update"){
updateData();
}
function conectToDatabase(){
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "note_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
function readData(){
$conn = conectToDatabase();
$sql = "SELECT * FROM tasks";
$result = $conn->query($sql);
$output = array();
while($row= $result->fetch_assoc())
{
$record=array();
$record['Task_id']=$row['Task_id'];
$record['Task_title']=$row['Task_title'];
$record['Task_desc']=$row['Task_desc'];
$record['Task_done']=$row['Task_done'];
$output[]=$record;
}
echo json_encode($output);
//print_r($output);
}
function sendData(){
$conn = conectToDatabase();
$title = $_REQUEST["title"];
$desc = $_REQUEST["desc"];
$sql = "INSERT INTO tasks VALUES ( 0 ,'$title','$desc',0)";
$result = $conn->query($sql);
$conn->close();
}
function updateData(){
$conn = conectToDatabase();
$id = $_REQUEST["id"];
$title = $_REQUEST["title"];
$desc = $_REQUEST["desc"];
$done = $_REQUEST["done"];
$sql = "UPDATE tasks SET Task_done=' . $done . ' . Task_title='" . $title . "' . Task_desc='" . $desc . "' WHERE Task_id=" . $id ;
$result = $conn->query($sql);
$conn->close();
}
سلام:
بنظرم تعریف آپدیت کردنتون اشتباه بوده ، که خودمم دو روز توی همین گیر کرده بودم که مشکلش یه دونه ( , ) بود
این طور بنویسین فکر میکنم درست بشه:
mysqli_query($connection, "UPDATE task SET task_done=$done, task_title='$title', task_desc='$desc' WHERE task_id=$id");
سلام دوستان من هم دقیقا همین مشکل رو برای اپدیت کردن دارم که مقادیر روی سرور اپدیت نمیشه <
حتی params رو توی لاگ درست نشون میده
میخواستم این رو دیباگ کنم برای همین میخاستم
بپرسم چطوری باید دستی لینک رو وارد کنیم و تست کنیم ؟
من برای تست لینک زیر رو دستی میزنم باز هم جواب نمیگیرم !
http://localhost/note-server/service.php?action=update,title=1,desc=2,done=1,id=1
if (isset($_REQUEST['action'])){
$action = $_REQUEST['action'];
}else {
echo "Invalid Data !";
exit;
}
if ($action == "read"){
read();
} else if ($action == "insert"){
insert();
} else if ($action == "update"){
update();
}
function update(){
$connection = ConnectToDataBase();
$id = $_REQUEST['id'];
$title = $_REQUEST['title'];
$desc = $_REQUEST['desc'];
$done = $_REQUEST['done'];
$result = mysqli_query($connection, "UPDATE task SET task_done=" . $done . ", task_title='" . $title . "', task_desc='" . $desc . "' WHERE task_id=" . $id);
mysqli_close($connection);
}
مشکل حل شد <
رفتم از بچه های اشیانه پرسیدم < جواب رو اینجا میزارم در آینده بچه های دیگه استفاده کنند
این قسمت از کد به شکل زیر اصلاح شد
mysqli_query($connection, "UPDATE task SET task_done='$done', task_title='$title', task_desc='$desc' WHERE task_id='$id'");
منم همین مشکل رو دارم باید چیکار کنم کد php:
function UpdateData()
{
$connection = connectToDatabase();
if(isset($_REQUEST['title'])&&isset($_REQUEST['desc'])&&isset($_REQUEST['desc'])){
$id = $_REQUEST['id'];
$title = $_REQUEST['title'];
$desc = $_REQUEST['desc'];
$done = $_REQUEST['done'];
mysqli_query($connection, "UPDATE task SET task_done=$done, task_title='$title', task_desc='$desc' WHERE task_id='$id'");
}
mysqli_close($connection);
}
من دوباره باز همین مشکل رو با اپدیت کردن دارم !!! البته این بار خیلی عجیب تر !!
کد PHP کاملا صحیح هست < و وقتی لینک رو دستی وارد میکنم ، کاملا صحیح کار میکنه <
http://android.ir/App/Jam/update.php?text=txtupdate&done=0&id=21
لینک بالا برای کد زیر کاملا صحیح کار میکنه
function update(){
$connection = ConnectToDataBase();
date_default_timezone_set("Asia/Tehran");
$text= $_REQUEST['text'];
$id= $_REQUEST['id'];
$date = date("Y-m-d");
$time = date("H:i:s");
$done= $_REQUEST['done'];
$result = mysqli_query($connection, "UPDATE msg SET msg_done=$done, msg_text='$text' WHERE msg_id=$id");
mysqli_close($connection);
}
پس با این حساب از سمت اندروید مشکل دارم < متد مربوط به Update :
private void updatedata(ArrayList params) {
Log.i("PARAMS", "" + params);
WebService.readUrl("http://android.ir/App/Jam/update.php", params);
//WebService.readUrl("http://android.ir/App/Jam/insert.php", params);
}
با همین متد Insert میکنم < اما Update نمیتونم !!! حتی همین URL بالا رو کپی میکنم < توی مرورگر و Params رو دستی بهش میدم درست کار میکنه :| !
}
خب دوستانی که مثل من این چنین مشکلی رو دارند کافیه برای آپدیت دیتابیس از متد Gey استافاده کنند ! (روش کاملا اصولی نیست ولی موقتی کار رو راه میندازه)
HttpGet method = new HttpGet(url.replace(" ", "%20"));
مشکلاتی که ممکنه همیشه بوجود بیاد و باید دقت کرد < نحوه ارسال و دریافت دیتا هست که بصورت Post داره صورت میگیره یا بصورت Get
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .