Daten prüfen

Aurora-One

Grünschnabel
Hallo,

ich zerbreche mir denn kopf, wie man es anstellen könnte, das ein EIngabefeld sofort mit der überüfung in der Datenbank anfägt ob zb. der Benutzer noch frei ist bevor ich mein script abschicke zum eintragen in die Datenbank.

MFG
Aurora-One
 
Hi,

such mal nach dem Stichwort AJAX.

Damit ist es mögich, einen Request an den Server abzusetzen, dort ein Script anzustossen, welches die Datenbankabfrage umsetzt und eine entsprechende Antwort zurück liefert.

Eine Einführung findest zum Beispiel hier.

Ciao
Quaese
 
hallo ich habe jetzt en tut gefunden,
MEINE VERÄNDERTE DATEI:
HTML:
<html>
<head>
<script type="text/javascript" src="selectuser.js"></script>
</head>
<body>

<form>
<input name="user" onkeup="showUser(this.name)">
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>
ORGINAL DATEI:
HTML:
<html>
<head>
<script type="text/javascript" src="selectuser.js"></script>
</head>
<body>

<form>
Select a User:
<select name="users" onchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>
nun habe ich javascript datei:
Code:
var xmlhttp;

function showUser(str)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="getuser.php";
url=url+"?user="+str;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}
so nun noch die php abfrage:
PHP:
<?php
$q=$_GET["q"];
// die sind zum überprüfen für mich ob was verschickt ist
echo $_GET["q"];
echo $_GET['name'];

$con = mysql_connect('localhost', 'root', '');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("login", $con);

$sql="SELECT * FROM userlogin_t_users WHERE user = '".$q."'";

$result = mysql_query($sql);

$row = mysql_fetch_array($result);
if($result = "")
{
   echo "Frei";

}else{
  echo "Belegt";
}


mysql_close($con);
?>

mit dem orginal datei geht es nur was habe ich jetzt vergessen zu verändern?
 
Zuletzt bearbeitet:
Hi,

das input-Element kennt kein onchange-Ereignis.

Du kannst es stattdessen mit onkeyup versuchen. Es wird dann allerdings bei jedem Loslassen einer Taste der Request ausgeführt.

Besser wäre eine eigene Schaltfläche, die zum Auslösen des Requests dient.

Ansonsten besteht die Möglichkeit, zunächst den submit-Event des Formulars zu unterbrechen und zuerst den Request auszuführen. Wird als Rückgabe "Frei" geliefert, wird das Formular mit Hilfe der Methode submit gesendet.

Ciao
Quaese
 
Hi,

die Variante über den submit-Event könnte wie folgt aussehen:
Code:
<html>
<head>
<script type="text/javascript">
  <!--
var xmlhttp;

function showUser(objEvt, objForm){
  // Eingegebenen Benutzername auslesen
  var str = objForm.elements['user'].value;

  // Eventobjekt bestimmen
  objEvt = (window.event)? window.event : objEvt;
  // Defaultereignis (submit) abbrechen
  if(typeof objEvt.preventDefault == "function"){
    objEvt.preventDefault();
  }else{
    objEvt.returnValue = false;
  }

  xmlhttp=GetXmlHttpObject();
  if (xmlhttp==null){
    alert ("Browser does not support HTTP Request");
    return;
  }

  var url="getuser.php";
  url=url+"?user="+str;
  url=url+"&sid="+Math.random();
  xmlhttp.open("GET",url,true);
  // Callback-Funktion über anonyme Funktion aufrufen
  xmlhttp.onreadystatechange = function(){
    stateChanged(objForm);
  }
  xmlhttp.send(null);
}

function stateChanged(objF){
  if (xmlhttp.readyState==4){
    // Falls der Name noch frei ist -> Formular senden
    if(xmlhttp.responseText.search(/Frei/i)!= -1){
      objF.submit();
    }else{
       document.getElementById("txtHint").innerHTML = "Status Benutzername: " + xmlhttp.responseText;
    }
  }
}

function GetXmlHttpObject(){
	if (window.XMLHttpRequest)
	  {
	  // code for IE7+, Firefox, Chrome, Opera, Safari
	  return new XMLHttpRequest();
	  }
	if (window.ActiveXObject)
	  {
	  // code for IE6, IE5
	  return new ActiveXObject("Microsoft.XMLHTTP");
	  }
	return null;
}
 //-->
</script>
</head>
<body>

<form action="formdata.php" method="post" onsubmit="showUser(event, this);">
<input name="user">
<input type="submit">
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>
</body>
</html>

Zum Testen habe ich folgendes kleine PHP-Fragment verwendet:
Code:
$result = $_REQUEST['user'];
if($result == "test"){
  echo "Belegt";
}else{
   echo "Frei";
}

Ciao
Quaese
 
hallo mit einander!

wenn mein schreiben hier nicht wirklich passt, bitte ich mir das zu entschuldigen, aber ich habe nichts gefunden wo mein HILFERUF passt.


habe eine HP gepastelt und wollte, dass user mit verschiedenen auflösungen (800x600,1024x768,1280x1024) immer richtig bedient werden. das klappt auch ganz vorzüglich mit dieser anweisung:

<script type="text/javascript">
if (screen.width == 800) {
document.write('<link rel="stylesheet" type="text/css" href="800.css">');
window.location.href="index1.html";
}
else if (screen.width == 1024) {
document.write('<link rel="stylesheet" type="text/css" href="1024.css">');
window.location.href="index2.html";
}
else if (screen.width == 1280) {
document.write('<link rel="stylesheet" type="text/css" href="1280.css">');
window.location.href="index3.html";
}
</script>


aber ich musste die HP 3x bauen in den verschiedenen auflösungen.

meine idee wäre dieses script so um zu bauen, dass ich nur mehr das

<body background="bilder\indexhg3.jpg"> und die jeweils da zu passenden anderen bilder der je weiligen auflösungen mit diesem script umschalten lasse und damit erspare ich mir 2x den platz der "unnötigen HPs am server.


wäre sehr nett von euch, wenn mir da wer helfen könnte


mfG der gnom
 
Zurück