2010-01-03 2 views
1

У меня есть страница php, где пользователи могут вводить данные в поля внутри формы. В форме также есть утилита для загрузки изображений. Этой страница обновляется каждый раз, когда новая картинка загруженный, так «помнить» значения у пользователя уже заполнен, у меня есть этот код:Нужна помощь в создании этой функции

<input type="text" value="<?php echo @$_POST['name'];?>"> 

Это не работает для раскрывающихся списков или радио. ..

У меня есть одно решение из предыдущего Q, но это означало бы, что мне придется создавать все списки пересылки снова на PHP, когда они сейчас находятся в HTML, и это ALOT опций в списках.

Есть ли другой способ?

Вот первое решение:

$color = $_POST["colors"]; 
$colors = array("red","green","blue"); 

<select name="colors"> 
<?php foreach ($colors as $option) { ?> 
    <option<?php print ($option == $color) ? " selected" : ""; ?>> 
    <?php print $option; ?> 
    </option> 
<?php } ?> 
</select> 

Благодаря

+1

Примечание: * не используйте * $ _POST ['name'] 'как это без каких-либо дезинфекции. Злоумышленник может легко вставить часть JavaScript, введя что-то вроде '»> '. Используйте что-то вроде' htmlspecialchars ($ _ POST ['name']) '. – mkrause

+0

Eh? Страница обновлена? 't вы * не * обновляете всю страницу и просто добавляете новое изображение с помощью AJAX? – mpen

+0

@Mark Так как это представит ненужную зависимость от JS: http://icant.co.uk/articles/pragmatic-progressive-enhancement/# сборки – Quentin

ответ

2

К сожалению сказать, но вы не должны выводить действительный HTML независимо от того, сколько из боль, которая есть. Лучшее предложение - обернуть его в вспомогательную функцию и включить ее. Или еще лучше, найдите хорошую библиотеку обработки формы и используйте ее. Эта проблема была решена 1000 раз.

XSS CONCERN: В вашем примере кода имеется ряд недостатков безопасности. Позвольте мне проиллюстрировать простой способ обработки формы. Следующий код иллюстрирует ошибку доказательства способа справиться:

  • чтения входных данных
  • Validation
  • обработки ошибок, с хорошими сообщениями
  • Re-заселение формы
  • Etc ...

Обратите внимание на использование htmlspecialchars и ENT_QUOTES, если необходимо. Кроме того, использование оператора cond ? val1 : val2 гарантирует отсутствие предупреждений E_STRICT без использования @ (что может быть ужасно для производительности).

<?php 
$FirstName = trim(isset($_POST['FirstName']) ? $_POST['FirstName'] : ''); 
$LastName = trim(isset($_POST['LastName']) ? $_POST['LastName'] : ''); 
$Gender = trim(isset($_POST['Gender']) ? $_POST['Gender'] : ''); 

$Action = trim(isset($_POST['Action']) ? $_POST['Action'] : ''); 

$Errors = array(); 

switch($Action) 
{ 
case 'Process': 
    // validation code here 
    if(empty($FirstName)) 
    $Errors[] = 'First Name is required.'; 

    if(empty($LastName)) 
    $Errors[] = 'Last Name is required.'; 

    if($Gender != 'Male' and $Gender != 'Female') 
    $Errors[] = 'Gender is required.'; 

    if(count($Errors) > 0) 
    $break; 

    // save data or whatever here 

    // Redirect to next page 
    header('Location: nextpage.php'); 
    exit; 
} 

?> 
<html> 
<head> 
... 
</head> 
<body> 

<?php if(count($Errors) > 0) { ?> 
    <div class="error"> 
     <?php foreach($Error as $e) { ?> 
     <p><?php echo htmlspecialchars($e); ?></p> 
     <?php } ?> 
    </div> 
<?php } ?> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES); ?>"> 
    <p> 
    First Name: 
    <input type="text" name="FirstName" value="<?php echo htmlspecialchars($FirstName, ENT_QUOTES); ?>" /> 
    </p> 

    <p> 
    Last Name: 
    <input type="text" name="LastName" value="<?php echo htmlspecialchars($LastName, ENT_QUOTES); ?>" /> 
    </p> 

    <p> 
    Gender: 
    <select name="Gender"> 
    <option value=""></option> 
    <option value="Male" <?php if($Gender == 'Male') echo 'selected="selected"'; ?>>Male</option> 
    <option value="Female" <?php if($Gender == 'Female') echo 'selected="selected"'; ?>>Female</option> 
    </select> 
    </p> 

</form> 

</body> 
</html> 
0

Вы можете использовать Javascript, чтобы выбрать опцию во время выполнения, и вы можете управлять Javascript с PHP.

Как это:

<?php $color = $_POST["colors"]; ?> 
<script language = "JavaScript"> 
var colorOption = document.getElementById("<?php print($color)?>"); 
colorOption.selected = true; 
</script> 

Просто убедитесь, что сценарий запуска OnLoad и установите id на его значение каждого option элемента.

0

Вам не придется полностью переделывать список с PHP - только бит, который помечает текущий выбор:

<select name="opts"> 
<option <?php if(@$_POST['opts'] == 'value1') echo 'selected="SELECTED"'; ?>>value1</option> 
<option <?php if(@$_POST['opts'] == 'value2') echo 'selected="SELECTED"'; ?>>value2</option> 
</select> 
0

Сколько ящиков и переключателей имеет урская форма. Если счетчик меньше 10, вы можете использовать javascript и сделать его легко.Иначе его рекомендуется сделать ваши полей выбора в PHP

PHP код:

<?php 

$color = $_POST["colors"]; 
$colors = array("red","green","blue"); 

?> 
<select name="colors"> 

<?php 
$varSelected = ""; 
foreach ($colors as $option) 
{ 

    if($option == $color) 
    { 
    $varSelected = "selected:selected"; 
    } 
    else 
    { 
    $varSelected =""; 
    } 
?> 
    <option <?php echo $varSelected?>> 
    <?php print $option; ?> 
    </option> 

<?php 
} 
?> 
</select> 

Javasript Метод: Будет нужна форма модификации. Вам нужно будет добавить id в свои поля опций, которые будут такими же, как и его значение.

// supposing $_POST['colors']='Red'; 
<html> 
<select name="gender"> 
<option value="Red" id="Red">Red</option> 
<option value="Blue" id="Blue">Blue</option> 
</select> 
</html> 

<script type="text/javascript"> 
document.getElementById("<?php echo $_POST['colors']").setAttribute("selected", "selected"); 
</script> 
Смежные вопросы