首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么数据不正确地提交给表单?

问为什么数据不正确地提交给表单?
EN

Stack Overflow用户
提问于 2014-05-17 20:23:35
回答 1查看 41关注 0票数 0

这里的Newb使用表单和sql。

我有某种交叉连接,在这种情况下,eMail输入的表单输入名称('incEmail')实际上是插入到数据库中,而不是输入的值。而且,使用表单(eMail.php ) kID输入的任何数据都保持“零”,而不是递增。见截图,最后两个条目,都是列表/显示为'0')。

总之,对于创建的每个新条目,kID保持为零。为电子邮件输入的数据不是开始提交到数据库,而是将输入字段的名称提交到数据库。

​

​

代码语言:javascript
复制
        <?php /
# '../' works for a sub-folder.  use './' for the root
require '../inc_0700/config_inc.php'; #provides configuration, pathing, error handling, db credentials
//END CONFIG AREA ----------------------------------------------------------

# Read the value of 'action' whether it is passed via $_POST or $_GET with $_REQUEST
if(isset($_REQUEST['act'])){$myAction = (trim($_REQUEST['act']));}else{$myAction = "";}

switch ($myAction)
{//check 'act' for type of process
    case "add": //2) Form for adding new report
        addReport();
        break;
    case "insert": //3) Insert new report
        insertExecute();
        break;
    default: //1)Show existing Reports
        showReport();
}
function showReport()
{//Select Report
    global $config;
    get_header();
    echo '<h3 align="center">' . smartTitle() . '</h3>';
    $sql = 'select kID, incWho, incEmail, incWhat, incWhen from incKaiju';
    $result = mysqli_query(IDB::conn(),$sql) or die(trigger_error(mysqli_error(IDB::conn()), E_USER_ERROR));
    if (mysqli_num_rows($result) > 0)//at least one record!
    {//show results
        echo '<table align="center" border="1" style="border-collapse:collapse" cellpadding="3" cellspacing="3">';
        echo '<tr>
                <th>Kaiju Incident Report</th>
                <th>eMail</th>
                <th>Officer Reporting</th>
                <th>Kaiju Identified</th>
                <th>Date of Incident</th>
            </tr>
            ';
        while ($row = mysqli_fetch_assoc($result))
        {//dbOut() function is a 'wrapper' designed to strip slashes, etc. of data leaving db
            echo '<tr>
                    <td>Kid00' . (int)$row['kID'] . '</td>                  
                    <td>' . dbOut($row['incEmail']) . '</td>
                    <td>Officer ' . dbOut($row['incWho']) . '</td>
                    <td>' . dbOut($row['incWhat']) . '</td>
                    <td>' . dbOut($row['incWhen']) . '</td>
                </tr>
                ';
        }
        echo '</table>';
    }else{//no records
      echo '<div align="center"><h3>Currently No Reports in Database.</h3></div>';
    }
    echo '<div align="center"><a href="' . THIS_PAGE . '?act=add"><br />ADD REPORT</a></div>';
    @mysqli_free_result($result); //free resources
    get_footer();
}
function addReport()
{# shows details from a single Report, and preloads their first name in a form.
    global $config;

    //Inject my styles and crap here

    $config->loadhead .= '
    <script type="text/javascript" src="' . VIRTUAL_PATH . 'include/util.js"></script>
    <script type="text/javascript">
        function checkForm(thisForm)
        {//check form data for valid info
            if(empty(thisForm.incWho,"Reporting Officer ")){return false;}

            if(!isEmail(thisForm.incEmail,"Please Enter a Valid Email")){return false;}
            return true;//if all is passed, submit!

            if(empty(thisForm.incWhat,"Confirm Kaiji ")){return false;}
            if(empty(thisForm.incWhen,"Date of Incident ")){return false;}
        }
    </script>';

    get_header();
    echo '
    <h3 align="center">' . smartTitle() . ' List + Add + Insert</h3>
    <h4 align="center">Enter Report</h4>
    <form action="' . THIS_PAGE . '" method="post" onsubmit="return checkForm(this);">
    <table align="center">
       <tr><td align="right">Reporting Officer</td>
            <td>
                <input type="text" name="incWho" />
                <font color="red"><b>*</b></font> <em>(alphanumerics & punctuation)</em>
            </td>
       </tr>
       <tr><td align="right">Email</td>
               <td>
                   <input type="text" name="incEmail" />
                   <font color="red"><b>*</b></font> <em>(valid email only)</em>
               </td>
       </tr>
       <tr><td align="right">Confirm Kaiji</td>
            <td>
                <input type="text" name="incWhat" />
                <font color="red"><b>*</b></font> <em>(alphanumerics & punctuation)</em>
            </td>
       </tr>
       <tr><td align="right">Date of Incident </td>
            <td>
                <input type="text" name="incWhen" />
                <font color="red"><b>*</b></font> <em>(alphanumerics & punctuation)</em>
            </td>
       </tr>
       <input type="hidden" name="act" value="insert" />
       <tr>
            <td align="center" colspan="2">
                <input type="submit" value="Submit Report"><em>(<font color="red"><b>*</b> required field</font>)</em>
            </td>
       </tr>
    </table>
    </form>
    <div align="center"><a href="' . THIS_PAGE . '">Exit (Do not submit Incident Report)</a></div>
    ';
    get_footer();
}

function insertExecute()
{
    $iConn = IDB::conn();//must have DB as variable to pass to mysqli_real_escape() via iformReq()
    $redirect = THIS_PAGE; //global var used for following formReq redirection on failure
    $incWho = strip_tags(iformReq('incWho', $iConn));
    $Email = strip_tags(iformReq('incEmail',$iConn));//if no email then comment line out
    $incWhat = strip_tags(iformReq('incWhat', $iConn));
    $incWhen = strip_tags(iformReq('incWhen', $iConn));
    //next check for specific issues with data
    if(!ctype_graph($_POST['incWho'])|| !ctype_graph($_POST['incWhat'])|| !ctype_graph($_POST['incWhen']))
    {//data must be alphanumeric or punctuation only
        feedback("Data submitted may only contain letters, numbers or punctuation");
        myRedirect(THIS_PAGE);
    }
    if(!onlyEmail($_POST['incEmail']))
    {//data must be alphanumeric or punctuation only
        feedback("Data entered for email is not valid");
        myRedirect(THIS_PAGE);
    }
    //build string for SQL insert with replacement vars, %s for string, %d for digits
    $sql = "INSERT INTO incKaiju (incWho, incEmail, incWhat, incWhen) VALUES ('%s','%s','%s','%s')";
    //$sql = "INSERT INTO incKaiju (incWho, incEmail, incWhat, incWhen) VALUES ('%s','%s','%s',NOW())";
    # sprintf() allows us to filter (parameterize) form data
    $sql = sprintf($sql,$incWho,incEmail,$incWhat,$incWhen);
    @mysqli_query($iConn, $sql) or die(trigger_error(mysqli_error($iConn), E_USER_ERROR));
    #feedback success or failure of update
    if (mysqli_affected_rows($iConn) > 0)
    {//success!  provide feedback, chance to change another!
        feedback("Report added successfully!","notice"); //notice changes color to red!
    }else{//Problem!  Provide feedback!
        feedback("Report failed to submit!");
    }
    myRedirect(THIS_PAGE);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-17 20:34:23

要用电子邮件解决这个问题:

代码语言:javascript
复制
$sql = sprintf($sql,$incWho,$incEmail,$incWhat,$incWhen);

你少了一块钱。

如果will列不是自动增量,则不会在新插入时自动递增.相应地在MySQL中修改表:

代码语言:javascript
复制
ALTER TABLE incKaiju CHANGE kID kID INT(10) AUTO_INCREMENT PRIMARY KEY;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23715744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档