2016-05-01 13 views
1

Student hier. Ich nehme eine Klasse in PHP, und ich muss alles mit PHP machen, nicht jQuery oder Javascript (nicht beschweren, wie es ist mit der Klasse, die ich nehme - es ist sehr cool und ich genieße es sehr).Eingabewert beim Senden/Neuladen von Eingabe beibehalten, die aus assoziativem Array erstellt wurde (Nein Jquery/Javascript)

Ich arbeite an Student PHP-Anwendung, die, wenn ich fertig bin, Daten scraping verwenden wird, um Zugriff auf diese Wochen neue Comic-Veröffentlichungen und speichern sie in einem assoziativen Array, die dann durchgeschleift werden, um eine Reihe von Eingaben (Nummer) um es einem Benutzer zu ermöglichen anzugeben, wie viele von jedem Comic er bestellen möchte. Dann mache ich etwas Mathe, um dem Benutzer die Zwischensumme, die Steuer und die Gesamtsumme zu zeigen und sie zu bitten, ihre Bestellung zu bestätigen oder zu überarbeiten. Dies ist ein Studentenprojekt, ich bin ein Student. Dies ist kein echter Anwendungsfall, sondern eine Trainingsstunde.

Das Problem, das ich finde, ist, dass bei submit, ich bin nicht in der Lage, die Eingabewerte zu füllen, so dass jemand sehen kann, was sie bestellt haben/was ihre Bestellung wert ist, sollten sie es "revidieren" und erneut einreichen Bestellung vor der Bestätigung.

var_dumps zeigen, dass ich den Wert habe, ich kann einfach nicht den Wert zu repopulate/Anzeige in seinem jeweiligen Eingabefeld nach einem Beitrag zurück senden erhalten. Das Problem für mich scheint mit dem ". $ _POST ['valueName']." Zu sein. Da jede Eingabe von einem assoziativen Array generiert wird, habe ich keine Vorkenntnis dessen, was der Name sein wird, also kann ich nicht einfach "$ _POST ['valueName']" machen, stattdessen muss ich etwas wie "$ _POST ['$ var '] ", aber das funktioniert nicht, da es über die Verkettung erfolgt. Hoffentlich hat jemand da draußen eine Idee, wie ich das am besten angehen kann.

Wieder - ich bin ein Student, also bitte nehme an, ich weiß nichts - Vielen Dank für die Suche Prost!

Dies ist mein Test-Array:

<?php 
    // My test array 
    $newRelease = [ 
     'All-New Wolverine #7' => '3.99', 
     'Captain America Omnibus Volume 1 HC (New Printing)' => '125.00', 
     'Amazing Spider-Man #11' => '3.99', 
     'Daredevil #6 (David Lopez Story Thus Far Variant Cover)' => 'AR', 
     'Doctor Strange #7 (Chris Bachalo Regular Cover)' => '3.99', 
    ]; 


    /* 
    * Loop thru array, create inputs which populate 
    * when submitted based on post values 
    * PHP course - can't use javascript/jquery - must be PHP 

    foreach ($newRelease as $title => $price) { 
    echo $title . ' - ' . $price . ' (ea.) <input type="text" name="' . $title . '" value="' . $_POST[$title] . '" > <br /> -- ' . $check . ' -- <br/><br />'; 
    } 

Antwort

2

Problem:

Das Problem, das ich bin Feststellung, dass auf einreichen, ich bin nicht in der Lage, die Eingabewerte, damit die Menschen zu bevölkern kann sehen, was bestellt wird, sollten sie sie ändern wollen, sobald sie die Summe sehen.

Lösung:

In jeder Iteration der Schleife foreach prüfen, ob $_POST['YOUR_FIELD_NAME'] gesetzt ist oder nicht. Wenn es gesetzt ist, dann zeige den vom Benutzer übermittelten Wert an, d. H. $_POST['YOUR_FIELD_NAME'], ansonsten zeige den vordefinierten Array-Wert price an.

<?php 

    $newRelease = [ 
     'All-New Wolverine #7' => '3.99', 
     'Captain America Omnibus Volume 1 HC (New Printing)' => '125.00', 
     'Amazing Spider-Man #11' => '3.99', 
     'Daredevil #6 (David Lopez Story Thus Far Variant Cover)' => 'AR', 
     'Doctor Strange #7 (Chris Bachalo Regular Cover)' => '3.99', 
    ]; 
    ?> 
    <form action="index.php" method="POST"> 
    <?php 
    foreach ($newRelease as $title => $price){ 
     $title = str_replace(' ', '_', $title); 
     ?> 
     <input type="text" name="<?php echo $title; ?>" value="<?php if(isset($_POST[$title])){ echo $_POST[$title]; }else{ echo $price; } ?>" ><br /> 
     <?php 
    } 
    ?> 
    <input type="submit" name="submit" value="submit" /> 
    </form> 
    <?php 

?> 

Warum habe ich str_replace() Funktion nutzen?

Sie können keinen Punkt oder Leerzeichen in Eingabefeldnamen verwenden. Von the documentation:

Punkte und Leerzeichen in Variablennamen umgewandelt unterstreicht. Zum Beispiel wird $ _REQUEST ["a_b"].

So haben Sie str_replace() Funktion verwenden, um alle weißen Flächen mit Unterstrichen zu ersetzen, so dass $_POST den Benutzer übermittelten Wert ermitteln könnte. Wenn Sie den Inhalt von $_POST superglobal sehen möchten, tun Sie var_dump($_POST);.

+0

Vielen Dank für die Notizen - sie fühlen sich sehr übermäßig und ich freue mich darauf, mein Projekt mit Ihren Vorschlägen fortzusetzen. Sie helfen wird sehr geschätzt - danke! – Chezshire

+0

@ Chezshire Froh, dass ich helfen könnte. * Prost! * :-) –

+0

HI Also habe ich gerade getestet, und es war nicht "ganz" die Antwort, die ich brauchte, wie ich den Wert der bestellten Anzahl zeigen/behalten wollte. Aber mit einem simplen Tweak funktioniert es wie ich will, und es lässt mich andere Möglichkeiten sehen, es zu benutzen. Das war eine sehr lehrreiche Antwort und ich wollte dir wirklich dafür danken. Es war so erstaunlich verständlich und ich schätze wirklich die Hilfe Rajdeep! – Chezshire