الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الحل في مشكلة عدم أرسال بيانات باللغة العربية من الجوال الى الويب؟؟

بدأه زمبقه في 14 نوفمبر 2010 · 11 رد · 890 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قمت بعمل برنامج للجوال يقوم يقوم بارسال بيانات حقلين هما اليوزر نيم والباسورد من الجوال الى صفحة php

والبرنامج شغال مية مية فقط مع ارسال البيانات باللغة الانجليزية

ولكن عند ادخال اسم مستخدم او باسورد باللغة العربية لا يتم ارسالهم الى صفحة البي اتش بي

لذالك ارجوا من الذي عنده كود بسيط ان يشرحه لنا ويعدل على الكود التالي _ ساضع الكود للفائدة -

كود j2me
اسم الملف (Network.java)
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.io.*;
import java.util.*;
import java.lang.*;

public class Network extends MIDlet implements CommandListener
{
	Display display;
	Command exitCommand;
	Command updateCommand;
	Form screen;

	public
	TextField inputfield;
	TextField inputfield2;

	TextField outputfield;
	StringItem aboutme = new StringItem("","");
	InputStream in = null;
	String url = new String();


	public Network()
	{

	    // Setup Display
		display = Display.getDisplay(this);
		exitCommand = new Command("اغلاق",Command.EXIT, 1);
		updateCommand = new Command("دخول", Command.SCREEN,2);

		inputfield=  new TextField(" اسم المستخدم:",  "", 256, TextField.ANY);
		inputfield2= new TextField("كلمة السر :", "", 256, TextField.PASSWORD);
		//String s=new String("arabic_string".getBytes(), "UTF-8");		
		outputfield= new TextField("الحاله:", "جاهز", 256, TextField.UNEDITABLE);

		screen = new Form("تسجيل الدخول ");

		screen.append(inputfield);
		screen.append(inputfield2);

		screen.append(outputfield);
		screen.append(aboutme);
		screen.addCommand(exitCommand);
		screen.addCommand(updateCommand);
		screen.setCommandListener(this);




	}



	public void startApp()
	{
	    //Show the Window Form on the Screen
		display.setCurrent(screen);	

	}

	public void pauseApp()
	{

	}

	public void destroyApp(boolean unconditional)
	{

	}

	public void update_action()
	{

		// Create a thread to actually connect to the webserver
		Thread t = new Thread()
		{
			public void run()
			{
				//open connecttion
				//,inputfield.getString(),inputfield2.getString()
				try
				{
					outputfield.setString("جاري الاتصال ...");
		    		url = generateGetUrl("http://h1.ripway.com/oneofmenf6/J2ME/j2me_php_test.php",inputfield.getString(),inputfield2.getString());
					System.out.print("\n" + url + "\n");
					if(updateSite(url)==1)outputfield.setString("تم التحديث");
					else
						outputfield.setString("فشل الدخوال. =(");

				}		
				catch(IOException e)
				{
					outputfield.setString("فشل الاتصال.  =(");	
				}
			}
		};

		t.start();	
	}

	public void commandAction(Command c, Displayable s)
	{

		if(c==updateCommand)
		{
			update_action();			
		}

		if(c==exitCommand)
		{
			destroyApp(false);
			notifyDestroyed();
		}


	}

	//Function that formats the url string coding (IE %20 for spaces)
	   public String generateGetUrl(String url, String text , String text2)
       {
		String newUrl = new String();
		StringBuffer c = new StringBuffer(text);
		StringBuffer b = new StringBuffer(text2);




		newUrl = url + "?text=" + c.toString() + "&text2=" + b.toString(); 


		return newUrl.toString();

       }


        // This function connects to the site using the HTTP GET method
       public int updateSite(String url) throws IOException
	   {
		HttpConnection conn = null;
		DataOutputStream out = null;

		try
        {
			conn = (HttpConnection)Connector.open(url);
			conn.setRequestMethod(HttpConnection.GET);
			conn.setRequestProperty("Connection", "close");


			if(conn.getResponseCode() == HttpConnection.HTTP_OK)
			{
                //We connected to the site
				return 1;
			}
			else
			{
			    //We didn't connect  =(
				return 0;
			}




		}
		catch(IOException e)
		{
			System.out.print("فشل الاتصال بالسيرفر");
			return 0;
		}

	}

}

كود صفحة البي اتش بي
أسم الملف(j2me_php_test.php)
<? 
$text1 = $_GET["text"]; 
$text2 = $_GET["text2"]; 
$text = "username:".$text1."<br>"."pass:".$text2."<br>"."<br>";
$file = fopen("newText_test.html","a"); 

fwrite($file, $text); 

fclose($file); 

echo $text ; 



?>
#2

اعتقد انك لو استخدمت الـ POST method فى الاتصال من الموبيل

هتكون احسن

Software Developer
Mahmoudkelany.com


 

#3

هذا البرنامج للكود السابق جاهز للتثبيت على الجوال

VideoNimbuzz.jar

#4

اخى الكريم

جربت الكود تبعك على الموبيل

ولكنه لا يعمل

قال لى حدث فشل فى الدخول

مع العلم اننى ارسلت له بيانات باللغه الانجليزيه

حاولت الدخول على الموقع الموجود فى الكود

http://h1.ripway.com/oneofmenf6/J2ME/j2me_php_test.php

ولكنه لا يعمل

Software Developer
Mahmoudkelany.com


 

#5

اخى الكريم

انا عدلت الكود لان الطريقه السابقه كانت لا تعمل

وانت كنت بتقول شغاله ولكنها لا تعمل

والسبب ليس فى الموقع حتى لو كان الموقع يعمل

انت لم تقم بكتابه البيانات وارسالها الى الموقع

المهم

هذا هو الكود بعد التعديل

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.io.*;

/**
 * 
 * @author Mahmoud Kelany
 */
public class Network extends MIDlet implements CommandListener {

	private Display display;
	//Commands
	private Command exitCommand;
	private Command updateCommand;
	//Forms
	private Form screen;
	//Commponents
	private TextField inputfield;
	private TextField inputfield2;
	private TextField outputfield;
	//Others
	private String paramters;
	private String siteURL;
	private int isUpdated;

	public Network() {
    	// Setup Display
    	display = Display.getDisplay(this);
    	exitCommand = new Command("اغلاق", Command.EXIT, 0);
    	updateCommand = new Command("دخول", Command.SCREEN, 0);
    	inputfield = new TextField(" اسم المستخدم:", "", 32, TextField.ANY);
    	inputfield2 = new TextField("كلمة السر :", "", 32, TextField.PASSWORD);
    	outputfield = new TextField("الحاله:", "جاهز", 256, TextField.UNEDITABLE);
    	screen = new Form("تسجيل الدخول ");
    	//////////////////////////////
    	screen.append(inputfield);
    	screen.append(inputfield2);
    	screen.append(outputfield);
    	screen.addCommand(exitCommand);
    	screen.addCommand(updateCommand);
    	screen.setCommandListener(this);
	}

	public void startApp() {
    	display.setCurrent(screen);
	}

	public void pauseApp() {
	}

	public void destroyApp(boolean unconditional) {
	}

	public void updateAction() {
    	siteURL = "http://www.hamzawy.eb2a.com/testJavaME.php";
    	outputfield.setString("جاري الاتصال ...");
    	paramters = "text=" + inputfield.getString().trim() + "&text2=" + inputfield2.getString().trim();
    	updateSite();
    	try {
        	Thread.sleep(500);
    	} catch (InterruptedException ex) {
        	ex.printStackTrace();
    	}
    	if (isUpdated == 1) {
        	outputfield.setString("تم التحديث");
    	} else if (isUpdated == -1) {
        	outputfield.setString("فشل الدخوال. =(");
    	} else if (isUpdated == 0) {
        	outputfield.setString("LOL");
    	}
	}

	public void commandAction(Command cmd, Displayable s) {
    	if (cmd == updateCommand) {
        	updateAction();
    	} else if (cmd == exitCommand) {
        	destroyApp(false);
        	notifyDestroyed();
    	}
	}

	private void updateSite() {
    	new Thread() {

        	public void run() {
            	DataOutputStream out = null;
            	HttpConnection conn = null;
            	try {
                	conn = (HttpConnection) Connector.open(siteURL);
                	conn.setRequestMethod(HttpConnection.POST);
                	conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
                	conn.setRequestProperty("content-length", Integer.toString(paramters.length()));
                	out = conn.openDataOutputStream();
                	out.write(paramters.getBytes("UTF-8"));
                	isUpdated = 1;
            	} catch (IOException e) {
                	e.printStackTrace();
                	System.out.print("Error in Server");
                	isUpdated = -1;
            	}
        	}
    	}.start();
	}
}

وهو يعمل باذن الله :)

Software Developer
Mahmoudkelany.com


 

#6
اقتباس
اخى الكريم

انا عدلت الكود لان الطريقه السابقه كانت لا تعمل

وانت كنت بتقول شغاله ولكنها لا تعمل

والسبب ليس فى الموقع حتى لو كان الموقع يعمل

انت لم تقم بكتابه البيانات وارسالها الى الموقع

المهم

هذا هو الكود بعد التعديل

expand | plain text

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import java.io.*;

import javax.microedition.io.*;

/**

*

* @author Mahmoud Kelany

*/

public class Network extends MIDlet implements CommandListener {

private Display display;

//Commands

private Command exitCommand;

private Command updateCommand;

//Forms

private Form screen;

//Commponents

private TextField inputfield;

private TextField inputfield2;

private TextField outputfield;

//Others

private String paramters;

private String siteURL;

private int isUpdated;

public Network() {

// Setup Display

display = Display.getDisplay(this);

exitCommand = new Command("اغلاق", Command.EXIT, 0);

updateCommand = new Command("دخول", Command.SCREEN, 0);

inputfield = new TextField(" اسم المستخدم:", "", 32, TextField.ANY);

inputfield2 = new TextField("كلمة السر :", "", 32, TextField.PASSWORD);

outputfield = new TextField("الحاله:", "جاهز", 256, TextField.UNEDITABLE);

screen = new Form("تسجيل الدخول ");

//////////////////////////////

screen.append(inputfield);

screen.append(inputfield2);

screen.append(outputfield);

screen.addCommand(exitCommand);

screen.addCommand(updateCommand);

screen.setCommandListener(this);

}

public void startApp() {

display.setCurrent(screen);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

public void updateAction() {

siteURL = "http://www.hamzawy.eb2a.com/testJavaME.php";

outputfield.setString("جاري الاتصال ...");

paramters = "text=" + inputfield.getString().trim() + "&text2=" + inputfield2.getString().trim();

updateSite();

try {

Thread.sleep(500);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

if (isUpdated == 1) {

outputfield.setString("تم التحديث");

} else if (isUpdated == -1) {

outputfield.setString("فشل الدخوال. =(");

} else if (isUpdated == 0) {

outputfield.setString("LOL");

}

}

public void commandAction(Command cmd, Displayable s) {

if (cmd == updateCommand) {

updateAction();

} else if (cmd == exitCommand) {

destroyApp(false);

notifyDestroyed();

}

}

private void updateSite() {

new Thread() {

public void run() {

DataOutputStream out = null;

HttpConnection conn = null;

try {

conn = (HttpConnection) Connector.open(siteURL);

conn.setRequestMethod(HttpConnection.POST);

conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");

conn.setRequestProperty("content-length", Integer.toString(paramters.length()));

out = conn.openDataOutputStream();

out.write(paramters.getBytes("UTF-8"));

isUpdated = 1;

} catch (IOException e) {

e.printStackTrace();

System.out.print("Error in Server");

isUpdated = -1;

}

}

}.start();

}

}

وهو يعمل باذن الله

شكرا للردود اخي الكريم وشكرا على تعديلك للكود ولكني لا زلت بحاجه الى بعض التوضيحات :

1- هل هناك كود خاص بصحفة البي اتش بي لاستقبال البيناتات اذا كانت الاجابة بنعم فاتمنى عليك ان تضع الكود للفائد

2- ماهي الطريقة التي استخدمتها get or post لاني انا كنت استخدم get وكود صفحة البي اتش بي كان كالتالي:

<?

$text1 = $_GET["text"];

$text2 = $_GET["text2"];

$text = "username:".$text1."<br>"."pass:".$text2."<br>"."<br>";

$file = fopen("newText_test.html","a");

fwrite($file, $text);

fclose($file);

echo $text ;

?>

#7

يمكنك استخدام هذا الصف

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;

public class JmeUrlEncoder {

	public static String encode(String s, String enc) throws IOException {
		ByteArrayOutputStream bOut = new ByteArrayOutputStream();
		DataOutputStream dOut = new DataOutputStream(bOut);
		StringBuffer ret = new StringBuffer(); // return value
		dOut.writeUTF(s);
		ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray());
		bIn.read();
		bIn.read();
		int c = bIn.read();
		while (c >= 0) {
			if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
					|| (c >= '0' && c <= '9') || c == '.' || c == '-'
					|| c == '*' || c == '_') {
				ret.append((char) c);
			} else if (c == ' ') {
				ret.append('+');
			} else {
				if (c < 128) {
					appendHex(c, ret);
				} else if (c < 224) {
					appendHex(c, ret);
					appendHex(bIn.read(), ret);
				} else if (c < 240) {
					appendHex(c, ret);
					appendHex(bIn.read(), ret);
					appendHex(bIn.read(), ret);
				}
			}
			c = bIn.read();
		}
		return ret.toString().toUpperCase();
	}

	private static void appendHex(int arg0, StringBuffer buff) {
		buff.append('%');
		if (arg0 < 16) {
			buff.append('0');
		}
		buff.append(Integer.toHexString(arg0));
	}
}

ملاحظة: لا تقوم بتحويل العنوان كاملا، فقط ال Parameters

مثلا اسم المستخدم، او اسم الكتاب....

و ليس العنوان بالكامل

تحياتي

1
#8

كيف ما فهمت :wacko: ؟؟

يا ريت توضح لي كيف استخدم الصف على التطبيق تبعي او تعدل في الكود اذا ما عليك امر.

اخواني انا اعتقد المشكلة هي مشكلة encode

حيث اني جربت ارسال هذه الشفرة من الجوال

%D8%B2%D9%85%D8%A8%D9%82%D9%87

الى صفحة البي اتش بي فكانت النتيجة جيدة جدا فوصلت باللغة العربية كتالي : زمبقه

واستخرجت الشفرة السابقه من هذا الموقع

http://meyerweb.com/eric/tools/dencoder/

مع العلم ان نسخة jad. والتي تعمل على الكمبيوتر لا يوجد فيها اية مشاكل فيمكن الارسال باللغة العربية ولانجليزية.

فاتمنى من اصحاب الخبرة التعديل على الكود السابق ويحل المشكلة لان خبرتي جدا قليلة

وفيما يلي الحقلين المستخدمين لادخال البيانات في الفورم

 private TextField inputfield; 
        private TextField inputfield2;

وهذا شكل الرابط مع طريقة GET في ارسال البيانات

url = generateGetUrl("http://h1.ripway.com/oneofmenf6/J2ME/j2me_php_test.php",inputfield.getString(),inputfield2.getString());

تم تعديل هذه المشاركة بواسطة زمبقه في 18 نوفمبر 2010 في 04:27

#9

خلاص انحلت المشكلة تجد الحل هنا ان شاء الله

/index.php?showtopic=232472

VideoNimbuzz.jar

تم تعديل هذه المشاركة بواسطة زمبقه في 22 نوفمبر 2010 في 01:31

#10

حلت المشكلة

VideoNimbuzz.jar

#11

انا جربت الـjar file بتاعك

لكن لم دخلت بيانات بيقولى جارى الاتصال

وقعد فتره وقالى حاول مره اخرى

وبالتالى لم يتصل

مش عارف بقا فيه ايه

هو حضرتك الموقع بتاعك شغال ؟؟

http://h1.ripway.com/oneofmenf6/J2ME/j2me_php_test.php

لانى لم بشغله من ع الجهاز مش بيشتغل

ممكن يكون دا السبب

Software Developer
Mahmoudkelany.com


 

#12

أخي إليك الكود خاصتك بعد التعديل وقد قمت برفع ملف الphp على سرفر وتجربة التطبيق وظهر العربي بدون أي مشكلة

وستجد أيضا كود الاتصال ب mysql data base ولكنه commented

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.io.*;
import java.util.*;
import java.lang.*;

public class Network extends MIDlet implements CommandListener
{

	Display display;
	Command exitCommand;
	Command updateCommand;
	Form screen;
	public TextField inputfield;
	TextField inputfield2;
	TextField outputfield;
	StringItem aboutme = new StringItem("", "");
	InputStream in = null;
	String url = new String();

	public Network()
	{

    	// Setup Display
    	display = Display.getDisplay(this);
    	exitCommand = new Command("اغلاق", Command.EXIT, 1);
    	updateCommand = new Command("دخول", Command.SCREEN, 2);

    	inputfield = new TextField(" اسم المستخدم:", "", 256, TextField.ANY);
    	inputfield2 = new TextField("كلمة السر :", "", 256, TextField.PASSWORD);
    	//String s=new String("arabic_string".getBytes(), "UTF-8"); 			
    	outputfield = new TextField("الحاله:", "جاهز", 256, TextField.UNEDITABLE);

    	screen = new Form("تسجيل الدخول ");

    	screen.append(inputfield);
    	screen.append(inputfield2);

    	screen.append(outputfield);
    	screen.append(aboutme);
    	screen.addCommand(exitCommand);
    	screen.addCommand(updateCommand);
    	screen.setCommandListener(this);




	}

	public void startApp()
	{
    	//Show the Window Form on the Screen
    	display.setCurrent(screen);

	}

	public void pauseApp()
	{
	}

	public void destroyApp(boolean unconditional)
	{
	}
public String URLEncoder(String str)
	{
    	if (str == null)
    	{
        	return null;
    	}

    	StringBuffer resultStr = new StringBuffer(str.length());
    	char tmpChar;

    	for (int ix = 0; ix < str.length(); ix++)
    	{
        	tmpChar = str.charAt(ix);
        	switch (tmpChar)
        	{
            	case ' ':
                	resultStr.append("%20");
                	break;
            	case '-':
                	resultStr.append("%2D");
                	break;
            	case '/':
                	resultStr.append("%2F");
                	break;
            	case ':':
                	resultStr.append("%3A");
                	break;
            	case '=':
                	resultStr.append("%3D");
                	break;
            	case '?':
                	resultStr.append("%3F");
                	break;
            	case '#':
                	resultStr.append("%23");
                	break;
            	case '\r':
                	resultStr.append("%0D");
                	break;
            	case '\n':
                	resultStr.append("%0A");
                	break;
            	default:
                	resultStr.append(tmpChar);
                	break;
        	}
    	}

    	String newstr = null;
    	try
    	{
        	newstr = new String(resultStr.toString().getBytes("UTF-8"), "UTF-8");
    	} catch (UnsupportedEncodingException ex)
    	{
        	ex.printStackTrace();
    	}
    	return newstr;
	}

	public void update_action()
	{

    	// Create a thread to actually connect to the webserver
    	Thread t = new Thread()
    	{

        	public void run()
        	{
            	//open connecttion
            	//,inputfield.getString(),inputfield2.getString()
            	try
            	{
                	outputfield.setString("جاري الاتصال ...");
//                	url = generateGetUrl("http://h1.ripway.com/oneofmenf6/J2ME/j2me_php_test.php", inputfield.getString(), inputfield2.getString());
                	url = new String("http://xxxx.com/demo/GetData1.php?user=".getBytes("UTF-8")) + URLEncoder(new String(inputfield.getString().getBytes("UTF-8")))+ new String("&password=".getBytes("UTF-8"))+URLEncoder(new String(inputfield2.getString().getBytes("UTF-8")));
              	//  System.out.print("\n" + url + "\n");
                	if (updateSite(url) == 1)
                	{
                    	outputfield.setString("تم التحديث");
                	} else
                	{
                    	outputfield.setString("فشل الدخوال. =(");
                	}

            	} catch (IOException e)
            	{
                	outputfield.setString("فشل الاتصال.  =(");
            	}
        	}
    	};

    	t.start();
	}

	public void commandAction(Command c, Displayable s)
	{

    	if (c == updateCommand)
    	{
        	update_action();
    	}

    	if (c == exitCommand)
    	{
        	destroyApp(false);
        	notifyDestroyed();
    	}


	}

	//Function that formats the url string coding (IE %20 for spaces)
//	public String generateGetUrl(String url, String text, String text2)
//	{
//    	String newUrl = new String();
//    	StringBuffer c = new StringBuffer(text);
//    	StringBuffer b = new StringBuffer(text2);
//
//
//
//
//    	newUrl = url + "?text=" + c.toString() + "&text2=" + b.toString();
//
//
//    	return newUrl.toString();
//
//	}

	// This function connects to the site using the HTTP GET method
	public int updateSite(String url) throws IOException
	{
    	HttpConnection conn = null;
    	DataOutputStream out = null;

    	try
    	{
        	conn = (HttpConnection) Connector.open(url);
        	conn.setRequestMethod(HttpConnection.GET);
        	conn.setRequestProperty("Connection", "close");


        	if (conn.getResponseCode() == HttpConnection.HTTP_OK)
        	{
            	//We connected to the site
            	return 1;
        	} else
        	{
            	//We didn't connect  =(
            	return 0;
        	}




    	} catch (IOException e)
    	{
        	System.out.print("فشل الاتصال بالسيرفر");
        	return 0;
    	}

	}
}

<?php

header('Content-Type: text/html; charset=utf-8');

$text1 = $_GET["user"]; 
$text2 = $_GET["password"]; 
if(isset($text1))
{

$text = "username:".$text1."<br>"."pass:".$text2."<br>"."<br>";
$file = fopen("newText_test.html","a"); 
fwrite($file, $text); 
fclose($file); 
}
else
{

$file = fopen("newText_test.html","r"); 
$text  = fread($file, filesize("newText_test.html")); 
fclose($file);
echo $text ; 
}



/*
$HostName = 'localhost';
$DBName = 'xxxxxxxxxxxxx';
$UserName = 'xxxxxxxxxxxxxxx';
$Password = '*************';


$Connect = mysql_connect($HostName, $UserName, $Password);
$Select = mysql_select_db($DBName, $Connect);

mysql_query("SET NAMES utf8");
$user = $_GET['user'];






$query = sprintf("INSERT INTO `users` (`user_name`) VALUES ('%s')",$user); 

$result = mysql_query($query);

// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
	$message = 'Invalid query: ' . mysql_error() . "\n";
	$message .= 'Whole query: ' . $query;
	die($message);
}
*/

?>
1
banner.jpg

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…