Hab Probleme ...
am 22.08.2006 10:55:02 von klaus dammer
Hi!
In einem Online-Shop will ich die Rechnungsnummer etwas "verstecken".
Also so in der Art: abc*RgNr*xyz
Habe ich schon an vielen Stellen geschafft, nur hier komme ich nicht weiter:
Original:
1. Versuch
sprintf($HTTP_GET_VARS['order_id']) . 'xyz' .
wirft ein Fehler aus, dass zu wenige "arguments" da sind.
2. Versuch
..
gibt folgende Ausgabe:
%sabcRgNrxyz
^^
Ich denke das Problem zu verstehen ... nur kann ich es nicht lösen?
Wer kann mal kurz helfen?
Gruß
Re: Hab Probleme ...
am 22.08.2006 11:05:06 von Christian Schmelzer
klaus dammer wrote:
> Hi!
>
> In einem Online-Shop will ich die Rechnungsnummer etwas "verstecken".
> Also so in der Art: abc*RgNr*xyz
> Habe ich schon an vielen Stellen geschafft, nur hier komme ich nicht
> weiter:
>
> Original:
>
>
>
>
> 1. Versuch
>
>
> sprintf($HTTP_GET_VARS['order_id']) . 'xyz' .
>
> wirft ein Fehler aus, dass zu wenige "arguments" da sind.
>
>
> 2. Versuch
>
>
> . 'xyz' .
>
> gibt folgende Ausgabe:
>
> %sabcRgNrxyz
> ^^
Hallo,
keine Ahnung was in HEADING_ORDER_NUMBER drin steht. Das hast du
verschwiegen. Vermutlich %s, für Versuch 2 macht das natürlich keinen Sinn.
Christian
Re: Hab Probleme ...
am 22.08.2006 11:05:06 von Frank Schenk
klaus dammer wrote:
> Hi!
>
> In einem Online-Shop will ich die Rechnungsnummer etwas "verstecken".
> Also so in der Art: abc*RgNr*xyz
> Habe ich schon an vielen Stellen geschafft, nur hier komme ich nicht
> weiter:
>
>
> sprintf($HTTP_GET_VARS['order_id']) . 'xyz' .
>
> wirft ein Fehler aus, dass zu wenige "arguments" da sind.
There's a manual available at http://www.php.net ...
Re: Hab Probleme ...
am 22.08.2006 11:13:53 von Tobias Kutzler
Hallo Klaus,
klaus dammer schrieb:
> In einem Online-Shop will ich die Rechnungsnummer etwas "verstecken".
> Also so in der Art: abc*RgNr*xyz
Ist diese Rechnungsnummer so geheimnisvoll, dass die keiner kennen darf?
> Original:
>
>
>
> 1. Versuch
>
>
> sprintf($HTTP_GET_VARS['order_id']) . 'xyz' .
Wie wärs mit:
'abc'.$HTTP_GET_VARS['order_id'].'xyz').
> wirft ein Fehler aus, dass zu wenige "arguments" da sind.
Ist doch logisch! Du übergibst an sprintf nur einen Parameter, obwohl
diese Funktion 2 Parameter erwartet.
> 2. Versuch
>
>
> 'xyz'
> .
Oder damit:
Anmerkung: Ich hab das HEADING_ORDER_NUMBER weggelassen, weil es
scheinbar nur ein %s enthält, was nur durch sprintf ersetzt wird.
Mir ist nicht so ganz klar, warum Du das so kompliziert lösen willst.
Wenn Du die Rechnungsnummer hast und etwas davor und dahinter setzen
willst, dann einfach wie im 2. Versuch, aber ohne die Konstante
HEADING_ORDER_NUMBER machen. Der 1. Versuch ginge zwar theoretisch auch.
Aber da in HEADING_ORDER_NUMBER nur das %s drinsteht, was dann mittels
sprintf() ersetzt wird, ist es noch unsinniger.
> Ich denke das Problem zu verstehen ... nur kann ich es nicht lösen?
Wenn Du es verstehen würdest, dann könntest Du es auch lösen. Das ist
für mich jetzt erst recht schwachsinnig. Sorry!
Noch ein Tip: Wenn Du die Rechnungsnummer verschleiern willst, dann pack
das doch besser in eine Funktion, die genau das macht, was Du willst. So
suchst Du sonst jetzt alle Stellen ab und setzt den
"Verschleierungsalgorithmus" an diese Stelle. Wenn Du das Verfahren
ändern möchtest, dann müsstest Du lediglich die Funktion ändern und
nicht alle Stellen suchen, an denen dieses Verfahren angewendet wird.
> Wer kann mal kurz helfen?
HTH,
Tobias
Re: Hab Probleme ...
am 22.08.2006 11:21:13 von Ulf Kadner
klaus dammer wrote:
> Original:
>
>
> 1. Versuch
>
> sprintf($HTTP_GET_VARS['order_id']) . 'xyz' .
>
> wirft ein Fehler aus, dass zu wenige "arguments" da sind.
>
> 2. Versuch
>
> 'xyz'
> .
>
> gibt folgende Ausgabe:
>
> %sabcRgNrxyz
> ^^
>
> Ich denke das Problem zu verstehen ... nur kann ich es nicht lösen?
Wenn Du es nicht lösen kannst verstehst Du es auch nicht. :-)
Die Konstante HEADING_ORDER_NUMBER enthält einen Formatstring der mit
sprintf verarbeitet werden muss, da er 1 Ersetzungstag (%s in Deinem
Fall) enthaelt.
Ein Blick ins Manual hätte Dir gesagt, das sprintf(mit minimal 2
Parametern aufgerufen werden muss.
Allerdings ist es total Sinnlos was der Autor der Software da gebastelt
hat, da man statt:
echo sprintf(HEADING_ORDER_NUMBER, $HTTP_GET_VARS['order_id'])
auch gleich echo $HTTP_GET_VARS['order_id'] schreiben kann
Mal abgesehen von der Tatsache das $HTTP_GET_VARS total veraltet ist.
Schreib das mal zu $_GET um.
Defacto kannst Du die Konstante und das sprintf gleich ganz weglassen.
Weiterhin darf *NIEMALS* wirklich *NIEMALS* ein Wert der von aussen in
Dein Script einfließt ungeprüft in den Code übernommen werden!
Also alles was per GET-Parameter oder POST kommt grundsätzlich prüfen!
Das birgt enorme Sicherheitsrisiken wenn man da Fehler macht.
Am einfachsten wird sein, wenn du das was Dir da an Code vorliegt
einfach wegschmeist. Eine Anwendung die derartige Sicherheitsprobleme
schaft kann nicht gut sein und wurde eindeutig von jemand erstellt, der
vieleicht mal was von PHP gehört hat. Mehr aber auch nicht.
Ich bitte Dich Dir das wirklich zu Herzen zu nehmen und dich nach einer
besseren Anwendung umzusehen! Manchmal ist es auch Sinnvoll nen paar
Euronen zu invenstieren.
MfG, Ulf
>
> Wer kann mal kurz helfen?
>
> Gruß
Re: Hab Probleme ...
am 22.08.2006 12:31:45 von Knut Kohl
Hallo Ulf,
Ulf Kadner schrieb am 22. Aug 2006 in de.comp.lang.php.misc:
> Allerdings ist es total Sinnlos was der Autor der Software da gebastelt
> hat, da man statt:
> echo sprintf(HEADING_ORDER_NUMBER, $HTTP_GET_VARS['order_id'])
> auch gleich echo $HTTP_GET_VARS['order_id'] schreiben kann
Na ja, wie es so schön heißt "kommt drauf an"...
Eine sinnvolle Verwendung wäre z.B. was in der Art
define ( 'HEADING_ORDER_NUMBER', 'RE%6d' );
dann kann man das global auf seine Bedürfnisse anpassen.
> Mal abgesehen von der Tatsache das $HTTP_GET_VARS total veraltet ist.
> Schreib das mal zu $_GET um.
> Defacto kannst Du die Konstante und das sprintf gleich ganz weglassen.
> Weiterhin darf *NIEMALS* wirklich *NIEMALS* ein Wert der von aussen in
> Dein Script einfließt ungeprüft in den Code übernommen werden!
> Also alles was per GET-Parameter oder POST kommt grundsätzlich prüfen!
> Am einfachsten wird sein, wenn du das was Dir da an Code vorliegt
> einfach wegschmeist. Eine Anwendung die derartige Sicherheitsprobleme
> schaft kann nicht gut sein und wurde eindeutig von jemand erstellt, der
> vieleicht mal was von PHP gehört hat. Mehr aber auch nicht.
> Ich bitte Dich Dir das wirklich zu Herzen zu nehmen und dich nach einer
> besseren Anwendung umzusehen! Manchmal ist es auch Sinnvoll nen paar
> Euronen zu invenstieren.
Ansonsten sowas von Full Ack...
> MfG, Ulf
Regards,
Knut
--
Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet
Re: Hab Probleme ...
am 22.08.2006 12:37:39 von Ulf Kadner
Knut Kohl wrote:
>> auch gleich echo $HTTP_GET_VARS['order_id'] schreiben kann
>
> Na ja, wie es so schön heißt "kommt drauf an"...
Hallo Knut!
Logisch kommts drauf an. Aber in seinem Fall steht da nur %s drin und
das macht keinen Sinn. (Erkennst Du leicht an seinem geposteten Output)
MfG, Ulf
Re: Hab Probleme ...
am 22.08.2006 14:17:44 von Knut Kohl
Hallo Ulf,
Ulf Kadner schrieb am 22. Aug 2006 in de.comp.lang.php.misc:
> Hallo Knut!
> Logisch kommts drauf an. Aber in seinem Fall steht da nur %s drin und
> das macht keinen Sinn. (Erkennst Du leicht an seinem geposteten Output)
Meine Glaskugel meinte ja auch, dass vielleicht so eine Art
"Customizing" in dem Projekt vorgesehen ist und %s ist einfach die
Standard-Installation...
> MfG, Ulf
Regards,
Knut
--
Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet
Re: Hab Probleme ...
am 22.08.2006 14:39:55 von Ulf Kadner
Knut Kohl wrote:
> Meine Glaskugel meinte ja auch, dass vielleicht so eine Art
> "Customizing" in dem Projekt vorgesehen ist und %s ist einfach die
> Standard-Installation...
Hallo Knut!
Ich denke das Problem wurde beschrieben. Mehr Infos haben wir nicht. Was
da evtl. noch geschehen wird mit dem Code können wir nur glasgooglen und
ist m.M. nach auch nicht relevant um die Frage des OPs zu beantworten.
Klar kannste hier noch tausend andere Szenarien erfinden was wie wann wo
gemacht werden könnte. Daran will ich dich natürlich nicht hindern. :-)
Aber was vorliegt und was werden soll bzw. nicht funktioniert ist klar
beschrieben.
MfG, Ulf
Re: Hab Probleme ...
am 22.08.2006 16:47:48 von Niels Braczek
Tobias Kutzler schrieb:
> Anmerkung: Ich hab das HEADING_ORDER_NUMBER weggelassen, weil es=20
> scheinbar nur ein %s enthält, was nur durch sprintf ersetzt wird.
Wie kommst du darauf? Üblicherweise setzt man solche Konstanten zur
Internationalisierung ein; HEADING_ORDER_NUMBER enthält vielleicht je
nach geladener Sprachdatei zB. 'Rechnungs-Nr. Q%s' oder 'Invoice N° %s'=
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Hab Probleme ...
am 22.08.2006 17:18:05 von Tobias Kutzler
Niels Braczek schrieb:
> Tobias Kutzler schrieb:
>
>> Anmerkung: Ich hab das HEADING_ORDER_NUMBER weggelassen, weil es
>> scheinbar nur ein %s enthält, was nur durch sprintf ersetzt wird.
>
> Wie kommst du darauf? Üblicherweise setzt man solche Konstanten zur
> Internationalisierung ein; HEADING_ORDER_NUMBER enthält vielleicht je
> nach geladener Sprachdatei zB. 'Rechnungs-Nr. Q%s' oder 'Invoice N° %s'.
>
Deswegen (Zitat aus Ursprungspost):
echo HEADING_ORDER_NUMBER . 'abc' . $HTTP_GET_VARS['order_id'] . 'xyz';
gibt folgende Ausgabe:
%sabcRgNrxyz
^^
Wenn natürlich mehr drinsteht, dann macht es keinen Sinn es wegzulassen.
Mir ist auch grad aufgefallen, dass man das Problem, welches er hat auch
damit lösen könnte (um die Verwirrung komplett zu machen ;-) ):
DEFINE("HEADING_ORDER_NUMBER", "abc%sxyz");
sprintf(HEADING_ORDER_NUMBER, $_GET['order_id']);
Ciao,
Tobias
Re: Hab Probleme ...
am 22.08.2006 21:07:43 von Niels Braczek
Tobias Kutzler schrieb:
> Niels Braczek schrieb:
>> Tobias Kutzler schrieb:
>>=20
>>> Anmerkung: Ich hab das HEADING_ORDER_NUMBER weggelassen, weil es=20
>>> scheinbar nur ein %s enthält, was nur durch sprintf ersetzt wird.
>>=20
>> Wie kommst du darauf? Üblicherweise setzt man solche Konstanten zur
>> Internationalisierung ein; HEADING_ORDER_NUMBER enthält vielleicht j=
e
>> nach geladener Sprachdatei zB. 'Rechnungs-Nr. Q%s' oder 'Invoice N° =
%s'.
>>=20
>=20
> Deswegen (Zitat aus Ursprungspost):
>=20
> echo HEADING_ORDER_NUMBER . 'abc' . $HTTP_GET_VARS['order_id'] . 'xyz';=
>=20
> gibt folgende Ausgabe:
>=20
> %sabcRgNrxyz
> ^^
>=20
> Wenn natürlich mehr drinsteht, dann macht es keinen Sinn es wegzulass=
en.
Das vermute ich, dass da mehr drinsteht bzw. mal drinstehen soll.
> Mir ist auch grad aufgefallen, dass man das Problem, welches er hat auc=
h=20
> damit lösen könnte (um die Verwirrung komplett zu machen ;-) ):
>=20
> DEFINE("HEADING_ORDER_NUMBER", "abc%sxyz");
> sprintf(HEADING_ORDER_NUMBER, $_GET['order_id']);
Das wäre IMHO die einzig (semantisch) korrekte Lösung.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------