Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

greška sa $_POST promenljivom

[es] :: PHP :: greška sa $_POST promenljivom

[ Pregleda: 2500 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vojabgd

Član broj: 224295
Poruke: 21
*.adsl.eunet.rs.



Profil

icon greška sa $_POST promenljivom25.10.2009. u 14:44 - pre 176 meseci
Pozdrav. Potrebna mi je pomoć oko jedne forme, neće da mi učita promenljivu. Treba da vrednost ad_location_city i ad_location_country stavim u bazu. Ukoliko korisnik ne promeni vrednosti ova 2 dropdowna, sve je u redu i obe vrednosti su u bazi.
Međutim, ako se promeni država pokreće se ajax funkcija load_cities_ad koja izbaci odgovarajuće gradove, ali kad pošaljem formu $_POST['ad_location_city'] mi je prazna, dok je $_POST['ad_location_country'] uvek u redu.

Evo koda:
create.php
Code:
<div id="ad_location_city_div">
          <select name="ad_location_city" id="ad_location_city" class="create_ad_input"> 
        <?php
        $uq=mysql_query("SELECT cw.*,u.country FROM countries_world AS cw,users AS u WHERE cw.id=u.country AND u.id='$userid'");
        $uf=mysql_fetch_array($uq);
        $country_id=$uf['id'];
        $q=mysql_query("SELECT * FROM cities_world WHERE pid='$country_id'");
        if(mysql_num_rows($q)>0) {
       while($f=mysql_fetch_array($q)) {
       
       echo '<option value="'.$f['id'].'">'.$f['name'].'</option>';
       
       }
      }
      
     else {
      
      echo '<option value="">City</option>';
      }
       ?>
      </select>
       </div>

     <select name="ad_location_country" id="ad_location_country" class="create_ad_input" [red]onchange="load_cities_ad(this.value,'ads')"[/red]>
     <?php
      $cq=mysql_query("SELECT * FROM countries_world ORDER BY name ASC");
 
      while($cf=mysql_fetch_array($cq)) {
       $uq=mysql_query("SELECT country FROM users WHERE id='$userid'");
       $uf=mysql_fetch_array($uq);
       if($ad_country!='') {
          if($cf['id']==$ad_country) {
           $selected=' selected="selected"';
          }
          else {
           $selected='';
          }
       }
       else {
        if($cf['id']==$uf['country']) {
         $selected=' selected="selected"';
        }
        else {
         $selected='';
        }
       
      }
     
      
       echo '<option value="'.$cf['id'].'"'.$selected.'>'.$cf['name'].'</option>';
   
      } 
      ?>
      </select>



ajax funkcija:
Code:

function load_cities_ad(country) {
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="http://www.wwiyo.com/ajax/load_cities_ad.php";
var checkpars="country="+country;
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", checkpars.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4)
   {
   document.getElementById('ad_location_city_div').innerHTML=xmlhttp.responseText;
   }
 }
xmlhttp.send(checkpars);
}


ajax fajl:
Code:

   $country=$_POST['country'];
   $q=mysql_query("SELECT * FROM cities WHERE pid='$country' ORDER BY name ASC");
   echo '<select name="ad_location_city" id="ad_location_city">';

 if(mysql_num_rows($q)>0) {

   while($f=mysql_fetch_array($q)) {
 
    echo '<option value="'.$f['id'].'">'.$f['name'].'</option>';
    
    }
    
 }

 else {

  echo '<option value="">City</option>';
 }

 echo '</select>';



Izvinjavam se ako sam malo konfuzno objasnio u čemu je problem.
Hvala unapred!:)
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: greška sa $_POST promenljivom25.10.2009. u 16:12 - pre 176 meseci
Ne znam dal koristiš Firebug, al' bilo bi dobro da s njim proveriš šta output-uje taj ajax_handler. Meni se čini da je problem u ovom delu: while($f=mysql_fetch_array($q)). Ti podatke fetch-uješ kao niz sa numeričkim indeksima, a posle njegove članove pozivaš kao da je u pitanju asocijativni niz: $f['id'], $f['name']. Probaj da umesto mysql_fetch_array staviš mysql_fetch_assoc.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
79.101.163.*

Sajt: https://avramovic.info


+46 Profil

icon Re: greška sa $_POST promenljivom25.10.2009. u 16:34 - pre 176 meseci
mysql_fetch_array() vraća niz i sa numeričkim i sa asocijativnim indeksima

edit: Po defaultu, ali drugim argumentom može da se promeni to ponašanje funkcije.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

vojabgd

Član broj: 224295
Poruke: 21
*.adsl.eunet.rs.



Profil

icon Re: greška sa $_POST promenljivom25.10.2009. u 21:53 - pre 176 meseci
sa mysql_fetch_assoc mi nije vratio ništa, a sve je ostalo isto sa mysql_fetch_array kad sam upisao umesto $f['id'] $f['0'].
Nekako sam rešio problem. Pošto u javascript prepoznaje vrednosti, dodao sam <input type"hidden" name="city_id" id="city_id" value=""> i onda na submit dugme dodao onclick="document.getElementById('city_id').value=document.getElementById('ad_city_location').value".
I onda u php skripti pozovem $_POST['city_id'] i radi. :)))
 
Odgovor na temu

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.telenor.co.yu.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Re: greška sa $_POST promenljivom25.10.2009. u 22:20 - pre 176 meseci
A jesi probao da prilikom submit-a da var_dump()-ujes $_POST? Cisto da vidis sta je prosledjeno? (u verziji pre ovog JS dirty hack-a)
 
Odgovor na temu

vojabgd

Član broj: 224295
Poruke: 21
91.148.84.*



Profil

icon Re: greška sa $_POST promenljivom26.10.2009. u 17:02 - pre 176 meseci
Sad sam var_dump()-ovao i ad_location_city uopšte nije prosleđeno. Mislim da je problem u tome što pri promeni države učitavam ceo dropdown sa gradovima ajax requestom u određeni div, pa ga verovatno ne pošalje kao deo forme. Ali ne može drukčije pošto IE ne podržava <select> innerHTML.
 
Odgovor na temu

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1123
93.87.215.*

Sajt: www.gvozden.info


+68 Profil

icon Re: greška sa $_POST promenljivom26.10.2009. u 17:32 - pre 176 meseci
Nije mi bas jasno ovo zadnje,ali ukoliko je problem samo do IE onda je problem resiv.
IE ne podrzava to direktno, ali postoje skripte koj to rade, a mozda je najbolje da iskoristis jQuery za tako nesto.
moraces da primis podatke, napravis element, u njega ubacis podatke i setujes vrednost koja ti je potrebna.

Pogledacu u svojoj zbirci imam li ovakve funkcije...
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: greška sa $_POST promenljivom30.10.2009. u 21:31 - pre 176 meseci
1.
Offtopic, ali moram da te upozorim:
Code:
   
$country=$_POST['country'];
$q=mysql_query("SELECT * FROM cities WHERE pid='$country' ORDER BY name ASC");


ti je sql injection ko vrata. Apsolutno nikad nemoj dozvoliti ovakve greske.

2.
Nikad ne koristi mesanje php-a i html-a. Da, znam da moze, ali gledaj da to izbegnes jer je kasnije mnogo lakse editovati html fajl posebno.

3.
Koristi smarty dok ne napravis svoj parser. Ja sam licno bio nezadovoljan i sam sam 'sklepao' meni upotrebljiviju klasu.

4.
Nikad se ne oslanjaj da ce polja u $_post zaista postojati. Najjednostavnija odbrana od pametnjakovica je npr. ovo:
Code:

if ( !isset($_POST['country'] ) {
   require_once('_nekiFajl.html') ;
} else {
   ....//logika programa
}


U ovom slucaju jednu istu skriptu mozes koristiti i kad korisnik prvi put dodje na stranicu (ispise mu se forma), i kad je vec popunio podatke. Ako je firebug-om nesto menjao, opet dobije formu.
</offtopic>

Voleo bih da ti pomognem, ali ja vec jako dugo koristim jquery za sve. Imao sam slican problem sa IE (jer mi sajt 100% radi pod ajax-om) i bilo je to sto nisam stavio method='post'. jquery je to na silu pokusavao da upise, ali nije pomagalo kod IE. Inace se svi elementi dinamicki kreiraju pa mi nije jasno zasto ti ne radi.
 
Odgovor na temu

programer.master
krstarica
bg

Član broj: 235042
Poruke: 25
*.com
Via: [es] mailing liste



Profil

icon Re: greška sa $_POST promenljivom01.11.2009. u 22:29 - pre 176 meseci
>

Moraces ceo combo tj select sa svim option-s da napravis kao respond preko
ajaxa inace innerHTML u select nece u ie sto si i sam zakljucio..

--0016364d21a7180458047756ccd7
Content-Type: text/html; charset=ISO-8859-1

<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div class="h5">
Ne menjajte sledece dve linije ukoliko odgovarate putem emaila!<br>
esauth:379600:49b706f4891faa0cf285904595dc7417<br>
 
Odgovor na temu

vojabgd

Član broj: 224295
Poruke: 21
*.adsl.eunet.rs.



Profil

icon Re: greška sa $_POST promenljivom02.11.2009. u 22:47 - pre 176 meseci
@mitke013
Hvala na savetima. Radim sa php-om tek godinu dana, tako da još nisam koristio smarty.

@programer.master
Kako to da uradim? Do sad sam uglavnom ovako ispisivao ajax response:
Code:

xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4)
   {
   document.getElementById(id).innerHTML=xmlhttp.responseText;
   }
 }
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: greška sa $_POST promenljivom07.11.2009. u 00:02 - pre 176 meseci
Moj ti je savet da u potpunosti batalis ajax na klasican nacin vec da koristis jQuery. Kad jednom savladas kako se koristi (par dana), veruj da vise nikad neces praviti sajtove na klasican nacin.

Dacu ti primer kako se preko ajax-a ubaci neki element koristeci jQuery:
Code:

<head>
$(document).ready(function(){  // ako ne znas sta znaci ovo, ostavi tako dok ne naucis sta su dom elementi i body onload event
  $('#test').load('demo.php');  // ovaj deo ce putem ajax-a da u donji div ispise rezultat koji vrati demo.php . '#test' je id elementa u koji zelis da upises rezultat
});  // ovo samo zatvara zagrade iz prvog reda. Cela logika je zapravo samo drugi red

</head>

<body>
<div id="test">
Bezveze tekst koji ce brzo biti prebrisan
</div>

a u demo.php stavis npr.
echo '<select>';
foreach($nekiArray as $key=>$value){
  echo '<option value="' . $key . '">'.$value.'</option>' ;
}
echo '</select>' ;

To je sve!

Naravno, php kod se ovako ne pise pravilno ali sam uprostio da bi kao pocetnik lakse shvatio. Veruj mi, kao profesionalnom programeru, izmisljanje tople vode te nece nigde dovesti. jQuery je genijalna stvar i sto ga pre naucis, bice ti mnogo lakse da napravis BILO sta. Ja sve moje programe pravim da rade preko ajax-a jer je bas, bas toliko jednostavno.

A da ne pricam o svim onim fancy efektima.

 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.dynamic.dsl.t-2.net.



+18 Profil

icon Re: greška sa $_POST promenljivom07.11.2009. u 11:09 - pre 176 meseci
"...izmisljanje tople vode te nece nigde dovesti..."

da nije bilo izmisljanja tople vode, PHP-a ne bi ni bilo...
 
Odgovor na temu

vojabgd

Član broj: 224295
Poruke: 21
*.adsl.eunet.rs.



Profil

icon Re: greška sa $_POST promenljivom08.11.2009. u 00:56 - pre 176 meseci
Dobro, nisam baš toliki početnik, znam šta je onload i dom elementi :))
Juče sam počeo sa jquery-jem, i baš je praktičan.

Odosmo sad u offtopic, ali zanima me kako bi pravilno ispisao npr ovaj kod što si stavio u demo.php.
Uglavnom pišem tako i sav se pogubim kad je neki malo duži kod.
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: greška sa $_POST promenljivom08.11.2009. u 01:41 - pre 176 meseci
Namerno sam skratio da bi shvatio lakse. Elem, osnovno je da ne mesas php i html, pa bi onaj kod izgledao npr. ovako:

Code:

// demo.php
// Recimo da korisniku treba da das listu svih kompanija; ovo je samo primer pa ti prepravi
$allCompanies = Companies::getAll() ;  // koristio sam klasu koja ce mi vratiti vrednosti u obliku array-a, gde je $key id kompanije, $value je ime. Tj. array(1=>'Telenor', 2=>'Telekom')..  itd
require('_demo.html') ;  // html fajl za prikaz. Ovo treba samo dizajneru, tj. tebi ako ga nemas. Ali osnovno je da to razdvojis

// fajl _demo.html

<select name="company">
<?php
  foreach($allCompanies as $companyID=>$companyName) {  ?>
   <option value="<?php echo $companyID;?>"><?php echo $companyName;?></option>
  <?php }   // ne moras koristiti } , vec mozes i kombinaciju  foreach(.... ):  i endforeach; Pogledaj sintaksu na netu    ?>
</select>


Ovaj kod ima jednu manu, a to je da ne mozes da odredis koja je unapred selektovana opcija. Da bi to resio, probaj ovo:
Code:

// demo.php
// dodaj pre require komande sledeci red:
$preselectedValue = 2 ;

// _demo.html

<select name="company">
<?php
  foreach($allCompanies as $companyID=>$companyName) { 
    $selected = $preselectedValue==$companyID ? 'selected="selected" : '' ; ?>
   <option <?php echo $selected;?>  value="<?php echo $companyID;?>"><?php echo $companyName;?></option>
  <?php }   // ne moras koristiti } , vec mozes i kombinaciju  foreach(.... ):  i endforeach; Pogledaj sintaksu na netu    ?>
</select>


Vidis razliku? U $preselectedValue stavis id kompanije za koju zelis da bude vec odabrana. Ternary operator (prouci obavezno) u redu $selected=..... ce dobiti html tag za selektovan element samo ako je $preselectedValue jednak $companyID vrednosti.

Ako si ukapirao, sad prelazim na brutalnosti :)

Zamisli da imas stranicu za koju zelis da kad korisnik prvi put dodje, ispise mu praznu formu. Kad upise podatke, ti uradis validaciju i ako nesto ne valja, ispises mu istu formu ali sa podacima koje je uneo, plus mu dodas i opis greske. Pogledaj ovo:

Code:

// demo.php

if (empty($_POST)){  // ako prvi put dodje na stranicu, $_POST je prazan (uglavnom, ali da ne komplikujem previse)
  require('_demo.html') ;  // zato mu samo prikazi praznu formu
} else {
$value = $_POST ;  // u suprotnom, korisnik je nesto uneo. Nas interesuje samo polje 'ime', a radicemo sa kopijom 
if (strlen($value['ime']) < 10) {  // ako je ime prekratko, 
$title['ime'] = 'Prekratko ime';  // u $title['ime'] dodaj opis greske
require('_demo.html') ;  // i ispisi mu razlog
} else {

// ovde je vec sve u redu
}

// demo.html
<form action="">
<input name="ime" 
value="<?php echo isset($value['ime']) ? $value['ime'] : 'Upisi ime';?>" 
title="<?php echo isset($title['ime']) ? $title['ime'] : '';?>" />
</form>


Objasnjenje: kad prvi put dodje, promenljiva $value['ime'] ne postoji pa ce ternary operator da ispise u tom polju 'Upisi ime'. To je default tekst. Kad korisnik upise nesto i uradi submit(dodaj negde to polje), zbog toga sto je action="" ucitace se ista stranica na kojoj si bio. Tada $_POST nije prazan i program ce preci na liniju 4 tj. $value = $_POST ; .

Ako je ime krace od 10 znakova, dodace se objasnjenje greske tj. $title['ime'] = 'Prekratko ime'; Opet se ucita html, ali se sad ispise tekst koji je korisnik uneo a title tog polja je opis greske. Valjda nije komplikovano previse?

I btw: kad koristis <input> elemente i zelis da ti php uradi ispis za value tog elementa, obavezno koristi komandu htmlentities.

Primer; ako uradis <input value="<?php echo $text;?>" /> a u toj promenljivoj postoji navodnik ili neki javascript, dolazis u problem. Probaj da u gornjem primeru to uradis. Nisam hteo da komplikujem kod, ali ako si ga savladao, prepravi liniju za value u :

value="<?php echo isset($value['ime']) ? htmlentities($value['ime'], ENT_QUOTES, 'utf-8') : 'Upisi ime';?>"

Red:
if (empty($_POST)){ // ako prvi put dodje na stranicu, $_POST je prazan (uglavnom, ali da ne komplikujem previse)

ti uglavnom nece praviti problem. Ali ako ocekujes posetu problematicnih likova, probaj sledece:
Code:

if ( ! isset($_POST['ime'] or ! isset($_POST['prezime'] ) {


Na ovaj nacin si siguran da cak iako je nekom menjao imena <input> elemenata, nista nece uraditi. Nadam se da sam pomogao.

 
Odgovor na temu

vojabgd

Član broj: 224295
Poruke: 21
*.adsl.eunet.rs.



Profil

icon Re: greška sa $_POST promenljivom09.11.2009. u 16:04 - pre 176 meseci
Skapirao sam sve, hvala puno.
 
Odgovor na temu

[es] :: PHP :: greška sa $_POST promenljivom

[ Pregleda: 2500 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.