[JS] DB Abfrage prüfen

11/30/2018 20:39 .Abraxas#1
Guten Abend zusammen,
ich habe ein Problem. Und zwar möchte ich gerne für meine Ausbildung mir eine online Lernstütze gestalten. Dafür möchte ich das beim Tippen die Eingabe überprüft wird ob diese so in der DB steht oder nicht. Wenn nicht möchte ich gerne das Eingabefeld einfärben (das ist kein Problem). Doch ich bekomme über JS den Rückgabewert nicht wenn das PHP Script nein sagt.

PHP Code:
    if(isset($_POST['params']))
    {    
        
$return 0;
        
$normalName trim($_POST['params']);
        
$db = new mysqli("host","database","pass","user");
        if(
$db->connection_error){
            print(
"Fehler bei SQL.");
        }
        
        else
        {
            
$getNormalPlant $db->query("SELECT * FROM plants WHERE name_de = '".$normalName."'");
            while(
$ausgabe $getNormalPlant->fetch_object())
            {
                if(
$ausgabe == false)
                {
                    
$return 0;
                }
                else
                {
                    
$return 1;
                }
            }
            echo 
$return;
        }
    } 

JS Code
Code:
function checkNormalName(plantName){
			var xmlHttp = null;
			// Mozilla, Opera, Safari sowie Internet Explorer 7
			if (typeof XMLHttpRequest != 'undefined') {
				xmlHttp = new XMLHttpRequest();
			}
			if (!xmlHttp) {
				// Internet Explorer 6 und älter
				try {
					xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
				} catch(e) {
					try {
						xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
					} catch(e) {
						xmlHttp  = null;
					}
				}
			}
			// Wenn das Objekt erfolgreich erzeugt wurde			
			if (xmlHttp) {
				var url = "phpscripts/checkPlantName.php";
				var params = "plantName="+plantName;
				
				xmlHttp.open("POST", url, true);
				
				//Headerinformationen für den POST Request
				xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				xmlHttp.setRequestHeader("Content-length", params.length);
				xmlHttp.setRequestHeader("Connection", "close");					

				xmlHttp.onreadystatechange = function () {
					if (xmlHttp.readyState == 4) {
						if(xmlHttp.status== 200)
						{
							if(xmlHttp.responseText == 0)
							{
								alert("Keine PLant");
							}
							else
							{
								alert("Plant gefunden");
							}
						}
						// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
						//document.getElementById("normalName").innerHTML = xmlHttp.responseText;
						//document.getElementById("searchAusgabe").innerHTML = xmlHttp.responseText;
						//document.getElementById("searchAusgabeMobile").innerHTML = xmlHttp.responseText;
					}
				};				
				xmlHttp.send(params);
			}		
		}
Ich habe das meiste aus meinen ganz alten Schulprojekten zusammengeholt und suche seit Stunden den Fehler und finde diesen nicht. Egal was ich mache, es greift die letzte JS IF Abfrage nicht. Ich bekomme immer "Plant gefunden" anzeigt, obwohl ich nur einen Buchstaben eintrage. Oder habe ich grundsätzlich etwas in der PHP falsch gemacht? Habe schon seit Jahren nichts mehr gemacht.
Kind regards,

.Abraxas
11/30/2018 20:55 False#2
Quote:
Originally Posted by .Abraxas View Post
Guten Abend zusammen,
ich habe ein Problem. Und zwar möchte ich gerne für meine Ausbildung mir eine online Lernstütze gestalten. Dafür möchte ich das beim Tippen die Eingabe überprüft wird ob diese so in der DB steht oder nicht. Wenn nicht möchte ich gerne das Eingabefeld einfärben (das ist kein Problem). Doch ich bekomme über JS den Rückgabewert nicht wenn das PHP Script nein sagt.

PHP Code:
    if(isset($_POST['params']))
    {    
        
$return 0;
        
$normalName trim($_POST['params']);
        
$db = new mysqli("xxx","xxx","xxx","xxx");
        if(
$db->connection_error){
            print(
"Fehler bei SQL.");
        }
        
        else
        {
            
$getNormalPlant $db->query("SELECT * FROM plants WHERE name_de = '".$normalName."'");
            while(
$ausgabe $getNormalPlant->fetch_object())
            {
                if(
$ausgabe == false)
                {
                    
$return 0;
                }
                else
                {
                    
$return 1;
                }
            }
            echo 
$return;
        }
    } 

JS Code
Code:
function checkNormalName(plantName){
			var xmlHttp = null;
			// Mozilla, Opera, Safari sowie Internet Explorer 7
			if (typeof XMLHttpRequest != 'undefined') {
				xmlHttp = new XMLHttpRequest();
			}
			if (!xmlHttp) {
				// Internet Explorer 6 und älter
				try {
					xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
				} catch(e) {
					try {
						xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
					} catch(e) {
						xmlHttp  = null;
					}
				}
			}
			// Wenn das Objekt erfolgreich erzeugt wurde			
			if (xmlHttp) {
				var url = "phpscripts/checkPlantName.php";
				var params = "plantName="+plantName;
				
				xmlHttp.open("POST", url, true);
				
				//Headerinformationen für den POST Request
				xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				xmlHttp.setRequestHeader("Content-length", params.length);
				xmlHttp.setRequestHeader("Connection", "close");					

				xmlHttp.onreadystatechange = function () {
					if (xmlHttp.readyState == 4) {
						if(xmlHttp.status== 200)
						{
							if(xmlHttp.responseText == 0)
							{
								alert("Keine PLant");
							}
							else
							{
								alert("Plant gefunden");
							}
						}
						// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
						//document.getElementById("normalName").innerHTML = xmlHttp.responseText;
						//document.getElementById("searchAusgabe").innerHTML = xmlHttp.responseText;
						//document.getElementById("searchAusgabeMobile").innerHTML = xmlHttp.responseText;
					}
				};				
				xmlHttp.send(params);
			}		
		}
Ich habe das meiste aus meinen ganz alten Schulprojekten zusammengeholt und suche seit Stunden den Fehler und finde diesen nicht. Egal was ich mache, es greift die letzte JS IF Abfrage nicht. Ich bekomme immer "Plant gefunden" anzeigt, obwohl ich nur einen Buchstaben eintrage. Oder habe ich grundsätzlich etwas in der PHP falsch gemacht? Habe schon seit Jahren nichts mehr gemacht.
Kind regards,

.Abraxas
Zunächst würde ich mal die Zugangsdaten aus deinem Code hier entfernen :P

Also du solltest dich mal in PDO/Prepared Statements einlesen, dein aktueller Code lässt sql injections zu (Damit kann jeder deine Datenbank manipulieren).
Desweiteren würde ich den Ajax/xmlHttp Request nicht manuell zusammen bauen, nutz einfach Jquery (wieso das Rad neu erfinden ?).
Da mir der Code etwas zu unordentlich ist habe ich mir den nicht ganz durchgeschaut, jedoch solltest du aufjedenfall vermeiden bei einem Ajax/xmlHttp Request nur 0/1 aka false/true zurück zu geben.
Gib am besten ein JSON zurück was z.B. ein Key "success" enthält und ein key "message" o.ä. damit hast du dann einmal den Wert den du eigentlich wolltest (wurde was gefunden ?) und einmal eine Nachricht die du sofort ausgeben kannst.
12/01/2018 12:21 .Abraxas#3
Problem gelöst. Danke. Kann geschlossen werden
12/02/2018 15:38 Serraniel#4
Quote:
Originally Posted by .Abraxas View Post
Problem gelöst. Danke. Kann geschlossen werden
Habe dir zusätzlich, wie false auch schon geraten hat, die Logindaten zum Datenbankserver rauszensiert. Solltest du drauf achten so Zugangsdaten immer für dich zu behalten.

#Closed