2014-04-19 106 views
0

如果我有强制字段和可选字段,如何从表单向数据库添加信息?到目前为止,我只做了一些插入,但所有这些信息总是存在。在这种情况下,我正在制作一个联系表格,其中姓名和手机号码是强制性的,并且所有其他人都是可选的。发布带有可选字段和必填字段的表单

此人的信息(姓名,昵称)进入一张桌子,而数字(家庭,工作,传真,细胞等)进入另一个表。

(的另一个应用)我已经使用POST码A例如:

的jQuery(阿贾克斯)

$("#btnAceptar").click(function() { 
    var codigolab = $('#txtNumLab').val(), 
    capacidad = $('#txtCapacidad').val(), 
    carrera = $('#txtCarrera').val(), 
    ubicacion = $('#txtUbicacion').val(); 


var request = $.ajax({ 
url: "includes/functionsLabs.php", 
type: "post", 
data: { 

    'call': 'addLab', 
    'pCodigoLab':codigolab, 
    'pCapacidad':capacidad, 
    'pCarrera':carrera, 
    'pUbicacion':ubicacion}, 

    dataType: 'html', 

    success: function(response){ 
    $('#info').html(response); 


    } 
    }); 
}); 

PHP我在这个例子中使用添加到数据库

function addLab(){  
if(isset($_POST['pCodigoLab']) && 
    isset($_POST['pCapacidad']) && 
    isset($_POST['pCarrera']) && 
    isset ($_POST['pUbicacion'])){ 

    $codigolab = $_POST['pCodigoLab']; 
    $capacidad = $_POST['pCapacidad']; 
    $carrera = $_POST['pCarrera']; 
    $ubicacion = $_POST['pUbicacion']; 


    $query = "INSERT INTO labs VALUES" . "('null', '$codigolab', '$capacidad', '$carrera','$ubicacion', '1')"; 

    $result = do_query($query); 

    echo "<p>¡El laboratorio ha sido añadido exitosamente!</p>"; 


} 

}

在这种情况下,我使某些字段是强制性的,其他字段不是我需要插入到不同的表中,要添加另一个插入到该查询中,我只是使用AND或类似的东西?

此外,如果用户没有在某些字段中输入任何内容,我会将可选字段留在isset语句之外吗?如果我不能确定它们是否会被使用,那么这些变量如何被宣布?

对不起,如果我让这有点难以遵循我有点困惑,英语不是我的主要语言。

在此先感谢。

FIDDLE的实际代码:

Pressing Guardar button displays the fields that are mandatory the others are optional.

感谢

+0

我想你需要做出决定abt那些你可以做isset为必填字段和!为可选字段为进一步使用空:) –

+0

@ M.chaudhry我以为是多我只是不知道如果语法是正确甚至皱眉。但是,你知道我怎样才能把插入发送到两个不同的表我一个查询> –

回答

1

比方说,我有场nameemailnote在需要前2个和最后一个没有了。

下面是做到这一点的一种方法:

<?php 
$error = array(); 
if (!isset($_POST['name'])) 
{ 
    $error[] = "The field name was not filled!"; 
} 

if (!isset($_POST['email'])) 
{ 
    $error[] = "The field email was not filled!"; 
} 

if (sizeof($error) == 0) 
{ 
    // insert the data 
    $query = sprintf("INSERT INTO users VALUES ('%s', '%s', '%s')", 
        mysql_real_escape_string($_POST['name']), 
        mysql_real_escape_string($_POST['email']), 
        mysql_real_escape_string((isset($_POST['note']) ? $_POST['note'] : ''))); 

    $result = do_query($query); 
    echo "<p>¡El laboratorio ha sido añadido exitosamente!</p>"; 
} 
else 
{ 
    // print the error 
    foreach ($error as $msg) 
    { 
     echo $msg, "<br>\n"; 
    } 
} 

For note I used a ternary operator:

isset($_POST['note']) ? $_POST['note'] : '' 

基本上是一个衬垫的if/else,本来可以写成:

if (isset($_POST['note'])) 
{ 
    $note = $_POST['note']; 
} 
else 
{ 
    $note = ''; 
} 

还要确保您使用mysql_real_escape_string来清理您的案例中的数据,以防止SQL注入。

+0

非常感谢我会修补你的榜样,并试图从我自己从这里做,除非我击中了砖墙和我的双腿之间必须有我的隐喻尾巴来。 –

+0

@CodeGrasshopper这样做的好处之一是,如果发生错误,您可以返回错误列表的数组,而不是直接打印它,并在代码的其他部分使用它,当然,您可以改进它通过检查电子邮件是否实际上是一个有效的电子邮件,或者在你的情况下,你有什么样的字段,如果用户输入正确。 – Prix

+0

我似乎还有很多东西要学。非常感谢您的帮助,明天我会恢复编码,因为我现在已经筋疲力尽了。 –

0

一种方式做到这一点可能是(我不是在PHP的专家,所以其他人可能有更好的解决方案):

$codigolab = isset($_POST['pCodigoLab']) ? "'" . $_POST['pCodigoLab'] . "'" : NULL; 
$capacidad = isset($_POST['pCapacidad']) ? "'" . $_POST['pCapacidad'] . "'" : NULL; 
$carrera = isset($_POST['pCarrera']) ? "'" . $_POST['pCarrera'] . "'" : NULL; 
$ubicacion = isset($_POST['pUbicacion']) ? "'" . $_POST['pUbicacion'] . "'" : NULL; 

这意味着您需要从SQL中删除单引号。

警告一句话:用你的SQL,请查看准备好的语句。因为,这将很容易发送pUbicacion =“- ');删除实验室; -”(或类似的东西)。这将允许一个人使用SQL注入并更改或删除您的数据。

编辑:添加链接到PHP的页面mysqli_prepare:PHP::mysqli::prepare

+0

谢谢!这是为了练习的目的,但我已被告知,我真的需要找到一个迂回的方式,,, –