Zur Navigation

MySQL abfrage per JavaScript [3]

21 Jörg Kruse

ich möchte gerne in einem Java-menue mir eine ausgabe aus der db machen lassen.

Du meinst ein JavaScript-Menü?

Leider geht aus deinem Code nicht hervor, wie stm_aix(), stm_bpx() und stm_ep() definiert sind

10.12.2009 09:41

... 3 Jahre später ...

22 sasa (Gast)

hi zusammen,

ich hab emir ein beispiel vom jquery angesehen. fand das auch recht verständlich. wollte das nun auf meiner seite testen, aber es passiert irgendwie gar nichts. finde nur leider den fehler nicht.

- habe die jquery.js im verzeichnis gespeichert
- auf der index.php existiert der eintrag <script type="text/javascript" src="/jquery.js"></script> im header
- dort wird per include die change.html aufgerufen, die wie folgt aussieht:
<select id="cat1"></select>
  
  <script type="text/javascript">
$(function() {
	
	$("#cat1").jCombo("getcat1.php");
});
</script>

- die dauzgehörende getcat1.php:
<?php

    // Connect Database
    mysql_connect('localhost', 'root', '' );    
    mysql_select_db('lager');
    
    // Execute Query in der richtigen Reihenfolge 
    //(value,text)
    $query = "SELECT id,cat FROM lager";
    $result = mysql_query($query);
    $items = array();
    
	if($result && 
       mysql_num_rows($result)>0) {
        while($row = mysql_fetch_array($result)) {
            $items[] = array( $row[0], $row[1] );
        }        
    }
    mysql_close();
    // Konvertieren in JSON-Format und drucken
    echo json_encode($items); 
?> 

gruß
sascha

16.12.2012 14:43

23 Jörg Kruse

aber es passiert irgendwie gar nichts. finde nur leider den fehler nicht.

Was sagt denn die JavaScript-Konsole?

Zur Analyse von JavaScript-Fehlern empfiehlt sich der Einsatz des Firefox-Addons Firebug, insbesondere bei der Übertragung via Ajax.

16.12.2012 22:32

... 3 Monate später ...

24 Sebastian1989 (Gast)

Wie muss den für das $.post von jQuery das PHP Dokument aussehen?? Ich habe das ganze derzeit so (leider ohne Funktion):

<?php
	require_once("datenbank.php");
	
	echo "Wert für X: " .$_POST['x']. "<br />";
	echo "Wert für Y: " .$_POST['y']. "<br />";
	
	$database = new Database();
	$result = $database->CheckUserExists($_POST['x']);
	
	if ($result > 0)
	{
		echo "Benutzername existiert bereits!";
		exit();
	}
	
	$result = $database->CheckMailExists($_POST['y']);
	
	if ($result > 0)
	{
		echo "E-Mail Adresse existiert bereits!";
		exit();
	}
?>

function validateRegistration() {
	var login = document.registration.login.value;
	var pass = document.registration.pass.value;
	var passCheck = document.registration.passCheck.value;
	var mail = document.registration.mail.value;
	
	$.post('/register-check.php', {x:login,y:mail}, function(data) {
		alert(data);
	});
		
	return true;
}

Eingebunden habe ich jQuery über folgender Zeile:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

11.04.2013 10:42

25 Jörg Kruse

Wie rufst du denn validateRegistration() auf?

Gibt die JavaScript-Konsole des Browsers irgendwelche Fehler aus?

11.04.2013 11:54

26 Sebastian1989 (Gast)

Aufrufen tue ich das ganze aus einer Form.
<form name="registration" onSubmit="return validateRegistration();" method="post" target="_self">

In der Konsole stehen leider keine Fehler, da hatte ich schon geschaut..

11.04.2013 12:30

27 Jörg Kruse

Das kann so nicht funktionieren, da der Browser durch den Submit die Seite verlässt. Das alert() kommt dadurch gar nicht mehr zum Zuge.

Wenn du eh schon einen Submit machst, dann benötigst du aber eigentlich auch gar kein JavaScript / Ajax mehr? Die Abfrage kann dann ja auf der Folgeseite gemacht werden

11.04.2013 13:58 | geändert: 11.04.2013 13:59

28 Sebastian1989 (Gast)

Wieso sollte dem so sein? Wenn ich ein "false" zurückgebe bricht das Submit ab. Wenn ich außerhalb des $.post ein alert mache sehe ich diesen schließlich auch. Zum Beispiel so:
function validateRegistration() {
	var login = document.registration.login.value;
	var pass = document.registration.pass.value;
	var passCheck = document.registration.passCheck.value;
	var mail = document.registration.mail.value;
	
	$.post('/register-check.php', {x:login,y:mail}, function(data) {
		alert(data);
	});

alert("some stuff");
		
	return true;
}

Da würde ich das "some stuff" auch sehen. Und die folge Seite ist die Seite selber. Du kannst dir das ganze auch gerne einmal live ansehen habe es mit Testdaten aufgesetzt. http://games.kruse-familie.eu (oben auf links auf register derzeit).

Somit muss das ganze an der Stelle sein (das alert soll da eh am ende nicht bleiben das ist nur zum testen, eigentlich sollte der Fehler in den Labels gepostet werden und ein false als Rückgabe erfolgen) den nach dem "Seitenwechsel" bzw. neu Aufruf ist es zu spät sonst müsste ich das Formular erst wieder öffnen und die Daten posten und und und.

11.04.2013 14:52

29 Sebastian1989 (Gast)

Nachtrag zum letzten Post:

Die bisherige Validierung ist nicht gemeint mit dem was ich hiermit erreichen möchte. Mit diesen möchte ich erreichen das doppelte Einträge von Usernamen und E-Mail Adressen vermieden werden. Die Validierung von Passwort und E-Mail Funktionieren bereits. Die *.js-Datei sind derzeit wie folgt aus:

var defaultBorder;
	
function validateRegistration() {
	var login = document.registration.login.value;
	var pass = document.registration.pass.value;
	var passCheck = document.registration.passCheck.value;
	var mail = document.registration.mail.value;
	
	if (!defaultBorder)
		defaultBorder = document.registration.login.style.border;
	
	//todo: fix this (don't work currently)
	$.post('/register-check.php', {x:login,y:mail}, function(data) {
		alert(data);
	});
	
	if (!validateMail(mail))
	{
		reportError("Die eingegebene E-Mail Adresse ist nicht gültig. Bitte korrigieren!");			
		setErrorBorder(document.registration.mail);
		document.registration.mail.focus();
		
		return false;
	}
	else 
	{
		document.registration.mail.style.border = defaultBorder;
	}
	
	if (pass != passCheck)
	{
		reportError("Die Passwörter passen nicht zusammen. Bitte Eingabe überprüfen!");
		setErrorBorder(document.registration.pass);
		setErrorBorder(document.registration.passCheck);
		document.registration.pass.focus();
		
		return false;
	}
	else
	{
		document.registration.pass.style.border = defaultBorder;
		document.registration.passCheck.style.border = defaultBorder;
	}
	
	if (!validatePass(pass))
	{
		reportError("Das Passwort entspricht nicht den Anforderungen!");			
		setErrorBorder(document.registration.pass);
		document.registration.pass.focus();
		
		return false;
	}
	else 
	{
		document.registration.pass.style.border = defaultBorder;
	}
	
	return true;
}

function reportError(errorMessage) {
	$("#errorMessage").text(errorMessage);
	
	document.registration.pass.value = "";
	document.registration.passCheck.value = "";
}

function setErrorBorder(field) {
	field.style.border = "solid red";
}

function validateMail(mail) {   
  var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return regex.test(mail);
}

function validatePass(pass) {
	var regex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!#$%&()\*+,-.\/:;=\?@]).{6,32}$/;
	return regex.test(pass);
}

11.04.2013 14:55

30 Jörg Kruse

Wenn ich ein "false" zurückgebe bricht das Submit ab.

Ja, aber das ist ja hier aber nicht der Fall?

Da würde ich das "some stuff" auch sehen.

"würde" bedeutet, du hast das nicht ausprobiert?

Und die folge Seite ist die Seite selber.

Ja, aber es ist ein neuer Seitenaufruf - die Ajax-Abfrage lief nur während des ersten Seitenaufrufs.

Ich habe deine Demo-Seite mal getestet. Mit Firebug kann man im Reiter "Netzwerk" für eine Sekunde sehen, dass eine POST-Abfrage abfgesetzt wurde - vermutlich die Ajax-Abfrage. Nachdem die Seite kurz darauf neu geladen wurde, wurde dieser Eintrag von den POST- und GET-Requests des neuen Seitenaufruffs überschrieben. So kann man auch nicht analysieren, was register-check.php geantwortet hat.

11.04.2013 15:14