Balderick Posted August 18, 2016 Share Posted August 18, 2016 My first question: I have a message like this: notice: undefined offset 0 I use an input form to check with dns_get_record and DNS_MX whether the domain of an email exists. I can check the emails if the domain does exist, but a wrong domain like: mail@verynonexistingdomain.com throws in the notice undefined offset 0 so does an empty input. <html> <center> <br> email input :<br> <form action="#" method = "post"> <input type ="text" name ="mail"> <br> <input type="submit" name = "click" value ="zend"> </form> <?php $domain =''; $data =''; var_dump($_POST['click']); var_dump($_POST['mail']); if (isset($_POST['mail'])) { echo $_POST['mail']; $input = $_POST['mail']; } // // function check_address($input){ list($user, $domain) = explode('@', $input); $data= dns_get_record($domain, DNS_MX); if($data[0]['host']==$domain&&!empty($data[0]['target'])) { return $data[0]['target']; } else { }} echo check_address($input); Echo '<br><br>'; echo $input . " : " ; if(check_address($input) ) { echo('<br>This MX records exists; I will accept this email as valid.<br> '); } else { echo('<br>No MX record exists; Invalid email.<br>'); } echo '</center>'; ?> </html> I had it working without the form part so with a constant variable, but when I added the form it threw the error. I tried several options, but cant find the logic behind executing a good input without throwing an error and a bad domain giving this notice. Anyone any idea? Link to comment Share on other sites More sharing options...
justsomeguy Posted August 18, 2016 Share Posted August 18, 2016 You can use isset to check if a variable exists. If it doesn't exist then it probably wasn't found and you can show an error message. Link to comment Share on other sites More sharing options...
Balderick Posted August 19, 2016 Author Share Posted August 19, 2016 (edited) Hi thanks for reading my post. I found a solution in using only one = in if($data[0]['host']=$domain&&!empty($data[0]['target']) ) I also placed if (!empty($input)){ in the very beginning of the function. I do the programming to understand what PHP does, but some things are not easy to do just by sheer logic. I had to reduce the number of operators from 2 to 1, at php.net there is brief explanation about operators regarding equality (==) and identity (===) of the different variables, but where can you find more about using just one = . To get a better understanding of these kind of operators I would like to receive some explanation how I should interpretate it in the example I posted. Edited August 19, 2016 by Balderick Link to comment Share on other sites More sharing options...
dsonesuk Posted August 19, 2016 Share Posted August 19, 2016 A single '=‘ means whatever preceeds '=‘ will equal whatever value following the '=‘, it is never used within a if condition for comparing one value against another. Link to comment Share on other sites More sharing options...
justsomeguy Posted August 19, 2016 Share Posted August 19, 2016 Yeah, that's not much of a solution. That's the same thing as doing this: $data[0]['host']=$domain; if ($data[0]['host'])Now you've changed the value of the variable you're trying to check, it's always going to have the same value as $domain. If that's what you're trying to do, great, but if that's not what you're trying to do then it's not a solution to your problem. Link to comment Share on other sites More sharing options...
Balderick Posted August 20, 2016 Author Share Posted August 20, 2016 @justsomeguy: You're not making it clearer to me. The function works, I drag data through it and with I can check with IF(name_of_function) { ..... if the output is ok or not. Link to comment Share on other sites More sharing options...
justsomeguy Posted August 22, 2016 Share Posted August 22, 2016 I'm not sure if I can make it clearer, but I'll try. The = operator is for assigning a value, not for checking a value. == and === are for checking values. When you do this: if($data[0]['host']=$domain)it is the same as doing this: $data[0]['host']=$domain; if (if($data[0]['host'])You are changing the value, because = is only used for assigning values. To prove that you are changing the value, run this: $test = 'foo'; if ($test = 'bar') { echo '$test is set to ' . $test; }Every time you run that code it will print "$test is set to bar". $test will never be set to foo, it will never have the value that it had before the if statement with the assignment. The if statement changes the value of the variable, because it uses =. So, your original code: if($data[0]['host']==$domain&&!empty($data[0]['target']))does not do the same thing as your new code: if($data[0]['host']=$domain&&!empty($data[0]['target']) )Those do 2 different things. The first one checks if $data[0]['host'] is the same value as $domain, and the second one copies the value in $domain into $data[0]['host']. If you're trying to check if $data[0]['host'] has a value and avoid the undefined offset error that you were getting, then you use isset to check if the variable is even set before you try to check the value: http://php.net/manual/en/function.isset.php isset will return false if the value is not set, and you can avoid the error of trying to access something that is not set. If it's not set then the domain lookup failed. Also, you should change your check_address function so that it always returns a value. Right now it only returns a value if everything matched. If it didn't match you should return a value like false so that you can tell whether or not the domain was found. A function that returns a value should always return a value in every case, not only some cases. Your other code depends on it to return a value. Hopefully that makes more sense. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now