vkladanie do db a vyberanie z db (ajax)

Programovacie jazyky, rady, poradňa...
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

vkladanie do db a vyberanie z db (ajax)

Príspevok od používateľa beluský »

Čawte hojkáci, dávno som vás neotravoval :)

mám problém a neviem kde je pes zakopaný...
nakódil som taký shoutboard na moje stránke

texty odosielam javascriptom, a vkladam ich do db pomocou php, korektne to funguje len vo FF

v IE a Opere sa deje toto...
opera: vloží sa vždy 'undefined'
ie: ak vkladam nieco s diakritikov, totálne ju ingoruje... napr. ak vkladam 'beluský sa volám' tak vloží len 'belusk'... tento isty problem sa prejavuje aj pri prihlasovani, ktory je tiez robeny ajaxom... v db som ako 'beluský' ale ked sa chcem prihlasit ako 'beluský' v IE tak tvrdi ze uzivatel neexistuje, pretoze to berie ako 'belusk'.....pricom vo FF a Opere to ide

stránka www.fibel.yweb.sk ... (meno: hojko, heslo: hojko)

dakujem za akekolvek pripomienky a rady
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Príspevok od používateľa Mek »

ked odosielas nejake hodnoty cez javascript, tak v query stringu musis tie hodnoty prehnat urlencode(), aby ti to zobralo spravne vsetko, aj medzery etc., napr.:

Kód: Vybrať všetko

function urlencode(str) {
str = encodeURIComponent(str);
str = str_replace(str,'+', '%2B');
str = str_replace(str,'%20', '+');
str = str_replace(str,'*', '%2A');
str = str_replace(str,'/', '%2F');
str = str_replace(str,'@', '%40');
return str;
}
a potom vo funkcii, napr.:

Kód: Vybrať všetko

function password(passwd)
{
var request = getHTTPObject(); //vrati XHR
request.onreadystatechange=function()
	{
		if ((request.readyState==4) && (request.status==200))
		{
			return true;
		}
	}
request.open("POST","password.php",true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
data="password="+urlencode(passwd);
request.send(data);
}
takto to robim ja :wink:

//edit: este ta funkcia str_replace:

Kód: Vybrať všetko

function str_replace(inputString, fromString, toString) {
   // Goes through the inputString and replaces every occurrence of fromString with toString
   var temp = inputString;
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      // Find a string that doesn't exist in the inputString to be used
      // as an "inbetween" string
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      } // Keep on going until we build an "inbetween" string that doesn't exist
      // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      // Next, replace the "inbetween" string with the "toString"
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } // Ends the check to see if the string being replaced is part of the replacement string or not
   return temp; // Send the updated string back to the user
}
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Určite máš všade dobre nastavené kódovanie pri práci s DB?
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

áno, pretože z nej vyberám články a vkladám komentáre... všetko vrčí, až na toto.... všetko mám UTF-8
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Inak to undefined v Opere bude pravdepodobne súvisieť s javascriptom (takže to tam skontroluj).
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

Kód: Vybrať všetko

var xmlHttp;
    function send_msg(user, text) {
      xmlHttp = GetXmlHttpObject()
       
      if (xmlHttp == null) {
        alert ("Browser does not support HTTP Request")
        return
      }
      
      var url="vlozitspravu.php?user="+user+"&text="+text
      xmlHttp.onreadystatechange = go_shout
      
      xmlHttp.open("GET",url,true)
      xmlHttp.send(null)     
    }
    function go_shout() {
      if (xmlHttp.readyState==1) {
        document.getElementById("shout").innerHTML = '<img src="../images/ajax-loader.gif" align="center" />';
      }
      if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
        document.getElementById("shout").innerHTML = xmlHttp.responseText
      }
    }

Kód: Vybrať všetko

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}
ale nerozumiem tomu, prečo to a jednom prehliadači ide bez problémov a v tom ďalšom vôbec... som si doteraz myslel, že maximálne rozdiely sú tak pri zobrazovaní pomocou css :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Do send_msg by som pridal

Kód: Vybrať všetko

alert(user + "\n" + text);
Tak zistíš, či sa tam v Opere dostanú dobré informácie, alebo tam príde to undefined.
Mek
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4661
Registrovaný: 23 mar 2005, 23:00
Bydlisko: ZA <-> TN
Kontaktovať používateľa:

Príspevok od používateľa Mek »

zhodou okolnosti som zazil prave tiez to, ze pri vkladani do DB sa usekol retazec na mieste, kde malo nasledovat nejake utf-8 pismenko, presne ako beluský popisuje.
a su dva sposoby, ako to riesit - bud takto vkladany retazec tesne pred vlozenim prehnat php fciou utf8_encode(), alebo pred vkladanim poslat mysql dotaz SET NAMES 'cp1250' a po vkladani nastavit naspat SET NAMES 'utf8'
HTH
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

nakoniec som ten ajax odtial vyhodil a ide to dobre, tým alertom som zistil, ta to odosiela dobre... a ani to utf8 encode nepomohlo tak neviem, vyrieslil som to neajaxom :/
Napísať odpoveď