Daten aus einer SQL DB auslesen und verleichen lassen
GreenHorn
- datenbank
Hallo zusammen,
ich habe eine html Datei mit einer Formular eingabe. Die Eingabe wird mit post an eine php seite übergeben und in einer Variablen gespeichert. Ich öffne meine SQL DB und lasse diese auslesen. Mit echo zeigt er mir den Inhalt der Tabelle auch an. Wenn ich den ausgelesenen Wert jetz in einer Variablen speicher und diese Variable mit der Variablen aus der Übergabe mit Post vergleichen lassen will bekomm ich eine Fehlermeldung. Vielleicht kann mir jemand helfen?
Hier der Code fürs Formular:
<form action="seite2.php" method="post">
<input type="text" maxlength="6" name="nummer">
<input type="Submit" value="Absenden">
</form>
Der Code aus der php seite:
<?php
$verbindung = mysql_connect ("localhost",
"test", "test")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db("homepage")
or die ("Die Datenbank existiert nicht.");
$nummer = $_POST["nummer"]
$abfrage = "SELECT spalte FROM table1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$test = $row->spalte;
if ($nummer == "$test")
{
echo "eintrag vorhanden";
}
else
{
echo "eintrag nicht vorhanden";
}
}
mysql_close($verbindung);
?>
Der fehlercode:
Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\xampp\htdocs\seite2.php on line 11
Achso ich würde gerne nach dem der Eintrag aus dem Formularfeld an die Variable übergeben wurde abfragen ob überhaupt etwas eingegebn wurde und wenn dann soll der DB abgleich ausgeführt werden, ansonsten möchte ich das ich wieder zur HTML seite komme. Der eintrag im Textfeld des Formulars muss 6 zeichen haben. Kann ich schon im formular verhindern das zu wenig zeichen eingegeben werden können?
Ich dank euch wie verückt.
Mfg
Hab den Fehler,
hinter $nummer = $_POST["nummer"] hat das ; gefehlt. Jetzt liest er die DB aus und vergleicht jeden Datensatz mit dem in der Variable nummer gespeicherten Text. Habe ein paar testeinträge in der DB. Wenn ich jetzt einen Wert eingebe der vorhanden ist bekomme ich die ausgabe
"eintrag vorhandeneintrag nicht vorhanden" usw.
Was kann ich dar ändern das er nur eine Ausgabe macht, entweder eintrag vorhanden oder eintrag nicht vorhanden.
Wäre schön wenn mir noch jemand bei den anderen beiden sachen helfen könnte. Wegen der if abfrage ob etwas eingegeben wurde und zu verhindern das der eingegebene wert zu kurz ist.
Danke
Hoi,
versuch doch mal einfach den Text der gefunden oder nicht gefunden
werden soll in einer syntaktisch richtigen WHERE Klausel verpackt
direkt von der Datenbank abzufragen, also in etwa so:
SELECT * FROM [Tabelle] WHERE [spalte] = $nummer
Wenn du keine Ergebnismenge bekommst, gibt es den Wert nicht, wenn
doch, dann gibt es den Wert $nummer in der Spalte [spalte] eines
Records.
Abhängig von der weiteren Verwendung der Information gibt es noch
einige Möglichkeiten die Abfrage effizienter zu gestalten.
Ciao, Frank
Hallo,
dank dir hat funktioniert. Hatte es mit where schon über die ID versucht. Hab gerade erst begonnen mich mit sql zu beschäftigen.
Hab es auch hin bekommen das wenn nichts eingegeben ist die abfrage nicht gestartet wird.
<?php
If ($nummer != "")
{
//datenbank abgleich
}
else
{
echo"das eingabefeld ist leer";
}
?>
Hast du vielleicht eine Idee wie ich verhindern kann das zu wenige zeichen in das Eingabefeld eingegeben werden können?
Hoi,
wenn es sich um Nummern handelt solltest du evt. auch auf den Datentyp
"Nummer" prüfen. Wenn jemand reinen Text eingibt, dann könnte der SQL-
Befehl in einem Fehler resultieren.
Eine Validierung der Eingabe kannst du auf 2 Arten machen
Du solltest dich auch gegen SQL Injection schützen. Schau am besten
unter diesem Stichwort im Archiv dieses Forums nach, da findest du alles
wissenswerte darüber.
Viele Grüsse,
Frank
Hallo,
wie könnte so eine nummernbezogene Abfrage aussehen. Dank dir mit dem Tip wegen dem SQL Injektion. Wie kann ich mich dagegen schützen? Stimmt über eine JS könnte ich eine fehlerhafte eingabe verhindern.
Achso jetzt bekomm ich aber keine rückmeldung mehr wenn der wert in der DB nicht vorhanden ist.
LG GreenHorn
Ach, menno ;)
Alles was du für eine clientseitige Eingabevalidierung an JavaScript
brauchst, findest du bei Selfhtml. Inklusive der Verzögerung des
Abschickens des Formulars. Einfach mal selbst etwas schauen.
Es gibt z.b. die Funktion isNaN()
Zum Thema SQL Injection und wie du das verhindern kannst, solltest du
aus den letzten 3 Jahren mindestens 10 Threads im Archiv dieses Forums
finden. Wie du das Archiv durchsuchen kannst, weißt du aber?
Achso jetzt bekomm ich aber keine rückmeldung mehr wenn der wert in der DB nicht vorhanden ist.
Doch, du bekommst eine Rückmeldung, allerdings sagt dir diese, dass
es keine Ergebnisse gibt. Also eigentlich das was du wissen willst.
Ein Vorteil von 4G Sprachen wie SQL ist es, dass man seine Ergebnis-
menge eindeutig beschreiben kann. Wenn ich also einen Elefanten aus
Afrika haben will, frage ich meine Datenbank:
SELECT elefant FROM afrika
Wenn ich eine leere Ergebnismenge bekomme, gibt es entweder keine
Elefanten in Afrika oder meine Datenbank hat keine Einträge darüber.
So long,
Frank
Grüße,
wegen dem SQL Injection, ich habe es mit mysql_escape_string() gelöst.
Das mit dem Clientseitigen Eingabevalidierung versuch ich über eine JavaScript Function zu lösen.
Ich möchte herausfinden ob der eingegebene Wert vorhanden ist oder nicht. Bei beiden eine rückinfo. Ich habe eine zweite if anweisung gestartet die mir sagen soll wenn der wert nicht vorhanden ist und mir ausgeben "eintrag nicht vorhanden". Ich habe das über != die ungleich abfrage gemacht.
Ich bekomme jedoch keine Rückmeldung wenn der Wert nicht vorhanden ist.
Ich versuche meistens erst irgenwo anders ne Lösung zufinden. Meist bekommt man nur starre infos und benötigt hilfe bei der individuellen umsetzung.
Dank dir.
LG
Hallo nochmal,
ich zitiere mal aus deinem ersten Posting:
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$test = $row->spalte;
if ($nummer == "$test")
{
echo "eintrag vorhanden";
}
else
{
echo "eintrag nicht vorhanden";
}
}
a) Ich würde stark annehmen, dass man $ergebnis
auch daraufhin untersuchen kann, wie gross die Ergebnismenge ist.
b) Wie ich schon in meiner ersten Antwort schrieb, das SQL kann man
je nachdem was man genau erreichen will auch noch optimieren.
Zu b) würde ich vorschlagen, dass du statt
SELECT * FROM
eher
SELECT COUNT(*) FROM [Tabelle] WHERE [spalte] = $nummer
verwendest, denn das gibt dir einen Skalar-Wert zurück, nämlich
die Anzahl der Datensätze die deinen Abfragebedingungen (WHERE)
entsprechen. Du hast also immer ein Ergebnis. Übrigens, 0 bedeutet
dann, dass es keinen Treffer gibt.
Konsultiere bitte einfach noch ein wenig die PHP Hilfe, wie man die
MySQL API bedient. Da solltest du sehr schnell auf Antworten stoßen.
Falls du denkst, ich bin doof, und möchte dir Informationen/Hilfe für
dein Problem vorenthalten ... ich kenne mich mit PHP und MySQL
eigentlich überhaupt nicht aus. :) Deswegen verweise ich so pauschal
auf das Archiv dieses Forums ;)
Grüsse,
Frank
Hallo,
ich halte dich nicht für doof, ganz im gegenteil.
ich denke auch nicht das du mir infos enthalten willst, da du mir ja sonst nicht antworten würdest.
Das Select COUNT(*) FROM [Tabelle] WHERE [Spalte] = $nummer
klappt net, da jetz kein Wert mehr als Korrekt erkannt wird selbst wenn dieser vorhanden ist.
Ich glaub das ich bescheutert bin, wenn ich eine DB Abfrage:
Also ist der Wert der in $nummer gespeichert ist gleich einem Eintrag in der Tabelle, gib aus "eintrag vorhanden". Ansonsten der "eintrag ist nicht vorhanden". Kommt doch hin die Interpretation des Codes. Ich versteh nicht warum er mir nicht anzeigt wenn der wert nicht gleich ist wie ein Wert in der Tabelle. Ich geh doch davon aus das die Abfrage in der DB über True oder False verläuft. Wenn der Wert also nicht vorhanden ist, kommt doch ein False zurück.
Das False soll er halt nur anders zurück geben.
Selbst wenn ich eine ganz neue Tabellenabfrage mache mit != zeigt er mir den negierten fall nicht an.
LG
Hi,
tipp ins Blaue .. du vergleichst weiterhin die Ergebnisse der Abfrage
in deiner Schleife?
Vergleiche den Rückgabewert für SELECT COUNT(*) FROM [Tabelle] WHERE [Spalte] = $nummer
gegen 0, nicht gegen deine
$nummer.
Wenn 0 gib aus "Eintrag nicht vorhanden" ansonsten "Eintrag vorhanden".
Das Ergebnis einer SELECT COUNT(*) hat nur einen einzigen Rückgabewert,
du solltest schauen, welche PHP/MySQL-API funktion dir diesen einfach
zurückgeben kann und den vergleichst du dann eben gegen 0.
Ich hoffe, ich bringe dich so langsam auf den richtigen Weg.
So long,
Frank
Hallo Frank,
also ich lasse jetzt das ergebnis von Count vergleichen. Ob der rückgabewert < 0 ist. Wähle ich einen Eintrag der Vorhanden ist bekomme ich zwar jetzt eine Rückmeldung aber leider die falsche.
LG
Hoi,
überleg doch mal bitte, wie kann das Zählen von Zeilen in einer
Tabelle einen Wert kleiner als 0 ergeben? Selbst wenn die Tabelle
überhaupt keine Zeilen (Records) hat, kann kein Wert unter 0 heraus-
kommen.
SELECT COUNT(*) FROM ...
bringt immer einen
Rückgabewert, einen numerischen Skalarwert. Wenn die aktuelle Rück-
meldung "falsch" sein soll, welche erwartest du und welche bekommst
du denn dann?
Vielleicht solltest du einfach nochmal den PHP Quellcode posten, den
du jetzt fabriziert hast. Da steckt imho irgendwo noch ein Würmchen
drin, was es zu beseitigen gilt.
Ciao, Frank
Hallo,
ich hab mich verschrieben. Hab nicht kleiner 0 sondern größer 0 verglichen. hab also:
<?php
SELECT COUNT (*) FROM Tabelle WHERE Spalte = $nummer;
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
if ($ergebnis > 0)
{
echo "eintrag vorhanden";
}
else
{
echo "eintrag nicht vorhanden";
}
}
mysql_close($verbindung);
?>
er bringt zwar keinen Fehler aber sagt das immer "eintrag nicht vorhanden". Habe es auch versucht den wert in ergebnis in eine andere Variable zu übergeben und zu vergleichen, geht auch nicht.
Noch mal etwas anderes, wegen der validierung der eingabe. Ich habe mir gedacht über settype(); der variable $nummer den typ integer zuweise. Nur fehlt mir die Idee wie ich überprüfe ob der übergebene wert tatsächlich ein integer wert ist.
LG
Hallo,
$ergebnis kann ja auch nicht vergleichbar mit 0 sein. Sondern ein Element von §row (das erste und einzige von der einzigen §row).
mysql_query(...) gibt dir eine Resourcenkennung zurück.
Benutze mysql_result(...) um den Skalar (die Anzahl Zeilen zu bekommen)
$ergebnis = mysql_query("SELECT COUNT (*) FROM Tabelle WHERE Spalte = $nummer;");
$anzahlZeilen = mysql_result($ergebnis, 0, 0);
if ($anzahlZeilen > 0)
{
echo "eintrag vorhanden";
}
else
{
echo "eintrag nicht vorhanden";
}
und vergleiche sie mit 0.
Du solltest dich mehr mit den PHP Funktionen für MySQL auseinandersetzen: http://de.php.net/manual/de/function.mysql-result.php
Ciao, Frank
Hallo,
dank dir. Ich hab mich gestern nochmal mit meinem Code beschäftigt und einige fehler gefunden. Hast recht ich muss mich mal intensiver mit den Funktionen beschäftigen. Habs jetzt auch hinbekommen. Dank dir für die Mühen.
MfG