Variable als counter?

  • Hallo,


    folgender Code:


    PHP
    echo "<form action='datenaendern.php' method='post'>";echo "<p>Datensatz ändern:</p>";echo "<p>Welchen Datensatz möchten Sie ändern?<br>";echo "Bitte wählen</p>";echo "<input type='hidden' name='dateiname' value='" . $datname . "'>";echo "<select name='datnummer'>";
    	for($i = 1; $i <= $anzahl; $i++)		{			echo "<option value='" . $i . "'>Datensatz Nr. " . $i . "</option>";		}
    echo "</select>";echo "<input type='submit' value='Datensatz einlesen'>";echo "</form>";
    if (isset($_POST["datnummer"]))	{		echo "<br>";		echo "<form action='datenaendern.php' method='post'>";		echo "<input type='text' name='nummer'><br>";		echo "<input type='text' name='titel'><br>";		echo "<input type='text' name='laenge'><br>";		echo "<input type='text' name='breite'><br>";		echo "<input type='text' name='preis'><br>";		echo "<br>";		echo "<input type='submit' value='Datensatz ändern'>";		echo "<br>";								echo "Folgender Datensatz soll ausgelesen werden<br>";		echo "Datei: " . $_POST["dateiname"] . "<br>";		echo $_POST["datnummer"] . "<br>";				if(!file_exists($_POST["dateiname"]))			exit("Datei konnte nicht gefunden werden");		$datname = $_POST["dateiname"];	$daten = simplexml_load_file($datname);	$zahl = $_POST["datnummer"];				if (isset($daten))		{		echo $daten->bild['$zahl']->bildnr . "<br>";		echo $daten->bild['$zahl']->bildtitel . "<br>";		echo $daten->bild['$zahl']->laenge . "<br>";		echo $daten->bild['$zahl']->breite . "<br>";		echo $daten->bild['$zahl']->rahmen . "<br>";		echo $daten->bild['$zahl']->preis . "<br>";		}	else		echo "Variable nicht vorhanden";				
    			}



    Die Variable $zahl kommt aus einem Form mittels der Methode POST.
    Warum aber wird mit der rot markierten Code-Zeile der Datensatz nicht aufgerufen?
    Das einzelne Hochkommata (') habe ich auch schon weggelassen, funktioniert aber trotzdem nicht.
    Die Seite als solches wird ausgeführt, nur die Datensätze werden nicht ausgegeben.


    Irgendwelche Ideen?


    Danke schon mal.....

  • Allllsssoooooo:


    1. Bitte sieh zu dass du beim nächsten Mal ne ordentliche Formatierung drinne hast, so musste ich jetzt noch mehr Zeit investieren um deinen Code überhaupt lesen zu können...


    2. Vertraue niemals Formular-Eingaben!
    Übergebene Werte immer esapen z.B. so:

    PHP
    htmlentities($_POST['xxx']);


    3. So kann es tatsächlich nicht funktionieren, hilfreich wäre allerdsings eine Fehlermeldung...
    Bist du sicher, das du überhaupt in die IF-Anweisung springst?
    Spontan und schnell (und ungetestet):


    ansonsten wäre ein

    PHP
    print_r($daten)


    nützlich,...


    Grüße

  • Moin Kanufrosch,


    vielen Dank schon mal.


    1)Ja, weiß ich, ich kriege es aber nicht hin. Wie kopiere ich hier Code rein, so dass meine Formatierung beibehalten wird?
    2)escapen? nie gehört, damit werde ich mich befassen, sobald dieses Problem gelöst ist ;)
    3)Was hast Du an diesem Code geändert, außer die unnötigen Hochkommata?

    PHP
    echo $daten->bild[$zahl]->bildnr . "<br>";




    Aaaaalso:
    In die If Anweisung springt er. Ich habe mal spaßeshalber folgende Zeile in die if Anweisung eingefügt, und die wird ausgeführt.

    PHP
    print_r($daten)


    [size=10]


    PHP
    if (isset($daten)) {            echo $daten->bild[$zahl]->bildnr . "<br>";  
            echo $daten->bild[$zahl]->bildtitel . "<br>";     
            echo $daten->bild[$zahl]->laenge . "<br>";       
            echo $daten->bild[$zahl]->breite . "<br>";      
            echo $daten->bild[$zahl]->rahmen . "<br>";     
            echo $daten->bild[$zahl]->preis . "<br>";        
        } else                 echo "Variable nicht vorhanden";

    [size=10]


    [size=10]


    [size=10]Wenn ich mir vor dem ersten echo die var $zahl ausgeben lasse, funktioniert das auch.
    [size=10]Und wenn ich $zahl durch z.B. [4] ersetze, wird der Datensatz 4 korrekt ausgegeben.
    [size=10]Ich verstehe nicht, wo das Problem liegt, die Seite wird ohne Fehlermeldung, allerdings nicht korrekt ausgeführt.....
    [size=10]


    [size=10]Grüße,
    [size=10]Michael
    [size=10]


    [size=10]


    [size=10]

  • gewöhne dir gewisse sachen an



    Achte auf Einrückung
    NIEMALS ungefilterte Daten speichern oder ausgeben!!!!
    Defaults setzen
    Nix 1000 mal schreiben (echo)
    Form-Submits nach Möglichkeit in buttons
    Inputs IMMER in labels (placeholder reichen nicht außer bei logins)
    Variablen sind englisch


    ...

  • Hallo Wolf,


    vielen Dank!


    1)Achte auf Einrückung
    Werde mich bemühen. Wie formatiere ich meinen Code beim Kopieren ins Forum so, dass meine Einrückungen beibehalten werden?
    Die Tags "

    PHP

    " reichen offensichtlich nicht aus.




    2)NIEMALS ungefilterte Daten speichern oder ausgeben!!!!
    Was genau meinst du damit? Daten, die ich in einem Form gewinne oder Dateien, die ich hochlade? Welche Art der Filterung? z.B. Überprüfung auf Dateiformat / -größe???



    3)Defaults setzen
    Das?

    PHP
    $read_form_html .= '  </select>
      <button>Datensatz einlesen"</button>
    </form>
    <br> ';



    Kannte ich noch nicht. Klasse! Danke.



    3)Form-Submits nach Möglichkeit in buttons
    Worin liegt der Unterschied von <input type="submit"> und <button></button>?




    4)Inputs IMMER in labels (placeholder reichen nicht außer bei logins)
    Schönheit der Arbeit / Industriestandard / oder aus welchem Grund. Bin ja offen für alles ;)




    5)Variablen sind englisch


    ok





    Danke für die Hilfe!
    Michael







    P.S.



    Ein (int) vor $zahl war die Lösung!

  • 2) Ungefilterte Daten
    Also Daten kommen in deinem Fall über $_GET oder $_POST .. ich kann in die daten auch ein <script>alert('xss')</script> schreiben, du schreibst das in dein HTML und dann wird plötzlich ein Script auf deiner Seite ausgeführt, was ICH als BÖSER, FREMDER benutzer dort eingefügt habe.. dadurch ist es z.B. auch möglich Datenbankabfragen verherend zu manipulieren..!


    Denk daran IMMER die daten zu filtern, validieren und zu konvertieren .. z.B. ist eine Dateinummer immer eine Ganzzahl also vom typ Integer.

    PHP
    $my_number = (int) $_GET['file_number'];


    Jetzt kannst du dir sicher sein das in $my_number eine Zahl steht mit der du a) Arbeiten und Rechnen kannst und b) die du ohne dich zu fürchten ausgeben kannst oder in einer DB Abfrage benutzen könntest.
    Das ganze gilt auch für z.B. hochgeladene Dateien..
    immer CHMOD setzten, der das ausführen NICHT ZULÄSST, dateinamen umbenennen, den echten MIME-TYPE testen und und und



    3) defaults setzten
    default (engl.) = Standart


    Also werte sie verwendet werden, wenn z.B. keine filenumber gesetzt ist
    z.B.:

    PHP
    $filenumber = !empty($_POST['filenumber']) ? (int) $_POST['filenumber'] : 1;//wenn isset und nicht leer, zu int konvertieren und auslesen, sonnst 1 nehmen (kannst auch 0 hinschreiben)


    Wenn filenumber NICHT LEER, NIMM filenumber und konvertiere vorher zum typ int, SONNST nehme 1.



    Das da

    PHP
    $read_form_html .=

    ist einfaches string verknüpfen wie z.B.

    PHP
    $a = 'a'.'b';// ab
    $b = $a .'c';// abc
    $c = $a . $b;// ababc
    $b .= 'd';// abcd


    Das Ganze gibt es auch für zahlen
    [code=php]
    $a = 2 ;
    $a += 2;// 4



    3.2)
    Der unterschied liegt darin, das du bei buttons auch ::before und ::after ansprechen kannst


    4) Inputs IMMER in labels
    Usability.. Wenn du n Formular hast und nichtmehr weist was du in das Feld rein schreiben wolltest .. außerdem für Barrierefreiheit.. in der Schweiz müssen Internetshops z.B. Barrierefrei ein, sonnst drohen Strafen wegen diskriminierung.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!