SQL Abfrage funktioniert in PHP nicht!!
Horst
- sonstiges
Hallo,
Ich habe ein Formular erstellt, indem die ID reingeschrieben wird, mit der ID sollen nun die richtigen Daten aus der Datenbank ausgelesen werden,
doch dass problem ist wenn ich in der Abfrage eine Zahl eingeb kommt auch ein Wert, aber wenn ich die Variable einsetze kommt keine Datensatz zum vorschein.
Hi!
Ich habe ein Formular erstellt, indem die ID reingeschrieben wird, mit der ID sollen nun die richtigen Daten aus der Datenbank ausgelesen werden,
doch dass problem ist wenn ich in der Abfrage eine Zahl eingeb kommt auch ein Wert, aber wenn ich die Variable einsetze kommt keine Datensatz zum vorschein.
Niemand hier weiß, was Du gemacht hast, deshalb weiß auch niemand, was Du falsch gemacht hast.
Hi!
Ich habe ein Formular erstellt, indem die ID reingeschrieben wird, mit der ID sollen nun die richtigen Daten aus der Datenbank ausgelesen werden,
doch dass problem ist wenn ich in der Abfrage eine Zahl eingeb kommt auch ein Wert, aber wenn ich die Variable einsetze kommt keine Datensatz zum vorschein.
Niemand hier weiß, was Du gemacht hast, deshalb weiß auch niemand, was Du falsch gemacht hast.
Gut dann nochm neu, sorry für die schlechten angaben!
Im Prinzip möchte ich, dass ich durch ein Textfeld mit dem namen "index" den Primärschlüssel einer Tabelle eingeben kann, durch den Button suchen soll dann halt danach gesucht werden
hier mal das Formular
<td align="center"><br>
hier ist das Textfeld
Bitte Primärschlüssel eingeben: <input type="text" name="index" size="5">
hier ist der Button
<input type="submit" name="suche" value="Datensatz suchen"
<br>
<hr style="color:#00ff00;">
</td>
hier ist der Quellcode für die übergabe an SQL
$primaerschluessel=$_POST['index'];
so jetzt kommt der Quellcode für die Suchabfrage
if (isset($_POST['suche']))
{
$abfrage ='SELECT kostenstelle, bezeichnung, abteilung, inventurnummer '
. ' FROM hardware_erweiterung '
. ' WHERE index
= "'.$primaerschluessel.'
";';
}
WEnn ich jetzt auf suchen klicke, kommt kein Datensatz jedoch wenn ich für die variable $primaerschluessel druch einen Wert ersetze z.B. 8 dann bekomme ich einen Datensatz.
Muss ich die variable irgendwie als int umwandeln weil in der Datenbank ist der Primärschlüssel als integer deklariert oder ist das in PHP unnötig.
Hoffe die angaben sind jetzt besser. Fehlermeldungen kommen keine.
Hi there,
$abfrage ='SELECT kostenstelle, bezeichnung, abteilung, inventurnummer '
. ' FROM hardware_erweiterung '
. ' WHEREindex
= "'.$primaerschluessel.'
";';
alter Baumeisterschmäh:
$abfrage mit echo ausgeben lassen (oder, wenn nicht möglich, in eine log-Datei schreiben), markieren, kopieren und in phpmyadmin in das sql-Formularfeld wieder einfügen, dann sieht man schon meist, warum es nicht geklappt hat...
Hi there,
$abfrage ='SELECT kostenstelle, bezeichnung, abteilung, inventurnummer '
. ' FROM hardware_erweiterung '
. ' WHEREindex
= "'.$primaerschluessel.'
";';alter Baumeisterschmäh:
$abfrage mit echo ausgeben lassen (oder, wenn nicht möglich, in eine log-Datei schreiben), markieren, kopieren und in phpmyadmin in das sql-Formularfeld wieder einfügen, dann sieht man schon meist, warum es nicht geklappt hat...
des kommt dabei raus, der fehler sind die `` bei der 7 also des müsste so aussehen index
="7" wie bekomm ich die weg???
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE index
= "7
";
Vielen dank jetzt weiß ich schon ma wo des Problem ist :)
Hi!
des kommt dabei raus, der fehler sind die `` bei der 7 also des müsste so aussehen
index
="7" wie bekomm ich die weg???
Indem Du sie nicht hinschreibst?
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE index
= "7";
Ach Mist. Ich hab mich hinreissen lassen:
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE index
= 7;
Die " haben da genausowenig verloren.
Mahlzeit Steel,
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE
index
= 7;Die " haben da genausowenig verloren.
Und wenn Du jetzt noch mysql_real_escape_string() verwendest, sind Deine Skripte auch gegen "SQL Injection" (Informiere Dich zu dem Stichwort!) gefeit ...
MfG,
EKKi
Mahlzeit Steel,
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE
index
= 7;Die " haben da genausowenig verloren.
Und wenn Du jetzt noch mysql_real_escape_string() verwendest, sind Deine Skripte auch gegen "SQL Injection" (Informiere Dich zu dem Stichwort!) gefeit ...
MfG,
EKKi
DAnke für den Tipp, werd ich mache
so jetzt zu mein Folgeproblem, sorry fürs doppelposting hab gedacht des fällt unter ein neues Thema
In einem PHP Quellcode möchte ich gerne Daten einer Datenbank auslesen,
wenn ich jetzt in den Textfeld namens "index" den Primärschlüssel eingebe, soll er angezeigt werden, soweit noch kein Problem,
doch im späterem Script soll die variable $primaerschluessel in der "index" gespeichert ist wieder zum löschen verwendet werden,
Was muss ich machen das der Wert in der Variablen drinne bleibt,
Wenn ich ein echo $abfrage, also des is die abfrage wo die DELETE anweisung drinne steht, mache kommt dieses hier
DELETE FROM hardware_erweiterung WHERE index = ""
also muss die variable leer sein. Was kann ich tun
Mahlzeit Horst,
doch im späterem Script soll die variable $primaerschluessel in der "index" gespeichert ist wieder zum löschen verwendet werden,
Nochmals die Frage: Wozu kopierst Du den im Formularfeld namens "index" (und damit im entsprechenden superglobalen Array $_POST bzw. $_GET) enthaltenen Wert extra in eine - dazu noch vollkommen anders benannte - Variable um? Willst Du Dich selbst verwirren? Glückwunsch: das ist Dir offenbar gelungen. ;-)
Was muss ich machen das der Wert in der Variablen drinne bleibt,
Nichts. Wenn Du innerhalb *EINES* Skripts einer Variablen einen Wert zuweist, bleibt dieser dort solange "drinnen", bis Du ihn mit einem anderen Wert überschreibst.
Wenn ich ein echo $abfrage, also des is die abfrage wo die DELETE anweisung drinne steht, mache kommt dieses hier
DELETE FROM hardware_erweiterung WHERE index = ""
also muss die variable leer sein. Was kann ich tun
Vielleicht mal schauen, was Du wo mit der Variable anstellst?
MfG,
EKKi
Mahlzeit Horst,
doch im späterem Script soll die variable $primaerschluessel in der "index" gespeichert ist wieder zum löschen verwendet werden,
Nochmals die Frage: Wozu kopierst Du den im Formularfeld namens "index" (und damit im entsprechenden superglobalen Array $_POST bzw. $_GET) enthaltenen Wert extra in eine - dazu noch vollkommen anders benannte - Variable um? Willst Du Dich selbst verwirren? Glückwunsch: das ist Dir offenbar gelungen. ;-)
Was muss ich machen das der Wert in der Variablen drinne bleibt,
Nichts. Wenn Du innerhalb *EINES* Skripts einer Variablen einen Wert zuweist, bleibt dieser dort solange "drinnen", bis Du ihn mit einem anderen Wert überschreibst.
Wenn ich ein echo $abfrage, also des is die abfrage wo die DELETE anweisung drinne steht, mache kommt dieses hier
DELETE FROM hardware_erweiterung WHERE index = ""
also muss die variable leer sein. Was kann ich tun
Vielleicht mal schauen, was Du wo mit der Variable anstellst?
MfG,
EKKi
$loeschen = 'DELETE FROM hardware_erweiterung '
. ' WHERE index = "'.$primaerschluessel.'" ';
die löschabfrage ist aber richtig oder mhhhh
also als erstes im php script übergebe ich den inhalt des textfeldes in eine variable $primaerschluessel
danach verwende ich es in einem isset(suchen) und dannach nochmal in einem isset(loeschen)
liegt es vielleicht daran??
Mahlzeit Horst,
bitte verzichte zukünftig darauf, Deine Leser mit TOFU zu belästigen - zitiere nur den Teil des Beitrags, auf den Du Dich beziehst. Danke.
$loeschen = 'DELETE FROM hardware_erweiterung '
. ' WHERE index = "'.$primaerschluessel.'" ';die löschabfrage ist aber richtig oder mhhhh
Jein. Der PHP-Code, der SQL-Code erzeugt, scheint fast richtig zu sein. Nutze mysql_real_escape_string().
also als erstes im php script übergebe ich den inhalt des textfeldes in eine variable $primaerschluessel
Das ist - wie bereits mehrfach geschrieben - überflüssig und sinnfrei.
danach verwende ich es in einem isset(suchen) und dannach nochmal in einem isset(loeschen)
liegt es vielleicht daran??
Vielleicht. Vielleicht liegt es auch an Sonnenflecken oder Leitungsschwankungen.
Solange Du selbst kein zielführendes Debugging betreibst und Deinen Lesern relevante Quellcode-Teile vorenthältst, kannst Du keine wirklich hilfreichen Antworten erwarten.
MfG,
EKKi
INDEX ist ein fester Begriff in der MySQL Sprache. Änder einfach dein Tabellenfeld von index nach index1 und die jeweiligen PHP Passagen dann geht das schon !
INDEX ist ein fester Begriff in der MySQL Sprache. Änder einfach dein Tabellenfeld von index nach index1 und die jeweiligen PHP Passagen dann geht das schon !
funzzt auch so danke!!
Hi!
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE
index
= 7;Die " haben da genausowenig verloren.
Und wenn Du jetzt noch mysql_real_escape_string() verwendest, sind Deine Skripte auch gegen "SQL Injection" (Informiere Dich zu dem Stichwort!) gefeit ...
Nein! So einfach ist die Regel nun auch wieder nicht. Die Funktion hat den Bestandteil string im Namen. Eine einfache 7 ist aber kein String. Sie ist es erst dann, wenn sie in Anführungszeichen eingefasst wird.
Wenn man nicht mittels Anführungszeichen in den Stringkontext wechselt, so ist eine Behandlung, die ein Ausbrechen aus diesem Stringkontext verhindern soll, sinnfrei. Man muss nicht ausbrechen, man ist bereits draußen beziehungsweise draußen geblieben. Die Sicherheitslücke bleibt erhalten und das mit oder ohne Behandlung.
Ich hab da mal was vorbereitet: Kontextwechsel erkennen und behandeln (Vorabversion). Zum Verständnis der grundsätzlichen Problematik bitte ab der Einleitung lesen. Der angesprochene Spezialfall steht im Abschnitt Zahlen im (My)SQL-Statement zu finden.
Lo!
Ach Mist. Ich hab mich hinreissen lassen:
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE
index
= 7;Die " haben da genausowenig verloren.
ja aber mit denen hatts funktioniert, warum müssen die auch weg kommen???
Hi!
des kommt dabei raus, der fehler sind die `` bei der 7 also des müsste so aussehen
index
="7" wie bekomm ich die weg???Indem Du sie nicht hinschreibst?
SELECT kostenstelle, bezeichnung, abteilung, inventurnummer FROM hardware_erweiterung WHERE
index
= "7";
Tja die größten Probleme haben meist die einfachsten Lösungen :D
Vielen Dank
Mahlzeit Horst,
$primaerschluessel=$_POST['index'];
Wozu dieses Umkopieren? Du verschleierst dadurch nur die Herkunft der Variablen $primaerschluessel ...
if (isset($_POST['suche']))
{
$abfrage ='SELECT kostenstelle, bezeichnung, abteilung, inventurnummer '
. ' FROM hardware_erweiterung '
. ' WHEREindex
= "'.$primaerschluessel.'
";';}
Aha. Und jetzt lass den in der Variablen $abfrage gespeicherten String doch mal zu Debug-Zwecken ausgeben - und führe ihn "per Hand" gegen Deine SQL-Datenbank aus. Funktioniert er oder nicht? Wenn nicht: wie genau lautet der Inhalt?
WEnn ich jetzt auf suchen klicke, kommt kein Datensatz jedoch wenn ich für die variable $primaerschluessel druch einen Wert ersetze z.B. 8 dann bekomme ich einen Datensatz.
Dann ist offensichtlich Dein PHP-Code fehlerhaft, da er fehlerhaften SQL-Code erzeugt.
Hoffe die angaben sind jetzt besser. Fehlermeldungen kommen keine.
Ganz sicher? Oder werden sie nur unterdrückt oder fragst Du sie nicht ab?
MfG,
EKKi
Hola!
Im Prinzip möchte ich, dass ich durch ein Textfeld mit dem namen "index" den Primärschlüssel einer Tabelle eingeben kann, durch den Button suchen soll dann halt danach gesucht werden
hier mal das Formular
<td align="center"><br>
hier ist das Textfeld
Bitte Primärschlüssel eingeben: <input type="text" name="index" size="5">
Ich sehe dort aber kein Formular. Eventuell liegt hier schon der Fehler?
hier ist der Button
<input type="submit" name="suche" value="Datensatz suchen"
<br>
<hr style="color:#00ff00;"></td>
Der Button sollte erstmal irrelevant sein.
hier ist der Quellcode für die übergabe an SQL
$primaerschluessel=$_POST['index'];
Aufgrund des fehlenden Formulars nehme ich einfach nur mal an, dass POST korrekt ist. Hast Du mal eine Testausgabe gemacht?
so jetzt kommt der Quellcode für die Suchabfrage
if (isset($_POST['suche']))
{
$abfrage ='SELECT kostenstelle, bezeichnung, abteilung, inventurnummer '
. ' FROM hardware_erweiterung '
. ' WHEREindex
= "'.$primaerschluessel.'
";';
Hast Du den Abfragestring mal ausgeben lassen?
WEnn ich jetzt auf suchen klicke, kommt kein Datensatz jedoch wenn ich für die variable $primaerschluessel druch einen Wert ersetze z.B. 8 dann bekomme ich einen Datensatz.
Also
$abfrage ='SELECT kostenstelle, bezeichnung, abteilung, inventurnummer '
. ' FROM hardware_erweiterung '
. ' WHERE index
= "15
";';
====
funktioniert? Ich bin icht wirklich ueberzeugt.
Muss ich die variable irgendwie als int umwandeln weil in der Datenbank ist der Primärschlüssel als integer deklariert oder ist das in PHP unnötig.
Ein Query ist immer nur ein String, der von der Datenbank interpretiert wird.
Hoffe die angaben sind jetzt besser. Fehlermeldungen kommen keine.
Etwas besser. Ja. Du hast also den String schonmal manuell in der DB probiert oder in php die SQL-Fehlermeldungen ausgelesen um auszuschliessen, dass das DBMS keine Fehlermeldung wirft?
Mahlzeit Horst,
prinzipiell kann eine SQL-Abfrage in PHP nicht funktionieren ... sondern nur "in" der Datenbank. Du kannst per PHP höchstens eine Variable zusammenbasteln, die dann einen SQL-Befehl enthält - und diesen dann an die Datenbank schicken.
doch dass problem ist wenn ich in der Abfrage eine Zahl eingeb kommt auch ein Wert, aber wenn ich die Variable einsetze kommt keine Datensatz zum vorschein.
Die Menge des brauchbaren Inhalts dieses Satzes strebt stark gegen 0. Warum ist das so?
1. Du hast keinen relevanten Quellcode angegeben (weder HTML, noch SQL).
2. Du hast keine (eventuelle) Fehlermeldung, die vielleicht ausgespuckt wird, genannt.
3. Du hast nicht erzählt, was Du versuchst hast, um den Fehler einzukreisen.
4. Du hast offenbar keine Kontrollausgabe der durch PHP zusammengebastelten SQL-Abfrage gemacht (ansonsten wäre Dir da vielleicht schon etwas aufgefallen).
Schlussfolgerung: Du hast die "Tipps für Fragende" nicht gelesen und erwartest von Deinen Lesern hellseherische Fähigkeiten.
MfG,
EKKi