2010-07-25 7 views
1

Je suis en train de publier un formulaire sérialisé dans un fichier sumbit.php, à son tour, va ensuite insérer dans une base de données MySQL; cependant, la dernière entrée qui est cachée, n'est pas insérée dans la base de données, bien que le reste le soit.jQuery poster un formulaire sérialisé, puis en insérant dans mysql via PHP?

Voici quelques exemples de bout de ce que j'ai jusqu'ici ce qui ne fonctionne pas:

HTML

  <form method="post" action="" > 
          <label for="name" class="overlay"><span>Name...</span></label> 
          <input class="input-text" type="text" name="name" id="name" /> 

          <label for="email" class="overlay"><span>Email...</span></label> 
          <input type="text" class="input-text" name="email" id="email"/> 

          <label for="website" class="overlay"><span>Website...</span></label> 
          <input type="text" class="input-text" name="website" id="website"/> 


          <label id="body-label" for="body" class="overlay"><span>Comment it up...</span></label> 
          <textarea class="input-text" name="body" id="body" cols="20" rows="5"></textarea> 

          <input type="hidden" name="parentid" id="parentid" value="0" /> 
          <input type="submit" value="Comment" name="submit" id="comment-submit" /> 

       </span> 
      </form> 

Javascript

$('form.').submit(function(event) { 

    $.post('submit.php',$(this).serialize(),function(msg){ 
     // form inputs consist of 5 values total: name, email, website, text, and a hidden input that has the value of an integer 
    } 
}); 

PHP (soumettre. php)

$arr = array(); 

    mysql_query(" INSERT INTO comments(name,email,website,body,parentid) 
       VALUES (
        '".$arr['name']."', 
        '".$arr['email']."', 
        '".$arr['website']."', 
        '".$arr['body']."', 
        '".$arr['parentid']."' 
       )"); 
+0

Il y a des commentaires sur le 'serialize()' faire c page qui semblent indiquer que d'autres ont des problèmes avec la sérialisation des champs cachés: http: //api.jquery.com/sérialisation/ – Amber

+3

Espérons que les petits tableaux Bobby ne vient pas visiter - http://xkcd.com/327/ – reinierpost

Répondre

7

Ok voici le code de travail. Il y avait quelques erreurs (par exemple, accolades de fonctions non fermées sur la poste, balises span non fermées, pas de variable POST dans votre PHP, etc.)

HTML (assurez-vous qu'il existe un formulaire ACTION de sorte que si les gens n'ont pas js sur vous pouvez utiliser toujours la forme)

<form method="post" id="test" enctype="multipart/form-data" action="post.php"> 
    <label for="name" class="overlay"><span>Name...</span></label> 
    <input class="input-text" type="text" name="name" id="name" /> 

    <label for="email" class="overlay"><span>Email...</span></label> 
    <input type="text" class="input-text" name="email" id="email"/> 

    <label for="website" class="overlay"><span>Website...</span></label> 
    <input type="text" class="input-text" name="website" id="website"/> 


    <label id="body-label" for="body" class="overlay"><span>Comment it up...</span></label> 
    <textarea class="input-text" name="body" id="body" cols="20" rows="5"></textarea> 

    <input type="hidden" name="parentid" id="parentid" value="0" /> 
    <input type="submit" value="Comment" name="submit" id="comment-submit" /> 
</form> 

Javascript

<script> 
$(document).ready(function() { 
    $('form').submit(function(msg) { 
     alert($(this).serialize()); // check to show that all form data is being submitted 
     $.post("post.php",$(this).serialize(),function(data){ 
      alert(data); //post check to show that the mysql string is the same as submit       
     }); 
     return false; // return false to stop the page submitting. You could have the form action set to the same PHP page so if people dont have JS on they can still use the form 
    }); 
}); 
</script> 

PHP

<?php 
$arr = $_POST; //you need to grab the data via the POST (or request) global. 

//this is just a check to show that the SQL statement is correct. Replace with your mysql connection/query 
echo "INSERT INTO comments(name,email,website,body,parentid) 
     VALUES (
      '".$arr['name']."', 
      '".$arr['email']."', 
      '".$arr['website']."', 
      '".$arr['body']."', 
      '".$arr['parentid']."' 
     )"; 
?> 
+0

'$ arr = $ _POST;' l'a fait. Je ne l'attrapais pas au bon endroit. Merci Josh! – Ryan

+0

Pas de problème. Vous devriez "accepter" cette réponse pour que les autres sachent qui a travaillé. À la votre – User123342234

-2

Lorsque vous sérialiser un formulaire, les données est délimitée par une esperluette (&)

Dans votre code PHP, vous devez exploser sur les esperluette et exploser ensuite à nouveau pour chaque dans ce nouveau tableau sur le signe = .

Exemple

$thedata = explode("&", $_POST['data']); 
foreach($thedata as $new) { 
    list($x, $y) = explode("=", $new); 
    ${$x} = $y; 
} 

Ensuite, vous aurez des variables PHP comme $ name, $ email, adresse $, etcetera tout ce que vous avez nommé entrées sur le formulaire.

+1

C'est tout simplement faux. $ .post ('submit.php', $ (this) .serialize()) ne crée pas de variable de post de données. – Ben

+0

Non, jQuery enverra les données en tant que paramètres POST normaux. Vous semblez penser que jQuery n'enverra qu'un seul paramètre ('data') avec des données sérialisées. Ce n'est pas correct. Et l'OP dit déjà que cela fonctionne pour tous, sauf le domaine caché. –

2

Essayez d'ajouter manuellement le champ masqué. Comme Amber l'a fait remarquer, il semble que ce soit un problème avec le champ caché. Cela pourrait être un bug dans une ancienne version de jquery, peut-être que vous devez avoir le dernier en premier.

Sinon, essayez peut-être d'ajouter le champ caché ...?

$('form.').submit(function(event) { 

    $.post('submit.php',$(this).serialize()+'&parentid='+$('#parentid').val(),function(msg){ 
    } 
}); 
+0

Quand je alerte ($ (this) .serialize()) il affiche tout correctement. nom = test & email = test% 40test.com & site = http% 3A% 2F% 2Fillustratut.com & body = Test + msg & parentid = 7 – Ryan

0

Votre script devrait fonctionner correctement. S'il vous plaît vérifier parentid au backend si c'est nul ou 0 ?? vous pouvez utiliser

var_dump($arr); 

puis vérifier que le champ parentid des commentaires de table si elle accepte 0 ou des valeurs nulles ou non et vérifiez votre clé étrangère est définie d'une manière courante comme vous le méritez.

Merci

+0

Je pense champ parentid n'accepte pas nulle ou 0 en raison de son est d'être clé étrangère. – Muhit

+0

Il vide uniquement les quatre premiers éléments du tableau, pas parentid; cependant, quand j'alerte() la forme sérialisée, le parentid s'affiche correctement. 'parentid' int (11) NOT NULL DEFAUT '0' – Ryan

+0

Ensuite, je pense que vous utilisez plus ancien Jquery :) vous pouvez essayer comme Ryan dit serialize() + '& parentid =' + $ ('# parentid'). val(), Ça doit marcher. Merci – Muhit