[]

Android Uygulamalar İçin Web Servis olarak Laravel Kullanışlımıdır ?

Merhaba ben bir twitter clonu yapmaya çalışıyorum.
WebServis OLarak php ve mysql kullanıyorum.
Fakat android den post ile gelen verimim sql sorgusunda parametre olarak kullanamadım.

misal

$id = $_POST["id"];

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='.$id.'");
$statement->execute();
$array = $statement->fetchAll(PDO::FETCH_ASSOC);
//$json = json_encode($array);
$result["employees"] = $array;
echo json_encode($result);

yukarıda ki gibi post ile gelen veriyi sql sorgusunda kullanamıyorum boş görünüyor.

BEnde laravel ile webservisimi yazmayı düşünüyorum fakat laravel öğrenmeye başlamadan laravel bu iş için uygunmudur bilen developerlara danışmak istedim.

Teşekkürler.

 
boş gelen nedir, $id mi boş geliyor? satır satır debug ettiniz mi nerede problem var diye.

önce $id'ye bakın, sonra sorguya.
  • aziz dostum jack  (04.11.19 16:41:34 ~ 16:42:06) 
Merhaba @aziz dostum jack
Sorunu bulamadım.

aşağıda php dosyamı paylaşıyorum.
post ile id webservisime geliyor sonra veritabanına gönderiyorum kayıt oluyor.
Yani id geliyor ve dolu.
Sonra id ile sql sorgusu yapıyorum fakat boş görünüyor.

2 gündür uğraşıyorum fakat çözüm bulamadım.

sorguda hata yok çünkü aşağıdaki gibi id bilgisini girdiğimde json çıktısı alabiliyorum.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='529'");

Yardımcı olursan çok sevinirim. stackoverflow da da sordum cevap alamadım.


github.com
  • aristotelesin berberi  (04.11.19 16:52:37) 
elinle id yazınca geliyorsa,

$id = $_POST["id"];

bu satırda problem vardır, android'den post method ile çağırdığına emin misin?

android'den bu servisi nasıl çağırdığını gösterirsen ona bakalım.
  • aziz dostum jack  (04.11.19 16:56:52 ~ 17:00:06) 
if($id != ""){
$sql = "INSERT INTO tablethree (name, twitid )
VALUES ('$extra', '$id')" ;
// use exec() because no results are returned
$conn->exec($sql);

}
@aziz dostum jack

Yukarıda kod ile, gelen id bilgisini veritabanıma kayıt ediyorum.
Bu kayıt işlemi verinin geldiğini kanıtlıyor.

Sonra aynı id bilgisi ile sql sorgusu yaptığımda boş görünüyor.
  • aristotelesin berberi  (04.11.19 17:01:38) 
o zaman select yaptığın yeri parametreli olarak dene,


$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid =:id");
$statement->execute(['id' => $id]);
$array = $statement->fetchAll(PDO::FETCH_ASSOC);
  • aziz dostum jack  (04.11.19 17:04:55) 
@aziz dostum jack
Heyecanlandım olur mu diye ama yine boş çıktı.

{"employees":[]}

Php post ile gelen veiriyi get ile gönderemiyor mu ?

Aşağıdaki gibi yaptığımda json çıktısı elde edebiliyorum.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='529'");
  • aristotelesin berberi  (04.11.19 17:15:53) 
gelen ve sonuç (gönderilen) birbirinden bağımsız post'la veya get ile data göndermenin sonuca etkisi yok.

burada problem şu ki $id geldiğine eminim diyorsun fakat o $id'yi select'e sokunca çalışmıyor diyorsun.

o zaman $id ile gelen veride problem var. gördüğüm kadarıyla veritabanınd id kolonu varchar tutuyorsun herhalde, belki sonunda bir boşluk filan vardır senin göremediğin.

insert ettiğinde de çalışıyordur ama boşluk olup olmadığını göremiyorsundur.

bunu anlayabilmek için,

$id = 529 deyip bir önceki cevabımda verdiğim sorgunun çalışıp çalışmadığını kontrol edebilirsin.

eğer çalışıyorsa $_post ile gelen veride problem var demektir.


ya da insert ettiğin tabloya gidip bak bakalım son eklenen twitid'nin sonunda veya başında herhangi bir boşluk var mı?
  • aziz dostum jack  (04.11.19 17:24:56 ~ 17:25:49) 
@aziz dostum jack


post ile gelen id string türünde , bu verinin kayıt olduğu sütun integer o yüzden bende gelen veriyi integere çevirdim veritabanına kayıt oldu fakat sql sorgum yine boş geldi.

$sayi = (int) $id;
YUkarıdaki şekilde integer yaptım ve id olan yerleri sayi değişkenimle değiştirdim.

ikinci söylediğini gelelim

dediğin şeyi daha önce yaptığımı söylemiştim.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='529'");
yukarıdaki şekilde sql sorgum çalışıyor ve json çıktısı alabiliyorum.


Peki aşağıdaki sql sorgusu neden çalışmıyor.

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid ='.$id.'");


1 neden id değişkeni boş olabilir.

cevap: id değişkeni boş değil çünkü veri tabanına kayıt oluyor ama sql sorgusunda işlevsiz oluyor.

2. Neden sql sorgusu hatalı olabilir.

Cevap bunu test etmek için WHERE twitid ='529' yaptığımnda sorgu çalışıyor ve json çıktısı alınabiliyor.

3. Neden gelen id eğer string ise ve kayıt olduğu tablo da integer ise veri gelmeyebilir.

Cevap gelen string türündeki id değişkenini integer çevirim denedim fakat durum değişmedi.


Şİmdi soruyorum başka neden varmı ?
  • aristotelesin berberi  (04.11.19 18:12:58) 
bir kere şimdi farkettim senin o kullandığın sql sorgusundaki nokta ile string toplama olayı zaten yanlış,

noktasız kullanman gerekiyor, noktalı kullandığında sorgu stringi şu hale geliyor,
imgbbb.com

bir de bu olay sql injection'a açık böyle kullanma, benim dediğimi kullan.

ya da ikinci yöntem,

$statement = $conn->prepare("SELECT name FROM tablethree WHERE twitid = :id");
$statement->bindParam( ":id", $id, PDO::PARAM_INT);
$statement->execute();
$array = $statement->fetchAll(PDO::FETCH_ASSOC);

diğer söylediklerin doğru evet bu dünyanın en stadart yapısı, veri alıp, sorgu çekme, mutlaka bir yerlerde bizim de göremediğimiz bir hata yapıyorsundur.
  • aziz dostum jack  (04.11.19 20:19:47 ~ 20:25:12) 
sandbox.onlinephpfunctions.com

bir tane de örnek hazırladım. execute diyerek sonuçları görebilirsin.
  • aziz dostum jack  (04.11.19 20:34:25) 
@aziz dostum jack aziz dostum sorunu buldum sql sorgusunda değil hata android tarafında şöyleki;
ben android de veri gönderiyorum fakat çekmeyi başka aktivitiy de yapıyorum fakat böyle olmamalı çünkü benim çekeceğim veri göndereceğim veri ile çekilcek o yüzden ben veri gönderdiğimde dönen cevabı aynı anda almalıyım.

bunu da çöyle fark ettim html form oluşturum veri gönderdim sonra sql sorgusu yaptım oldu alıp vermenin aynı anda olması gerektiğini de bunu yapınca fark ettim. Şimdi çok yordum kendimi ama yarın yapacağım.

Yardımların için çok teşekkür ediyorum sanada zahmet verdim.
beni twitterdan takip et lütfen iyi akşamlar.
twitter @mezbjen
  • aristotelesin berberi  (04.11.19 21:22:06) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.