onreadystatechange Problem mit Firefox 5

christhai

Grünschnabel
Hallo aus Thailand!

ich benötige eure Hilfe. Beim eingeben einer Bankleitzahl soll der Bankname automatisch in ein Feld geschrieben werden (aus SQL Datenbank), bei Mehrfachergebnissen als dropdown. Beim Absenden des Formulars geht bei IE alles prima, Firefox kennt die Variable "Bank" nicht**** Habt ihr eine Idee, was falsch läuft?

Hier mein Ajax script:

Java:
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 
 
 
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}

und hier meine PHP Datei :

PHP:
$q=$_GET["q"];


  $zugang=mysql_connect(blablub);
 mysql_select_db('database') or die ("Auswahl der Datenbank fehlgeschlagen");

$sql="SELECT * FROM banken WHERE blz = '".$q."'";

$result = mysql_query($sql);

if (mysql_num_rows($result)==1){
$row = mysql_fetch_array($result);
    echo '<tr><td><input type="text" name="bank" size="20" maxlength="40" value="'.$row['bankname'].'" /></td></tr>';
}
if (mysql_num_rows($result)>1){
echo '<tr><td><select name="bank">';
    while($row = mysql_fetch_array($result))
  {
   echo'<option>'.$row['bankname'].'</option>';
  }
  echo'</select></td></tr>';
}
if (mysql_num_rows($result)==0){
echo '<tr><td><input type="text" name="bank" size="20" maxlength="40" value="" /></td></tr>';
}

Für jede Hilfe bin ich sehr dankbar!

Viele Grüße

Sumano
 
Wo benutzt du denn die JS-Variable "Bank"?
Die habe ich zumindest in deinem Code nicht gefunden.

PHP:
$sql="SELECT * FROM banken WHERE blz = '".$q."'";
Ich hoffe doch, dass das nicht für eine reale Bank ist, denn diese Zeile öffnet ein ganz leichtes Tor für SQL-Injections.

Um die Gefahr zu entschärfen, benutzt man die Funktion [phpf]mysql_real_escape_string[/phpf]:
PHP:
$sql="SELECT * FROM banken WHERE blz = '". mysql_real_escape_string($q) ."'";
 
Hi, ComFreek,

vielen Dank für die schnelle Antwort!!

Sorry, hate meinen HTML Code vergessen.

HTML:
<tr><td>Kreditinstitut<span class="must"></span></td><td id="txtHint"><input name="bank" value="" type="text" size="20"   maxlength="40" /></td></tr>

Dort wird über txtHint das PHp Script ausgeführt. ****t auch prima, aber dann habe ich im Firefox beim Absenden des Formulars kein $_POST['bank'] im IE schon****?

Vielen Dank für den Sicherheitshinweis! Das ist ein Thema, mit dem ich mich noch gar nicht richtig auseinander gesetzt habe.
Aber das ganze Script ist für unser Sozialprojekt in Thailand, wo wir kostenlose medizinische Versorgung für die Landbevölkerung und eine Lebensgemeinschaft unter ökologischen Gesichtspunkten aufbauen und wir wollen eine Möglichkeit schaffen, dass die Menschen spenden könne. Und ich bin mit meinem Programmierkenntnissen weit entfernt, für eine Bank zu coden :)))
 
Hast du im Firefox über in $_POST?
Füge mal in dein Skript folgendes ein:
PHP:
var_dump( $_POST );

Sendest du dieses Textfeld per AJAX (bzw. JS) oder mit einem normalen Formular?

Einige Aspekte zur Sicherheit in PHP-Codes habe ich mal in einem Tutorial zusammengefasst:
Sicherheit in PHP-Codes schaffen


PS: Viel Glück für euer Projekt!
 
Danke für die Glücks-wünsche! :)

Ich lasse mir die Variablen mit

PHP:
echo '<pre>';
print_r($GLOBALS);
echo '</pre>';

auswerfen. Das Textfeld wird mit einem normalen Formular gesendet.

Hier das Ergebnis im Firefox:
Code:
  [_POST] => Array
        (
            [betrag] => 400,00
            [einmalig] => einmalig
            [spendentyp] => person
            [firma] => 
            [anrede] => Herr
            [vorname] => Test
            [name] => Test
            [strasse] => Teststr. 3
            [ort] => 22765 Hamburg
            [mail] => test@test.com
            [ktoinhaber] => Test Test
            [konto] => 1234567
            [blz] => 20010020
            [ermaechtigung] => 1
            [verwendung] => 1
            [spenden] => SPENDEN
        )
und hier im IE:
Code:
[_POST] => Array
        (
            [betrag] => 400,00
            [einmalig] => einmalig
            [spendentyp] => person
            [firma] => 
            [anrede] => Herr
            [vorname] => Test
            [name] => Test
            [strasse] => Teststr. 4
            [ort] => 80999 München
            [mail] => test@tes.com2
            [ktoinhaber] => Test Test
            [konto] => 12355555
            [blz] => 20010020
            [bank] => Postbank -Giro- Hamburg
            [ermaechtigung] => 1
            [verwendung] => 1
            [spenden] => SPENDEN
        )
Da erkennt er "bank"

Und hier die relevanten Zeilen des Codes:
HTML:
<form action="egal.php" method="post" name="spendenformular" id="spendenformular">
 <tr><td>Bankleitzahl<span class="must">*</span></td><td><input name="blz" value="" type="text" size="20"  maxlength="8" onchange="showUser(this.value)" /></td></tr>
            <tr><td>Kreditinstitut<span class="must"></span></td><td id="txtHint"><input name="bank" value="<?php if (isset($fehlt)==true) {echo $_POST['bank'];} ?>" type="text" size="20"   maxlength="40" /></td></tr>
</form>

Danke, dass Du Dir die Zeit nimmst! Und ich werde mich mal mit dem Thema Sicherheit auseinander setzen. Für das Thema https muss ich das eh. Deine Anregung mit "mysql_real_escape_string($q)" habe ich schon eingebaut. Danke!

Viele Grüße aus der Sonne

Sumano
 
Das ist komisch.

Wie schaut es mit anderen Browsern aus?
Vielleicht könntest du den geparsten HTML-Code posten, also ohne PHP echo()'s.



Und ich werde mich mal mit dem Thema Sicherheit auseinander setzen.
Wo du schon dabei bist:
Du gibst die Variable $_POST['bank'] einfach im value-Attribut aus.
Angenommen der Inhalt von $_POST['bank'] wäre folgender: " />Böser Code!
Damit würde das Input-Feld geschlossen werden und theoretisch könnte man jetzt JS-Code ausführen.

Siehe dazu auch mein Tutorial Punkt #1 mit [phpf]htmlspecialchars[/phpf]
 
Hi, Comfreek,

ich bin ja absoluter autodidakt und das ist super, dass ich hier jetzt mal was lerne. Super, danke! Das ist ja interessant, dass man dann einfach in ein input Feld einen Code eingibt....

Aber hier jetzt der Quelltext nach absenden des Formulars:

HTML:
 <tr><td >Kontoinhaber<span class="must">*</span></td><td><input name="ktoinhaber" value="test test"  type="text" size="20"  maxlength="50"/></td></tr>
            <tr><td >Kontonummer<span class="must">*</span></td><td><input name="konto" value="1234567"  type="text" size="20"  maxlength="12" /></td></tr>

            <tr><td >Bankleitzahl<span class="must">*</span></td><td><input name="blz" value="20070000"  type="text" size="20"  maxlength="8" onchange="showUser(this.value)" /></td></tr>
            <tr><td>Kreditinstitut<span class="must"></span></td><td id="txtHint"><input name="bank" value="" type="text" size="20"   maxlength="40" /></td></tr>

Hier das ganze im IE

HTML:
 <tr><td >Kontoinhaber<span class="must">*</span></td><td><input name="ktoinhaber" value="test tes"  type="text" size="20"  maxlength="50"/></td></tr>
            <tr><td >Kontonummer<span class="must">*</span></td><td><input name="konto" value="1234567"  type="text" size="20"  maxlength="12" /></td></tr>
            <tr><td >Bankleitzahl<span class="must">*</span></td><td><input name="blz" value="20070000"  type="text" size="20"  maxlength="8" onchange="showUser(this.value)" /></td></tr>
            <tr><td>Kreditinstitut<span class="must"></span></td><td id="txtHint"><input name="bank" value="Deutsche Bank Hamburg" type="text" size="20"   maxlength="40" /></td></tr>

Im Safari sieht es aus wie beim Firefox. Dort geht es auch nicht... :-(

Viele Grüße aus der Sonne

Sumano
 
P.s.:

wäre es dann sicher, wenn ich in meinem Formular check das value so fülle ?

PHP:
value="<?php if (isset($fehlt)==true) {echo  htmlspecialchars($_POST['vorname'], ENT_QUOTES);} ?>"
 
Versuche mal testweise ein neues Input-Feld zu erstellen und zu prüfen, ob der Wert davon übertragen wird.

Gibt es außerdem irgendwas in den Fehlerkonsolen von Firefox & Safari?


Zu deinem Code:

Ja, dadurch werden alle HTML-Zeichen (z.B. <, >) speziell kodiert (< zu &lt, > zu &gt, etc.) und werden nicht ausgeführt.
 
...das Formular ist ja viel länger (Name, Vorname, mail etc...) Alle Inputs davor und danach werden übertragen, eben nur das durch das separate PHP Script gefüllte "Bank"wird nicht genommen. Fehlercode bekomme ich ZERO...
 
Zurück