Jump to content

C# / Php / Json Veri Alış Verişi


muratboy31
 Share

Recommended Posts

Merhaba arkadaşlar,

 

aşağıdaki php sayfasın nasıl string (txtKeyword) gönderebilirim ?

<?
    header('Content-Type: text/html; charset=utf-8');
    $objConnect = mysql_connect("localhost","user","pass");
    $objDB = mysql_select_db("deneme");    
    mysql_query("SET NAMES utf8");

    $strKeyword = $_POST["txtKeyword"];
    $strSQL = "SELECT * FROM Employee WHERE FirstName LIKE '%".$strKeyword."%' ORDER BY FirstName ASC ";

    $objQuery = mysql_query($strSQL);
    $intNumField = mysql_num_fields($objQuery);
    $resultArray = array();
    while($obResult = mysql_fetch_array($objQuery))
    {
        $arrCol = array();
        for($i=0;$i<$intNumField;$i++)
        {
            $arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i];
        }
        array_push($resultArray,$arrCol);
    }

    mysql_close($objConnect);
    
    echo json_encode($resultArray);
?>
Edited by muratboy31
Link to comment
Share on other sites

c# kısmı:
 
        
public static string base64encode(string text)
        {
            var textByte = System.Text.Encoding.UTF8.GetBytes(text);
            return System.Convert.ToBase64String(textByte);
        }


        public static string GetPageSource(string url)
        {
            var webrequest = (HttpWebRequest)WebRequest.Create(url);
            webrequest.Method = "GET";
            var webResponse = (HttpWebResponse)webrequest.GetResponse();
            string responseHtml;
            using (var responseStream = new StreamReader(webResponse.GetResponseStream()))
            {
                responseHtml = responseStream.ReadToEnd().Trim();
            }
                    
            return responseHtml;
        }
string text = textBox1.Text;
string enc_text = base64encode(text);
string GELEN_JSON = GetPageSource("http://www.site.com/sayfa.php?txtKeyword=" + enc_text);

php kısmı:

 

<?
    header('Content-Type: text/html; charset=utf-8');
    $objConnect = mysql_connect("localhost","user","pass");
    $objDB = mysql_select_db("deneme");    
    mysql_query("SET NAMES utf8");


    $strKeyword = base64_decode($_GET["txtKeyword"]);
    $strSQL = "SELECT * FROM Employee WHERE FirstName LIKE '%".$strKeyword."%' ORDER BY FirstName ASC ";


    $objQuery = mysql_query($strSQL);
    $intNumField = mysql_num_fields($objQuery);
    $resultArray = array();
    while($obResult = mysql_fetch_array($objQuery))
    {
        $arrCol = array();
        for($i=0;$i<$intNumField;$i++)
        {
            $arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i];
        }
        array_push($resultArray,$arrCol);
    }


    mysql_close($objConnect);
    
    echo json_encode($resultArray);
?>
Link to comment
Share on other sites

Teşekkürler Kintaro,

 

ancak nedense tüm listeyi getiriyor !

sadece murat olanlar gelmiyor ;

try
            {
                using (WebClient client = new WebClient())
                {
                    string data = GetPageSource("http://172.16.0.6/rehber/rehber.php?txtKeyword=" + base64encode("Murat"));

                    List<Employee> Employees = JsonConvert.DeserializeObject<List<Employee>>(System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(data)));

                    foreach (Employee Employee in Employees)
                    {
                        ListBoxItem item = new ListBoxItem();
                        item.Text = Employee.FirstName.ToString();
                        listBoxAdv1.Items.Add(item);
                    }
                    label1.Text = listBoxAdv1.Items.Count.ToString();
                }
            }
            catch (Exception hataTuru)
            {
                MessageBox.Show(hataTuru.ToString());
            }
Link to comment
Share on other sites

yeni bir php dosyası yaratıp aşağıdaki kodları yazın ve web sayfasından şu linki açıp o sayfayı çalıştırın bakalım ne sonuç verecek:

http://172.16.0.6/rehber/yenisayfa.php?txtKeyword=TXVyYXQ=
<?
        header('Content-Type: text/html; charset=utf-8');
        $objConnect = mysql_connect("localhost","user","pass");
        $objDB = mysql_select_db("deneme");    
        mysql_query("SET NAMES utf8");     
     
        $strKeyword = base64_decode($GET["txtKeyword"]);
        $strSQL = "SELECT * FROM Employee WHERE FirstName LIKE '".$strKeyword."' ORDER BY FirstName ASC ";     
     
        $objQuery = mysql_query($strSQL);

        echo "<table><tr><td>İsim</td><td>Soyisim</td></tr>";
        
        while($veri = mysql_fetch_array($strSQL))
        {
         $isim = $veri["FirstName"];
         $soyisim = $veri["Surname"];
         echo "<tr><td>$isim</td><td>$soyisim</td></tr>";
        }

        echo "</table>";
?>
Link to comment
Share on other sites

evet ezberden yazdım, denemedim gözden kaçmış :D

 

update, insert gibi diğer komutlar için aynı yöntemi kullanabiliriz. bu sefer get ile aldığımız veri komple sql sorgusu olacak yani şu şekilde:

 

C#:

GetPageSource("http://172.16.0.6/rehber/rehber.php?txtKeyword=" + base64encode("UPDATE ayarlar SET firma_id='3'"));

PHP:

$strKeyword = base64_decode($_GET["txtKeyword"]);
$sorgu = mysql_query($strKeyword);


if ($sorgu == FALSE)
{
    echo "sql sorgusunda hata";
}
else
{
    echo "sorgu başarılı";
}
Link to comment
Share on other sites

evet güzel düşünmüşsün, buna SQL Injection deniyor, Şu şekilde koruma sağlayabilirsiniz:

$temizlenmis_veri = mysql_real_escape_string($gelen_text);
mysql_query($temizlenmis_veri);
eğer bu yapılmazsa yeni sorgu olarak ya da giden sorguya ek yapılarak veritabanında istenilen işlem yapılabilir.
 
ek güvenlik olarak ise benzersiz bir key kullanabilirsiniz. örn:
 
C#
GetPageSource("www.site.com/sayfa.php?txtVeri=1430qwdq34=&gizli_key=239048923049032fjwdeıjfn");
PHP:
if ($_GET['gizli_key'] == "239048923049032fjwdeıjfn")
{
     // çalışacak veriler
}
else
{
    echo "doğrulama başarısız";
}
hala güvensiz olduğunu düşünürseniz gizli_key'i de blowfish ile şifreleyebilirsiniz :)
Link to comment
Share on other sites

Teşekkürler Kintaro,

 

aslında aklıma daha güvenli birşey geldi, yalnız $sorgu = mysql_query($strLogin); sorgusunu nasıl göndermem gerekir, true yada false dönmesi için ?

veri tabınında user tablosunda kullanı adı ve şifre kayıtlı olcak.

        $strKeyword = base64_decode($_GET["txtKeyword"]);
	$strLogin = base64_decode($_GET["txtLogin"]);

     $sorgu = mysql_query($strLogin);
     if ($sorgu == FALSE)
     {
      echo "Kullanıcı Adı veya Şifre Hatalı";
     }
      else
     {
      mysql_query($strKeyword);
     }
Edited by muratboy31
Link to comment
Share on other sites

C#

GetPageSource("http://www.site.com/sayfa.php?textWord=" + textBox1.Text + "&user=kintaro&pass=123456);

PHP

$user = base64_decode($_GET["user"]);
$pass = base64_decode($_GET["pass"]);

$sorgu = mysql_query("SELECT * FROM users WHERE user='$user' AND pass='$pass'"); // gelen kullanıcı adı ve şifre ile bir kullanıcı mevcut mu diye bak

if (mysql_num_rows($sorgu) > 0) // sorgu sonucunda dönen satır sayısı 0 dan büyükse
{
    // çalışacak kodlar
}
else
{
    echo "user pass hatalı";
}

user ve pass'ı ben burada direk gönderip/aldım. ama şifreler genelde veritabanında md5 ile tutulur, yine base64 de kullanabilirsiniz. aklınızda olsun.

Link to comment
Share on other sites

string sorgu = GetPageSource("http://www.site.com/sayfa.php?textWord=" + textBox1.Text + "&user=kintaro&pass=123456);

if (sorgu == "user pass hatalı")
{
    MessageBox.Show("hatalı giriş");
}
else
{
    string json = sorgu;
    jsonDecode... // ya da ne tür bir işleminiz varsa
}
Link to comment
Share on other sites

Burda ne yanlış olabilir ?

<?
        header('Content-Type: text/html; charset=utf-8');
        $objConnect = mysql_connect("localhost","user","pass");
        $objDB = mysql_select_db("rehberdeneme");    
        mysql_query("SET NAMES utf8");
     
     
        $strKeyword = base64_decode($_GET["txtKeyword"]);
        $strSQL = "SELECT * FROM Employee WHERE EmployeeID = '".$strKeyword."';
     
     
        $objQuery = mysql_query($strSQL);
        $intNumField = mysql_num_fields($objQuery);
        $resultArray = array();
        while($obResult = mysql_fetch_array($objQuery))
        {
            $arrCol = array();
            for($i=0;$i<$intNumField;$i++)
            {
                $arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i];
            }
            array_push($resultArray,$arrCol);
        }
     
     
        mysql_close($objConnect);
        
        echo base64_encode(json_encode($resultArray));
    ?>
Edited by muratboy31
Link to comment
Share on other sites

Merhaba,

 

ufak bir sorum var, ben hem kontrol yapmak istiyorum hemde bazı bilgiler almak istiyorum eğer o kullanıcı mevcutsa ancak yapamadım !

<?
        header('Content-Type: text/html; charset=utf-8');
        $objConnect = mysql_connect("localhost","root","pass");
        $objDB = mysql_select_db("deneme");    
        mysql_query("SET NAMES utf8");
   
        $user = base64_decode($_GET["user"]);
    	$pass = base64_decode($_GET["pass"]);
     
    	$sorgu = mysql_query("SELECT * FROM Users WHERE UserName='$user' AND Pass='$pass'");         
     
    if (mysql_num_rows($sorgu) > 0)
    {
        echo "success";
	while($veri = mysql_fetch_array($sorgu ))
        {
         echo $veri["Auth"];
        }
    }
    else
    {
	echo "error";
    } 
    ?>
Edited by muratboy31
Link to comment
Share on other sites

Teşekkürler, peki aynı anda birden fazla echo döndürürsek bunları nasıl yakalayabiliriz C# ta, mesela ben hem success hemde Auth döndürmek istiyorum ;

<?
        header('Content-Type: text/html; charset=utf-8');
        $objConnect = mysql_connect("localhost","root","pass");
        $objDB = mysql_select_db("deneme");    
        mysql_query("SET NAMES utf8");
   
        $user = base64_decode($_GET["user"]);
    	$pass = base64_decode($_GET["pass"]);
     
    	$sorgu = mysql_query("SELECT * FROM Users WHERE UserName='$user' AND Pass='$pass'");         
     
    if (mysql_num_rows($sorgu) > 0)
    {
        echo "success"
           while ($row = mysql_fetch_assoc($sorgu)) 
           {
            echo $row['Auth'];
           }
    }
    else
    {
	echo "error";
    }
    ?>

C# ta böyle çekebiliyorum error yada success ama bu sefer Auth ta çekecem ;

if (sorgu == "error")
                    {
                        MessageShow("Hatalı Giriş !");
                    }
Edited by muratboy31
Link to comment
Share on other sites

dönecek kelimeleri yanyana echo edip daha sonra c# tarafında string.Split ile ayırıp kullanabilirsiniz.

 

                string kelimeler = "selam;naber;neyaptin";
                string[] parcala = kelimeler.Split(';');


                foreach (string  kelime in parcala)
                {
                    MessageBox.Show(kelime);
                }
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...