2011-06-25 5 views
0

Je sais que ce sujet a été battu dans le sol, mais je suis vraiment perplexe. Je n'arrive pas à comprendre pourquoi je reçois une erreur inattendue.Accolade de fermeture inattendue} erreur

Mon problème est avec un extrait de code que j'ai ajouté à un script de terminal de carte de crédit Paypal. Il capture les données de formulaire dans une base de données MySql afin que nous puissions suivre les informations d'adresse de facturation, etc. Cela fonctionne jusqu'à ce que j'ajoute une instruction IF qui est censée envoyer les données à MySQL seulement si Paypal capture avec succès les informations de carte. Je veux le faire de cette façon, car même si le formulaire ne parvient pas à capturer l'information CC, il sera toujours ajouté à la base de données comme s'il avait réussi.

Voici le code. Encore une fois, cela fonctionne jusqu'à ce que j'ajoute le if($ack="SUCCESS") { et l'accolade fermante correspondante à la fin. Si je supprime l'accolade, j'obtiens une erreur de fin inattendue.

Quelle est l'erreur? Dans Notepad ++, tout semble correspondre.

if($ack="SUCCESS") { 
    $con = mysql_connect("localhost", "dbname", "dbpassword"); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 
    mysql_select_db("contributors", $con); 
    $sql="INSERT INTO contributor_information (service, fname, lname, email, address, city, country, state, zip) 
    VALUES 
    ('$_POST[service]','$_POST[fname]','$_POST[lname]','$_POST[email]','$_POST[address]','$_POST[city]','$_POST[country]','$_POST[state]','$_POST[zip]')"; 
    if (!mysql_query($sql,$con)) 
     { 
     die('Error: ' . mysql_error()); 
     } 
    mysql_close($con) 
} 
+0

Il vous manque un point-virgule après mysql_close ($ con) – shelman

+1

Et il devrait être si ($ ack == "SUCCESS"), avec un double égale – shelman

+0

Aussi. S'IL VOUS PLAÎT ne pas mettre $ _POST dans votre requête comme ça. Il est lié à avoir toutes sortes de méchanceté en eux. Utilisez les requêtes paramétrées PDO. – Nanne

Répondre

1

Vous avez besoin d'un point-virgule après mysql_close($con).

Vous avez besoin de guillemets dans vos variables POST - $ _POST ['email'] et ainsi de suite.

Vous devez exécuter vos variables POST via mysql_real_escape_string.

Vous devez utiliser la comparaison au lieu d'affectation (if($ack=="SUCCESS") au lieu de if($ack="SUCCESS"))

accolades sont le moindre de vos soucis, vraiment.

+0

Merci. Cet extrait a été copié et collé à partir du W3C, donc c'est en fait leurs erreurs. ;) Parce que je n'ai aucune idée de ce que je fais. Alors pourquoi cela a-t-il fonctionné sans le point-virgule avant l'instruction if? – Chad

+0

@Charles: C'est parce que la dernière ligne d'un programme peut être utilisée sans point-virgule. Lorsque vous ajoutez l'instruction if alors ce code de ligne n'est plus la dernière déclaration de programme. –

+0

Ah. Je vous remercie. Je viens de commander un livre PHP/MySQL, donc j'espère que la prochaine question que je poserai ne sera pas aussi simple! – Chad

0

Vous avez manqué un ; depuis la dernière ligne.

1

virgule pub ici

mysql_close($con); 
0

Vous voudrez peut-être mettre un ; après

mysql_close($con) 

:)