Zur Navigation

Wieder Probleme mit PHP-Versions-Änderung? [2]

11 Peter

Ok habe ich geändert, wie muß ich jetzt die Tabelle auswählen.
     // einen sicheren Query zusammenstellen
        $query = sprintf("INSERT INTO testtab ('breite', 'preis1', 'preis2', 'preis3', 'preis4') VALUES ('%s', '%s', %d)",
                    mysql_real_escape_string($breite, $link),
                    mysql_real_escape_string($preis1, $link),
                    mysql_real_escape_string($preis2, $link),
                    mysql_real_escape_string($preis3, $link),
                    mysql_real_escape_string($preis4, $link));
        mysql_query($query, $link);
        if (mysql_affected_rows($link) > 0) {
            echo "Produkt eingefuegt\n";
        }
Hier wird auf die Tabelle "testtab" verwiesen, oder muß ich diese schon vorher definieren?

17.06.2008 00:19

12 Jörg Kruse

Die Tabelle ist korrekt hinter dem "INTO" angegeben. Allerdings führst du dann in der Query in der ersten Klammer zwar fünf Spalten, in der zweiten Klammer aber nur drei Werte auf, die in erstere eingegeben werden sollen.

17.06.2008 00:38

13 Peter

habe ich shon geändert:
        $query = sprintf("INSERT INTO testtab ('breite', 'preis1', 'preis2', 'preis3', 'preis4') VALUES ('%s', '%s', '%s', '%s', '%s')",

geht aber auch nicht.

für was steht "%s" und " %d"?

17.06.2008 00:45

14 Rudy

für was steht "%s" und " %d"?

%s = String, %d = Dezimal mit Vorzeichen

17.06.2008 01:45

15 Jörg Kruse

Fällt mir grad erst auf: Spaltennamen werden nicht in Hochkommata eingeschlossen, sondern allenfalls in Backticks (auf die bei nicht reservierten Wörtern aber auch verzichtet werden kann):

$query = sprintf("INSERT INTO testtab (`breite`, `preis1`, `preis2`, `preis3`, `preis4`) VALUES ('%s', '%s', '%s', '%s', '%s')",

Wenn dann imer noch kein Datensatz eingefügt wird, lass dir bitte den Fehler ausgeben:

        if (mysql_affected_rows($link) > 0) {
            echo "Produkt eingefuegt\n";
        } else {
            echo mysql_error();
        }

17.06.2008 09:50

16 Peter

Hallo Rudy,

danke für die Antwort, habe den Code den Feldvorgaben entsprechend geändert.
('%s', '%d', '%d', '%d', '%d')


Danke Jörg, das war der richtige Hinweis, wuste noch garnicht, das man auch "Hochkommata" schreiben muß. Ehrlich, ich dachte das wäre falsch und habe es geändert, weil ich hier, den Fehler verborgen sah.

Darf ich denn in der PHP-Datei die Zugangsdaten eingetragen lassen, ich dachte, die müste ich immer per include "connect.inc.php" einbinden.

Muß ich denn auch alle andern PHP-Anfragen so absichern?
z.B. die ganzen Preisberechnungen mit der Breite und Höhe bei den Jalousien?

17.06.2008 22:49 | geändert: 17.06.2008 22:52

17 Rudy

Darf ich denn in der PHP-Datei die Zugangsdaten eingetragen lassen, ich dachte, die müste ich immer per include "connect.inc.php" einbinden.

Muß ich denn auch alle andern PHP-Anfragen so absichern?

Ja und Ja. :) Ersteres ist per include aber komfortabler, wenn Du das Skript auf einen anderen Server portieren oder lokal laufen lassen willst, da Du dann die Zugangsdaten nur an einem Ort ändern muss, wenn mehrere Skripts eine Datenbankverbindung aufbauen.

17.06.2008 23:08

18 Peter

Ich hatte per include versucht, bekamm aber in den "Verbindungsanweisungen" Fehlermeldungen, erst ohne die "include"-Verzweigung kamm es zur Datenbankverbindung.


Bei den Anderen PHP-Seiten, wird die "Query" durch Berechnung aus der Einzugebende Höhe und Breite erstellt. Hier kann ich wohl davon ausgehen, das man keine "Befehle" in der Datenbank "einschläussen" kann, oder?

17.06.2008 23:48

19 Jörg Kruse

Bei den Anderen PHP-Seiten, wird die "Query" durch Berechnung aus der Einzugebende Höhe und Breite erstellt. Hier kann ich wohl davon ausgehen, das man keine "Befehle" in der Datenbank "einschläussen" kann, oder?

Das Ergebnis der Berechnung wird wohl ein Integer oder Float sein - diese enthalten keine Zeichen, die für eine Injection genutzt werden kann. Direkt von außen übernommene Zahlen sollten aber auf jeden Fall geprüft werden, bevor sie in einer Query verwendet werden

18.06.2008 15:21

20 Peter

Prima, dann weis ich jetzt mehr.

Danke für Eure Geduld und Hilfe

Viele Grüße
Peter

18.06.2008 18:13

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]