我如何根据以前的输入限制表单选项&在提交时保留填充的所有字段(包括文件选择)


How do I limit form options based on previous entry & leave all fields (including file selection) populated on submittion

我有当前的形式:

<form name="estimate" action="live_preview.php" method="post"enctype="multipart/form-data">
    <label for="file">Upload File 1:</label>
    <input type="file" name="file" id="file"/>
    <label for="qty1">Quantity:</label>
    <select name="qty1">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
    </select>
    <br>
    <label for="file">Upload File 2:</label>
    <input type="file" name="file2" id="file2"/>
    <label for="qty2">Quantity:</label>
    <select name="qty2">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
    </select>
    <br>
    <label for="file">Upload File 3:</label>
    <input type="file" name="file3" id="file3"/>
    <label for="qty3">Quantity:</label>
    <select name="qty3">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
    </select>
    <br>
    <label for="file">Upload File 4:</label>
    <input type="file" name="file4" id="file4"/>
    <label for="qty4">Quantity:</label>
    <select name="qty4">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
    </select>
    <br>
    <label for="file">Upload File 5:</label>
    <input type="file" name="file5" id="file5"/>
    <label for="qty5">Quantity:</label>
    <select name="qty5">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
    </select>
    <br>
    <br>
    <label for="meterial">Meterial:</label>
    <select name="material">
        <option value="PLA">PLA (0.60$ / Gram)</option>
        <option value="ABS">ABS (0.60$ / Gram)</option>
        <option value="POLYCARB">PolyCarb (1.80$ / Gram)</option>
        <option value="NYLON">Nylon (1.20$ / Gram)</option>
    </select>
    |
    <label for="color">Color:</label>
    <select name="color">
        <option value="WHITE">White</option>
        <option value="BLACK">Black</option>
        <option value="RED">Red</option>
        <option value="GREEN">Green</option>
        <option value="GRAY">Gray</option>
    </select>
    |
    <label for="delivery">Delivery Method:</label>
    <select name="delivery">
        <option value="PICK UP">Pick Up (Free)</option>
        <option value="SHIPPED">Shipped (+10$)</option>
    </select>
    |
    <label for="marketing">Marketing?</label>
    <select name="marketing">
        <option value="YES">YES</option>
        <option value="NO">NO</option>
    </select>
    <br>
    <label for="infill">Infill: 20%</label>
    <input type="range" name="infill" id="infill" value="20" min="20" max="90" step="10" onchange="printValue('infill','rangeValue1')"/>
    90%
    <input id="rangeValue1" type="text" size="2"/>
    <br>
    <ul class="buttons vertical">
        <input type="submit" class="button fit scrolly" name="submit" value="Refresh Estimate" />
    </ul>
</form>

我要做的是:

  1. 能够根据先前选择的材料类型限制颜色选择
  2. 在提交后,处理php文件,同时仍然保持所有字段填充,以便如果用户对给定的价格不满意,他们可以修改一些设置并获得新的"估计"
  3. 让以下动作在没有页面刷新的情况下发生(不是优先级)

非常感谢您花时间阅读这篇文章!非常感谢。

1.

这将通过客户端代码实现。Javascript/jQuery是你需要的。

2。

不幸的是,当您重新加载页面(或重定向返回)时,文件字段无法保持填充状态。您可以通过使用AJAX发送表单内容来填充它们,但是它可能非常复杂,并且使用AJAX发送文件只能在现代浏览器中工作。

3。

AJAX是您正在寻找的,如果您希望服务器操作发生,而不需要页面刷新。看看jQuery $.post。我的建议是,你有你的表格,人们开始填写。该网站将检查输入一路上,并建议价格不刷新页面,一旦他们高兴,准备好了,他们提交的形式,将上传文件和"刷新页面"。

on 2、php唯一的解决方案:您可以通过在输入字段中添加占位符来保持提交时填充字段。占位符获取提交的值($_POST('value')或类似)。只要确保值不会丢失,如果你有几个字段,因此在客户点击最后的"all fine"按钮之前多次提交,可能使用$_SESSION。