• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP + Makros + DLL + MySQL = Murks :-)

Teratek

Neues Mitglied
Hallo Forum,

folgendes Problem:

ich habe hier eine Software laufen die in einem Template Felder wie z.B. hier [USERNR] durch passende Werte aus dem Program ersetzt und so die Gestaltung recht frei und variable erlaubt. Haupstächlich habe ich HTML Dateien und nur eine PHP. Die verschiedenen Aufrufe der Seiten erfolgen mit Parameterübergabe an eine aufbau.dll.

PHP:
<?php
$connect = odbc_connect("maindb","user","passwort");
if ($connect) {
        echo ("Keine Probleme");
        }
else {echo ("Ups!");}
$var1 = '[USERNR]';
$query = "SELECT * from nutzer where nutzernr = ".$var1;
echo("$query");
$result = odbc_exec($connect, $query);
if ($result) {
    echo ("Query erfolgreich: ");
    }
else {echo ("Fehler!");}
$var3 = odbc_result($result,'vorname');
$var4 = odbc_result($result,'Nachname');
?>

Fehlermedlung kommt weil der Syntax angeblich falsch ist. Die query wird korrekt ausgegeben: SELECT * from nutzer where nutzernr = 154, aber anscheinend nicht richtig verarbeitet. Wenn ich die Zahl 154 direkt eingebe ohne variable $var1 funzt alles. Darf man die query auf diese Art nicht zusammenbauen?

Christian
 
SQL darfst du schon zusammenbauen. Aber bist du auch sicher dass [USERNR] schon ersetzt wurde, bevor das PHP interpretiert wurde? Sonst ist dein Querie ja SELECT ... where nutzernr=[USERNR] und das würde keiner Datenbank schmecken :-).
 
ich lasse mir ja mit echo("$query"); den String anzeigen. In der Fehlemledung ist die query auch korrekt. Kann man dann davon ausgehen, dass zum Zeitpunkt der odbc_connect der string richtig eingefügt wird? Gibt es evtl. noch eine unsichtbare Formatierung?
 
Gibt schon Zeichen, die man nicht sieht wie Kontrollzeichen, aber die müsstest dann im erzeugten Response-HTML sehen oder könntest dir mal die Länge vom String "$var1" ausgeben lassen. Du meinst also, wenn du
PHP:
$var1= '[USERNR]';

durch
PHP:
$var1= '154';

ersetzt, dann geht es?
 
Vielleicht hilft die konkrete Fehlermeldung weiter. Die kannst du dir wohl hiermit ausgeben lassen:

- PHP: odbc_errormsg - Manual

Nach deinen Schilderungen (Script läuft durch, wenn du nutzernr von Hand reinschreibst) würde ich das Problem eher im Aufruf des PHP-Scripts vermuten.
 
Danke erstmal für die Hilfe.

Habe folgende Befehle eingefügt
PHP:
echo strlen($query);

PHP:
$error = odbc_error($connect);
echo("$error");

der Browser gibt jetzt folgendes aus

Alles supi:
SELECT * from nutzer where nutzernr = 154
46
Warning: odbc_exec() [function.odbc-exec]: SQL error: [MySQL][ODBC 3.51 Driver][mysqld-4.1.22-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '154' at line 1, SQL state 37000 in SQLExecDirect in C:\Program Files (x86)\Forum\templates\blau\aufbau.php on line 224
37000
Fehler!
Warning: odbc_result(): supplied argument is not a valid ODBC result resource in C:\Program Files (x86)\Forum\templates\blau\aufbau.php on line 234

Warning: odbc_result(): supplied argument is not a valid ODBC result resource in C:\Program Files (x86)\Forum\templates\blau\aufbau.php on line 235

Der String sollte eigentlich 41 lang sein. 5 Zeichen zuviel. Was könnte das sein?
 
Also so wie es aussieht liegt es wohl daran, dass php zuerst ausgeführt wird bevor das Makro eingefügt wird. Die 5 Zeichen sind genau die Differenz zwischen 154 und [USERNR]. Hab das gerade nochmal mit einer substr Funktion überprüft. Jemand Rat für mich?
 
dann würde ja statt [USERNR] - USERNR an odbc_exec übergeben, was ja auch zum Fehler führen würde.

Javascript wird ja Clientseitig ausgeführt soweit ich weiß. Würde es klappen beim Login direkt per Javascript die USERNR an PHP zu übergeben und die dann einfach später im ODBC script zu verarbeiten?

Login und Mysql Zugriff stehen in zwei verschiedenen Dateien. Wäre die PHP variable noch da wenn ich eine neue Seite aufrufe?
 
Ich kann meinen letzten Post nur wiederholen. Dir kann niemand helfen, wenn niemand weiß, was du da tust. Das mag für dich alles klar sein, aber für uns eben nicht.
 
Mein Problem ist momentan die Reihenfolge wie das Script meiner php Datei ausgeführt wird in Verbindung mit Makros, die automatisch ausgefüllt werden.

Ich habe hier eine fertigen Code, den ich nur verändere. Das Skript greift nicht selber auf die mysql Datenbank zu sondern macht das irgendwie über die DLL Bibliothek. Ich habe Makros, die automatisch in den Quelltext mit passenden Werten aus der Datenbank gefüllt werden.

Das MAKRO [USERNR] wird bei Seitenneuerstellung automatisch eingefügt, sofern der Nutzer eingeloggt ist. Ich möchte jetzt direkt auf meine mysql datenbank per ODBC zugreifen, wobei ich eigentlich nur einen Wert eines bestimmten Feldes benötige in Abhängigkeit von [USERNR]. Es wäre alles super einfach, wenn ich die $query direkt mit

"SELECT * from nutzer where nutzernr = [USERNR]";

angeben könnte, aber das führt zur Fehlermeldung, weil zunächst PHP das Skript interpretiert und exakt den String oben an die mysql tabelle weitergibt, bevor das Makro ausgefüllt wird.

Kann ich das umgehen?





 
Konvertiere dein $Var1 mal in ein integer. Ich glaube der Fehler kommt daher, dass du einen String übergibst wo ein Integer erwartet wird.
 
Das Makro spielt hier überhaupt keine Rolle. Er hat irgendwo ein Makro, sowie man das von MS Access oder MS Excel her kennt. Dieses Makro füllt ihm lediglich die Input-Felder in einem Formular aus bevor er das absendet, das ist das Geheimnis.
Sein Problem liegt aber nun im PHP-Script, welches die Parameter erhält. Da gibt es ein Parameter USERNR welches er ausliest und in einer Variable namens var1 schreibt.
In dieser Variable befindet sich jetzt irgendwas, im besten Fall eine Zahl. Diese nimmt er und baut damit eine SQL-Abfrage auf.
Die dahinterliegende Datenbank wird aber nicht wie bei MySql direkt angesprochen, sondern über einen ODBC Treiber.

Wenn er nun in das INPUT-Feld USERNR eine Zahl eingibt erhält er vom ODBC-Treiber eine Fehlermeldung.

Hoffe das korrekt interpretiert zu haben.
 
ja, der Wert für das Makro wird leider erst eingefügt nachdem PHP bereits serverseitig alles ausgeführt hat.

Die ODBC_exec wird hinten mit ...[USERNR] weitergegeben
Auf dem Bildschirm erscheint bei Seitenaufruf aber die korrekte query, wenn ich sie mir mit echo anzeigen lasse.

Um das Problem zu lösen habe ich gerade versucht beim Login des User ein Javascript einzuführen. Dieses wird ja clientmäßig ausgeführt also sollte ich mit var user="[USERNR]"; auch tatsächlich eine Zahl in meiner login.html gespeichert bekommen. Dummerweise behält javascript anscheinend diese Variable nur innerhalb des HTML Dokuments. Brauchen tue ich den Wert in meiner aufbau.php. Kann ich einen Wert Dokumentenübergreifend speichern?
 
Parameter werden immer als String übergeben, auch wenn Zahlen drinstehen. Javascript ist hier also der falsche Ansatz. Hast du schon versucht im PHP-Script die $var1 in eine integer zu konvertieren.
 
Was dein Makro WANN macht, muss man dir einfach glauben. Lt deinem Code, sehe ich da kein Makro. Du belegts die Variable $var mit einem String ($var1 = '[USERNR]'), gleich danach wird ein query zusammengebaut und ausgeführt. Ich vermute, dass dein Makro irgendwo in der odcb Verbindung eingabut ist, aber WISSEN ...?
Was steht denn in $var, wenn man ein echo VOR der odcb-Verbindung macht. Wenn schon die Zahl drinnen steht, mach ein trim($var).

Überhaupt ist nicht einzusehen, wieso aus trim($var1) aus '[USERNR]'; ein 'USERNR'; machen sollte, trim entfernt keine eckigen Klammern.
 
Also mein Code sieht mittlerweile wie folgt aus, habe verschiedene Varianten eingebaut

PHP:
$usernr = '[TXT_USERNR]';
echo($usernr);
echo("<br>");
$query = "SELECT * from nutzer where nutzernr = ".trim((int)$usernr);
echo strlen($query);
echo("<br>");
echo ($query);
echo("<br>");
echo (trim((int)$usernr));
echo("<br>");
echo((int)$usernr);
echo("<br>");
echo("$usernr");
echo("<br>");
echo strlen($usernr)."<br>";
echo substr($usernr,0,12)."<br>";
echo substr($usernr,0,3)."<br>";
$var5 = substr($usernr,0,3);
echo ("var5=".$var5);

Als Ausgabe gibt es
PHP:
154
38
SELECT * from kunde where kundennr = 0
0
0
154
12
154
[TX
var5=[TX

Vor allem das Verhalten von

PHP:
echo substr($usernr,0,12)."<br>"; // Ergebnis: 154  - Länge wurde vorher mit 12 angegeben ???
echo substr($usernr,0,3)."<br>";  // Ergebnis: [TX

gibt mir zu denken.

Weiß schon nicht mehr was ich ausprobieren soll. Gibt es eine Möglichkeit die ODBC mysql queries serverseitig zu loggen, so dass ich mir angucken kann, was im Endeffekt ankommt?
 
Zurück
Oben