2014-04-19 3 views
0

Comment puis-je ajouter à ma base de données des informations à partir d'un formulaire si j'ai des champs obligatoires et facultatifs? Jusqu'à présent, je n'ai fait que quelques insertions mais dans toutes ces informations toutes les informations étaient toujours présentes. Dans ce cas, je fais un formulaire de contact où le nom, le prénom et le numéro de portable sont obligatoires et où tous les autres sont facultatifs.Publication d'un formulaire avec des champs facultatifs et obligatoires

Les informations de la personne (nom, surnoms, surnom) sont également placées dans une table tandis que les numéros (domicile, travail, fax, cellule, etc.) sont placés dans une autre table.

Un exemple (d'une autre application) code que je l'ai utilisé pour POST:

jQuery (Ajax)

$("#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 J'utilise dans cet exemple pour ajouter à la base de données

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>"; 


} 

}

Dans ce cas où je rends certains champs obligatoires et d'autres non, j'ai besoin d'insérer dans des tables différentes, pour ajouter un autre insert dans cette requête, est-ce que j'utilise juste un AND ou quelque chose comme ça?

De même, si l'utilisateur n'introduit rien dans certains champs, est-ce que je laisse les champs optionnels hors des instructions isset? Comment ces variables seraient-elles déclarées si je ne peux pas savoir avec certitude si elles seront utilisées? Désolé si je rends cela un peu difficile à suivre Je suis un peu confus et l'anglais n'est pas ma langue principale.

Merci d'avance.

VIOLON du code réel:

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

Merci

+0

Je suppose que vous devez vous décider à propos de ceux que vous pouvez faire pour les champs obligatoires et! Vide pour les champs facultatifs pour une utilisation ultérieure :) –

+0

@ M.chaudhry Je pensais beaucoup que je ne savais pas si la syntaxe était correct ou même désapprouvé. Mais savez-vous comment puis-je envoyer des INSERTS dans deux tables différentes? Une requête> –

Répondre

1

Disons que je les champs name, email, note où les 2 premiers sont nécessaires et le dernier n'est pas.

Voici une façon de le faire:

<?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'] : '' 

Ce qui est essentiellement une seule ligne if/else, qui aurait pu être écrit:

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

Assurez-vous également d'assainir vos données dans votre cas en utilisant mysql_real_escape_string pour empêcher l'injection SQL.

+0

Merci beaucoup, je vais bricoler votre exemple et essayer de le faire moi-même à partir de maintenant, sauf si je frappe un mur de briques et doit venir avec ma queue métaphorique entre mes jambes. –

+0

@CodeGrasshopper l'un des avantages de faire cela est que si une erreur se produit, vous pouvez retourner le tableau avec la liste des erreurs au lieu de l'imprimer directement et l'utiliser sur une autre partie de votre code et bien sûr vous pouvez améliorer En vérifiant si l'email est réellement un email valide ou dans votre cas quel genre de champs vous avez et si l'utilisateur l'a saisi correctement. – Prix

+0

J'ai encore beaucoup à apprendre, semble-t-il. Merci beaucoup pour votre aide, je vais reprendre mon codage demain parce que je suis morte de fatigue maintenant. –

0

Une façon de le faire pourrait être (je ne suis pas un expert en PHP, alors que d'autres peuvent avoir une meilleure solution): Cela signifierait que vous auriez besoin de supprimer les guillemets simples de votre code SQL. Un mot d'avertissement: Avec votre SQL, veuillez consulter les instructions préparées. En tant que tel, il serait facile d'envoyer pUbicacion = "- '); DELETE labs; -" (Ou quelque chose de similaire.) Cela permettrait à une personne d'utiliser une injection SQL et modifier ou supprimer vos données.

Edit: Ajouter un lien vers la page mysqli_prepare PHP: PHP::mysqli::prepare

+0

Merci! C'est à des fins de pratique mais on m'a dit que je devais vraiment trouver un moyen détourné d'y arriver., –

Questions connexes