foxclone Posted June 13, 2022 Share Posted June 13, 2022 I'm getting the following error on a contact form I'm trying to implement: Fatal error: Uncaught Error: Undefined constant "secretcode" in /home/foxclo98/test.foxclone.com/contact.php:33 Stack trace: #0 {main} thrown in /home/foxclo98/test.foxclone.com/contact.php on line 33 Here's the full code of the contact form: <?php $errorlevel=error_reporting(); error_reporting($errorlevel & ~E_WARNING); //...code that generates notices error_reporting($errorlevel); // initialization session_start(); $email_contact = "help@foxclone.com"; $email_website = "webmaster@foxclone.com"; // definition of permitted types/subject/category. use to dynamically build the option list, // pre-selecting any existing choice, and used in the validation logic $permitted_types = ['Questions', 'Report Problem', 'Suggestion', 'Other', 'Website Problem']; $secretcode = ['nospam']; $post = []; // array to hold a trimmed working copy of the form data $errors = []; // array to hold user/validation errors // post method form processing if($_SERVER['REQUEST_METHOD'] == 'POST') { // trim all the data at once $post = array_map('trim',$_POST); // if any of the fields are arrays, use a recursive call-back function here instead of php's trim function // inputs: name, email, type/subject/category, message - all required // validate the inputs $errors = []; //Other validation stuff. if ($post['secretcode'] != 'nospam') { $errors[secretcode] = 'You did not enter the correct secret code.'; } if($post['name'] === '') { $errors['name'] = 'Name is required.'; } if($post['email'] === '') { $errors['email'] = 'Email is required.'; } else { // while it is true that the following email format validation will produce an error // for an empty value, you should specifically tell the visitor what is wrong with what // they submitted if (false === filter_var($post['email'], FILTER_VALIDATE_EMAIL)) { $errors['email'] = 'The Email Address you entered does not appear to be valid.'; } } if($post['type'] === '') { $errors['type'] = 'You must select a Type/Subject/Category.'; } else { // you will only see the following error due to a programming mistake or someone/something submitting their own values if(!in_array($post['type'],$permitted_types)) { $errors['type'] = 'The selected Type is invalid.'; // you would want to log the occurrence of this here... } } if($post['message'] === '') { $errors['message'] = 'Message is required.'; } else { if(strlen($post['message']) < 10) { $errors['message'] = 'The Message must be at least 10 characters.'; } } // if no errors, use the submitted data if(empty($errors)) { // apply htmlentities() to help prevent cross site scripting when viewing the received email in a browser $formcontent = htmlentities("From: {$post['name']}\r\nEmail: {$post['email']}\r\nSubject: {$post['type']}\r\nMessage: {$post['message']}", ENT_QUOTES); if ($post['type'] === "Website Problem") { $recipient=$email_website; } else { $recipient=$email_contact; } $email = $post['email']; // add $post['email'] as a Reply-to: header if desired, it is one, valid email address at this point $mailheader = "From: $email\r\n" ; $mailheader .= "Cc: $email\r\n"; if(!mail($recipient, $post['type'], $formcontent, $mailheader)) { // an error // setup the user error message $errors['mail'] = 'The email could not be sent, the site owner has been notified.'; // system error handling goes here... - datatime, get the last error message, include the mail parameter values... // at this point, all parameters are either an internal value, have been validated they they are just an expected // value/format, or have had htmlentities() applied. } // if no errors at this point, success if(empty($errors)) { $_SESSION['success_message'] = "Mail Sent. Thank you {$post['name']}, we will contact you shortly.."; die(header("Refresh:0")); } } } // html document starts here... ?> <?php // display any success message if(!empty($_SESSION['success_message'])) { // for demo purposes, just output it as a paragraph. add any markup/styling you want echo '<p>'; echo htmlentities($_SESSION['success_message'], ENT_QUOTES); echo " - <a href='index.php#home' style='color:#ff0099;'> Return Home</a>"; echo '</p>'; unset($_SESSION['success_message']); } ?> <?php // display any errors if(!empty($errors)) { // for demo purposes, just output them as a paragraph. add any markup/styling you want echo '<p>'; echo implode('<br>',$errors); echo '</p>'; } ?> <?php // (re)display the form here..., re-populating the fields with any existing values ?> <?php require_once("header.php");?> <style> input, select { width: 20rem; line-height:30px; border:2px solid #2f496e; padding: 0; margin: 0; height: 30px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; font: 500 1rem sans-serif; background: #fff; } .input { text-indent: 3px; } </style> </head> <body> <?PHP require_once("navbar.php"); ?> <!--****************** * CONTACT * *******************--> <div class="head__h1"> Need help? Have a suggestion? Why not send us an email?</div> <div class="subtext"> You'll receive a copy of your inquiry for your records </div> <div class ="download"> <div class="cont__row" style="background-color: #d9b44a;"> <div class="cont__column"> <form method="POST"> <label>Secret Code:</label><br> <input type="text" name="secretcode" id="secretcode" placeholder="Type nospam here"> <br> <br> <label>Name</label><br> <input type="text" name="name"><br> <br> <label>Email</label><br> <input type="email" name="email"><br> <br> <label>Select a Category</label> <br> <select name="type" id="category" size="1"> <option value=''> </option> <option value='Questions'>Questions</option> <option value="Report Problem">Report Problem</option> <option value='Suggestion'>Suggestion</option> <option value='Other'>Other</option> <option value="Website Problem"> Website Problem</option> </select> </div> <div class="cont__column"> <label>Message</label><br> <textarea name="message" rows="10" cols="50" style="font: 500 1rem sans-serif"></textarea><br> <br> <div class="button"> <input type="image" id="myimage" src="images/email1.jpg" style="height:40px; width:160px;"/> </form> </div> </div> </div> </div> <?PHP require_once("footer.php"); ?> I'd appreciate ssome help on this. Quote Link to comment https://forums.phpfreaks.com/topic/314921-getting-error-on-php-contact-form/ Share on other sites More sharing options...
ginerjm Posted June 13, 2022 Share Posted June 13, 2022 (edited) Quote $errors[secretcode] = 'You did not enter the correct secret code.'; You have an array reference without quotes on it. It thinks that's a constant when it is supposed to be an index value. The error message should have pointed this out to you. Edited June 13, 2022 by ginerjm Quote Link to comment https://forums.phpfreaks.com/topic/314921-getting-error-on-php-contact-form/#findComment-1597235 Share on other sites More sharing options...
ginerjm Posted June 13, 2022 Share Posted June 13, 2022 48 minutes ago, foxclone said: <?php $errorlevel=error_reporting(); error_reporting($errorlevel & ~E_WARNING); //...code that generates notices error_reporting($errorlevel); Not sure what you are attempting with the above but since the setting is only good for the duration of the script's execution, you really s/b thinking of doing an E_ALL as well as a display on the client's screen to aid in debugging your script easier. error_reporting(E_ALL); ini_set('display_errors', '1'); Â Quote Link to comment https://forums.phpfreaks.com/topic/314921-getting-error-on-php-contact-form/#findComment-1597236 Share on other sites More sharing options...
Solution ginerjm Posted June 13, 2022 Solution Share Posted June 13, 2022 (edited) 1 hour ago, foxclone said: $secretcode = ['nospam']; The above line makes an array having one element (0) whose value is 'nospam'. What are you planning to do with that array? I don't see it referenced but it still seems like a funny thing to be doing. You are doing a check for the entry in this field but not with the array you have created. Perhaps you simply want to create it near the top of your script as a simple static variable and not an array? and then maybe you want to change this    if ($post['secretcode'] != 'nospam') To be if ($post['secretcode'] != $secretcode) BTW - You seem to be doing this thing with your own version of the $_POST array for no good reason. Is this something you read about somewhere that is supposed to be of help to your algorithm? Why not just use $_POST? It's a global array that you control and is accessible from your entire script.  Edited June 13, 2022 by ginerjm Quote Link to comment https://forums.phpfreaks.com/topic/314921-getting-error-on-php-contact-form/#findComment-1597237 Share on other sites More sharing options...
phppup Posted June 13, 2022 Share Posted June 13, 2022 (edited) @ginerjm This particular item caught my attention. $secretcode = ['nospam']; Looks like a piece from @kicken in yesterday's post on "sudden influx of spam"  Edited June 13, 2022 by phppup Clean up post Quote Link to comment https://forums.phpfreaks.com/topic/314921-getting-error-on-php-contact-form/#findComment-1597243 Share on other sites More sharing options...
ginerjm Posted June 13, 2022 Share Posted June 13, 2022 What does one have to do with the other? Quote Link to comment https://forums.phpfreaks.com/topic/314921-getting-error-on-php-contact-form/#findComment-1597245 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.