2009-04-29 15 views
1

Ich habe die grundlegende HTML-Formular durch php hallte:Parameter an PHP in einem Formular übergeben?

<html> 
<body> 
<?php 
if (isset($_GET["pk"])) 
{ $pk = $_GET["pk"];} 
echo '<form action="up.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form>'; 
?> 
</body> 
</html> 

Ich möchte den Wert von pk passieren

Aktion Ändern = "up.php pk = $ pk?" Up.php tat nicht arbeiten.

+2

Vorsicht !!! Drucken Sie keine unformatierten Werte (z. B. echo $ _GET ['pk']) auf einer Seite aus! Es ist ein Sicherheitsloch, das eine Welt von Problemen einführt (XSS, um nur einen zu nennen). Wenn "pk" der Primärschlüssel einer Datenbank ist und es eine Zahl ist, können Sie entweder mit einem Regex oder mit der Funktion intval() – Rob

+0

desinfizieren Ich werde es nicht auf einer Seite ausdrucken, es wird übergeben nach up.php, wo es über eine parametrisierte Abfrage in eine Datenbank eingefügt wird. Warum muss es bei der Übertragung gesäubert werden? –

Antwort

13

ein verstecktes Feld Verwendung:

<input type="hidden" name="pk" value="<?php echo $pk; ?>"> 

By the way, große Mengen an HTML Druck, wie Sie es haben hässlich ist. Überlegen Sie entweder, ob Sie aus PHP aussteigen wollen, indem Sie HEREDOC, eine Template-Engine oder ein Framework verwenden.

EDIT:

Wie unten erwähnt, sollten Sie nicht auf die Seite drucken GET und POST-Daten zurück, ohne es zuerst zu Desinfizieren. Unter der Annahme, dass pk ein Primärschlüssel ist, sollten Sie $pk oben mit der intval-Funktion, mindestens umbrechen.

+1

Upvoted dies, aber siehe meine Notiz an die Frage zum Drucken von Werten aus GET/POST-Daten angehängt. – Rob

+0

Seufzer. Ja, ja, ich weiß. Ich kann es nur so oft in den Antworten sagen, bis ich aufhöre mich zu kümmern. Bearbeitet, um dies zu reflektieren. –

1

Sie nicht eine Variable innerhalb eines Strings in einfachen Anführungszeichen verwenden:

$pk = 123; 
echo 'Hello $pk'; // echos Hello $pk 
echo "Hello $pk"; // echos Hello 123 
echo 'Hello ' . $pk; // echos Hello 123 

Der beste Weg, um es zu durchlaufen als verstecktes Feld in der Form sein würde

0

Try sth wie folgt aus:

<html> 
<body> 
<?php 
$params = ""; 
if (isset($_GET["pk"])) 
    { $params = "?pk=" . $_GET["pk"];} 
echo '<form action="up.php' . $params . '" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form>'; 
?> 
</body> 
</html> 

natürlich sollten Sie sich bewusst sein, dass $ _GET [ „pk“] kann so ziemlich alles enthalten, so denken über eine Art Eingabe sanitization.

2

Ich stimme allen Kommentaren bezüglich einer Art Eingabesteuerung der Variablen $ _GET ['pk'] zu. Ich würde das Filtermodul in PHP empfehlen, das ist so ziemlich ein standardmäßig installiertes Modul, glaube ich.

<html> 
<body> 
<?php 
$param = filter_input(INPUT_GET, 'pk', FILTER_SANITIZE_ENCODED); 
?> 
<form action="up.php<?php echo (isset($param) && $param != false) ? '?pk=' . $params : ''); ?>" method="post"enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</body> 
</html> 

Sie mehr Informationen über das Filtermodul finden Sie hier: link text

ich auch einverstanden mit Paolo Bergantino, das ist nicht die schönste Art und Weise, es zu tun, und eine Template-Engine, Heredocs oder regexp sein könnte ein besserer Weg, die Lesbarkeit und Wartbarkeit des Systems zu erhöhen.

Verwandte Themen