php - 选择正在传递的项目值而不是文本值到mysql数据库实时成本计算

标签 php mysql twitter-bootstrap select

有一个工作出色的表单,可以实时或即时进行成本计算工作、网页验证等,并且 MySQL 存储所有提交的信息... 但是,当客户或我(管理员)收到确认电子邮件等时,选择选项和单选按钮会传递值,而不是所选的文本。成本计算总计框显示正确。我正在使用 Bootstrap HTML 5、PHP 和 MySQL(尽管我的数据库技能有限)。

查看其他论坛,例如下一个链接是关于 ASP 的... http://www.mikesdotnetting.com/article/128/get-the-drop-on-asp-net-mvc-dropdownlists

...这家伙写的东西对我来说是可以理解的。
他引用“如果您为选项提供 value 属性,则该值是在提交包含 select 元素的表单时发回的值。如果您省略 value 属性,则选项的文本值将被发回。”

好吧,我不想省略 value 属性,因为成本计算不起作用。

我看过的其他堆栈问题接近于回答,但没有提供解决方案。

http://www.bootply.com/128894

    http://stackoverflow.com/questions/22982742/bootstrap-select-option-display-value-instead-of-text

    http://stackoverflow.com/questions/27265944/how-can-i-store-the-value-of-a-user-selected-option-from-a-drop-down-select-box

我还查看了 DBnull.value 但还没有尝试过,因为我需要先了解如何做到这一点。

无论如何,如果有人可以提供帮助,这是我使用的脚本和代码......

用于成本计算的 JS。我放置在网页底部的位置。效果很好!!

    <script type='text/javascript' >
    function startCalc(){
      interval = setInterval("calc()",1);
    }
    function calc(){
     one = document.autoSumForm.hours.value;
     two = document.autoSumForm.drums.value; 
     three = document.autoSumForm.amp1.value;
     four = document.autoSumForm.amp2.value;
     five = document.autoSumForm.bass.value;
     six = document.autoSumForm.keyboard.value;
     document.autoSumForm.totalBox.value = (one * 1) + (two * 1) + (three * 1) + (four * 1) + (five * 1) + (six * 1);
    }
    function stopCalc(){
    clearInterval(interval);
    }
    </script>

表单名称为autoSumForm,供脚本引用(不需要id)。 我不会包含用户名电子邮件等...,只是我关心的主要内容。

    <form name="autoSumForm" id="autoSumForm">
    <div class="form-group">
    <label for="hours" class="control-label">For how many Hours</label>
    <div class="input-group">
    <select id="hours" name="hours" class="form-control" onFocus="startCalc();" onBlur="stopCalc();" required>
    <option value="">Choose</option>
    <optgroup label="Minimum 1 Hour">
      <option label="1 hour" value="40.00">1 hour</option>
      <option label="2 hours" value="50.00">2 hours</option>
      <option label="3 hours" value="60.00">3 hours</option>
      <option label="4 hours" value="70.00">4 hours</option>
      <option label="5 hours" value="80.00">5 hours</option>
      <option label="6 hours" value="90.00">6 hours</option>
      <option label="7 hours" value="100.00">7 hours</option>
      <option label="8 hours" value="110.00">8 hours</option>
      <option label="9 hours" value="120.00">9 hours</option>
      <option label="10 hours" value="130.00">10 hours</option>
      <option label="11 hours" value="140.00">11 hours</option>
      <option label="12 hours" value="150.00">12 hours</option>
      </optgroup>
      </select>
       </div>
       </div>

      <div class="form-group">
      <label class="control-label">Drum Kit Hire</label>
      <div class="radio">
      <label class="radio-inline"><input type="radio" name="drums" id="drums_no" value="0.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="true" checked="">No</label>
      <label class="radio-inline"><input type="radio" name="drums" id="drums" value="10.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="false" >Yes</label>
      </div>
       </div>

    <div class="form-group">
    <label class="control-label">1st Guitar Amp Hire</label>
     <div class="radio"> 
    <label class="radio-inline"><input type="radio" name="amp1" id="amps1no" value="0.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="true" checked="">No</label>
    <label class="radio-inline"><input type="radio" name="amp1" id="amps1" value="10.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="false" >Yes</label>
     </div>
      </div>

    <div class="form-group">
    <label class="control-label">2nd Guitar Amp Hire</label>
    <div class="radio">
    <label class="radio-inline"><input type="radio" name="amp2" id="amp2no" value="0.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="true" checked="">No</label>
    <label class="radio-inline"><input type="radio" name="amp2" id="amp2" value="10.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="false" >Yes</label>
    </div>
     </div>

    <div class="form-group">
    <label class="control-label">Bass Amp Hire</label>
    <div class="radio">
    <label class="radio-inline"><input type="radio" name="bass" id="bassno" value="0.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="true" checked="">No</label>
   <label class="radio-inline"><input type="radio" name="bass" id="bass"  value="10.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="false" >Yes</label>
    </div>
    </div>

      <div class="form-group">
      <label class="control-label">Keyboard Hire</label>
      <div class="radio">
      <label class="radio-inline"><input type="radio" name="keyboard" id="keyboardno" value="0.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="true" checked="">No</label>
       <label class="radio-inline"><input type="radio" name="keyboard" id="keyboard" value="10.00" onFocus="startCalc();" onBlur="stopCalc();" aria-checked="false" >Yes</label>
       </div>
       </div>

        <div class="form-group">
       <label for="totalBox" class="control-label">Projected Costs</label>
      <div class="input-group">
     <input type="text" id="totalBox" name="totalBox" class="form-control" readonly>
      </div>
      </div>

       <div class="form-group">
      <label for="submit" class="control-label">Submit</label>
       <div>
     <button type="submit" class="btn btn-success col-xs-12" name="submit" id="submit" value="Make a Booking">Make a Booking</button>
      </div>
      </div>
     </form>

我在电子邮件中收到的结果:

    A new user registered at mywebsite.com
    UserName: batman69
    Email: mymail@mymail.com
    Phone: 0412345678
    Name: robbo
    Bandname: Awesome Stuff
    Date: Thu 30 Apr 2015
    Starting at: 10am
    Hours wanted: 150.00 --  WRONG should be 12 Hours not 150 dollars
    Drum hire: 10.00      --WRONG Should be YES not 10 dollars
    Guitar Amp hire: 0.00    --WRONG Should be NO not zero dollars
    Guitar Amp 2 hire: 10.00   --WRONG Should be YES
    Bass Amp hire: 0.00       --WRONG Should be NO
    Keyboard hire: 10.00      --WRONG Should be YES
    2nd Date: Fri 1 May 2015
    3rd Date: Tue 30 Jun 2015
    4th Date: Wed 30 Sep 2015
    Message enquiry: hey mate the form works but however...
    Projected Costs: 180     --awesome cost calculations work

MySQL 脚本(这显然有效......但是......如果我要使用 DBnull.value 你该怎么做......如果它需要几个小时,鼓,放大器等)

    function CreateTable()
    {
    $qry = "Create Table $this->tablename (".
            "id_user INT NOT NULL AUTO_INCREMENT ,".
            "username VARCHAR( 17 ) NOT NULL ,".
            "password VARCHAR( 32 ) NOT NULL ,".
            "email VARCHAR( 48 ) NOT NULL ,".
            "phone VARCHAR( 10 ) NOT NULL ,".
            "name VARCHAR( 24 ) NOT NULL ,".
            "bandname VARCHAR( 30 ) NOT NULL ,".
            "datepicker1 VARCHAR( 15 ) NOT NULL ,".
            "hours VARCHAR( 8 ) NOT NULL ,".
            "start VARCHAR( 7 ) NOT NULL ,".
            "drums VARCHAR( 3 ) NOT NULL ,".
            "amp1 VARCHAR( 3 ) NOT NULL ,".
            "amp2 VARCHAR( 3 ) NOT NULL ,".
            "bass VARCHAR( 3 ) NOT NULL ,".
            "keyboard VARCHAR( 3 ) NOT NULL ,".
            "datepicker2 VARCHAR( 15 ) NOT NULL ,".
            "datepicker3 VARCHAR( 15 ) NOT NULL ,".
            "datepicker4 VARCHAR( 15 ) NOT NULL ,".
            "info VARCHAR( 150 ) NOT NULL ,".
            "totalBox VARCHAR( 6 ) NOT NULL ,".
            "confirmcode VARCHAR(32) ,".
            "PRIMARY KEY ( id_user )".
            ")";

          if(!mysql_query($qry,$this->connection))
          {
        $this->HandleDBError("Error creating the table \nquery was\n $qry");
        return false;
       }
       return true;
      }

MySQL 插入数据库也非常有效......

       function InsertIntoDB(&$formvars)
      {

      $confirmcode = $this->MakeConfirmationMd5($formvars['email']);

       $formvars['confirmcode'] = $confirmcode;

       $insert_query = 'insert into '.$this->tablename.'(
            username,
            password,
            email,
            phone,
            name,
            bandname,
            datepicker1,
            hours,
            start,
            drums,
            amp1,
            amp2,
            bass,
            keyboard,
            datepicker2,
            datepicker3,
            datepicker4,
            info,
            totalBox,
            confirmcode
            )
            values
            (
            "' . $this->SanitizeForSQL($formvars['username']) . '",
            "' . md5($formvars['password']) . '",
            "' . $this->SanitizeForSQL($formvars['email']) . '",
            "' . $this->SanitizeForSQL($formvars['phone']) . '",
            "' . $this->SanitizeForSQL($formvars['name']) . '",
            "' . $this->SanitizeForSQL($formvars['bandname']) . '",
            "' . $this->SanitizeForSQL($formvars['datepicker1']) . '",
            "' . $this->SanitizeForSQL($formvars['hours']) . '",
            "' . $this->SanitizeForSQL($formvars['start']) . '",
            "' . $this->SanitizeForSQL($formvars['drums']) . '",
            "' . $this->SanitizeForSQL($formvars['amp1']) . '",
            "' . $this->SanitizeForSQL($formvars['amp2']) . '",
            "' . $this->SanitizeForSQL($formvars['bass']) . '",
            "' . $this->SanitizeForSQL($formvars['keyboard']) . '",
            "' . $this->SanitizeForSQL($formvars['datepicker2']) . '",
            "' . $this->SanitizeForSQL($formvars['datepicker3']) . '",
            "' . $this->SanitizeForSQL($formvars['datepicker4']) . '",
            "' . $this->SanitizeForSQL($formvars['info']) . '",
            "' . $this->SanitizeForSQL($formvars['totalBox']) . '",
            "' . $confirmcode . '"
            )';      
           if(!mysql_query( $insert_query ,$this->connection))
          {
         $this->HandleDBError("Error inserting data to the table\nquery:$insert_query");
        return false;
         }        
         return true;
         }

最佳答案

正如您所注意到的,您的脚本在技术上是有效的。 表单元素按指定方式工作 - 它们将在提交时提交其(选中的)值。

您的问题更多的是语义问题:该值意味着输入字段中项目的技术表示。文本表示只是使其易于阅读的标签(例如,主页可以是跨国的,标签可以是德语、英语、瑞典语......取决于用户设置)。 name 属性和 value 属性一起形成一种键值存储:drums: yes(可能的值:yes、no)。

当然,您可以在值属性中填写关联的值,但是一旦发送表单,您就无法识别所选选项。

处理脚本的一种方法是在项目及其货币值(value)之间创建一个查找表(在 js 中):

var moneys;
moneys['drums']['yes'] = 10.0;
moneys['drums']['no'] = 0.0;
moneys['hours']['h1'] = 40.0;
moneys['hours']['h2'] = 50.0;
//...
// in your calc function:
one = moneys['hours'][document.autoSumForm.hours.value];
two = ['drums'][document.autoSumForm.drums.value]; 
// ....

关于php - 选择正在传递的项目值而不是文本值到mysql数据库实时成本计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626309/

相关文章:

php - Wordpress 当前类别的子类别列表

mysql - React.js 将数据库(sql)中的 html 动态注入(inject)到不应用 css 样式的组件中?

php - 解析并显示 xml 中的数据

javascript - 为什么列表项在 body 滚动时没有改变?

html - Bootstrap 样式不适用于 HTML

php - google classroom api 学生名单

php - SQL 在 MySQL 中使用 JOIN 选择公共(public)数据和剩余数据

mysql - 仅在 INNER JOIN 中显示最高金额

javascript - 是否可以使用 HttpRequest 上传 <div> 标记中包含的文件

php - 使用 AJAX Post 的响应