Notice: Undefined index:

Status
Niet open voor verdere reacties.

Broertjuhhh

Gebruiker
Lid geworden
6 feb 2007
Berichten
271
Hallo allemaal,

Sinds kort krijg ik opeens de volgende melding op mijn site als ik een email wil versturen "Notice: Undefined index: verzend in /public/sites/www.opdit.nl/contact/e_contact.php on line 21"

PHP:
	// Gegevens ophalen formulier _____________________________________

		if($_REQUEST['verzend'])
	{
		$naam = $_REQUEST['naam'];
		$email = $_REQUEST['email'];
		$opmerkingen = $_REQUEST['opmerkingen'];

Ik heb niks veranderd en het begon spontaan.

Alvast bedankt,
 
Gebruik maken van $_REQUEST-variabelen is erg onbetrouwbaar en is een veiligheidsrisico. Bij formulieren gebruik je $_POST, voor URL-parameters gebruik je $_GET :)

Verder is een check of een veld bestaat ook geen betrouwbare methode, controleer daarom het soort request:

Dit zou beter moeten werken:
PHP:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $naam = $_POST['naam'];
    $email = $_POST['email'];
    $opmerkingen = $_POST['opmerkingen'];
 
Undefined index:

Hallo Tha Devil,

Dank je wel, het werkt weer,

Ook moest ik <?php echo $PHP_SELF; ?>"> veranderen in <?php $_SERVER['PHP_SELF'] ?>">

Het rare is dat ik het zelfde script gebruik ( met wat aanpassingen ) voor het aanvragen van de nieuwsbrief, maar die wordt niet verzonden.
 
Hallo Tha Devil,
Ook moest ik <?php echo $PHP_SELF; ?>"> veranderen in <?php $_SERVER['PHP_SELF'] ?>">
Vreemd als dat zo moest, nu doe je opeens niks met die $_SERVER['PHP_SELF'] variabele.
 
Ook moest ik <?php echo $PHP_SELF; ?>"> veranderen in <?php $_SERVER['PHP_SELF'] ?>">

Waarom zou je dat gebruiken? Als je een formulier toont en weergeeft op dezelfde URL dan kun je beter het action-attribuut van het formulier leeg laten.

Het rare is dat ik het zelfde script gebruik ( met wat aanpassingen ) voor het aanvragen van de nieuwsbrief, maar die wordt niet verzonden.

Wat heb je qua debugging geprobeerd? Heb je foutmeldingen aan staan?

Simpele test:
PHP:
<?php
echo $undefined;

Bij het opvragen van een pagina met bovenstaande code zul je een Notice moeten krijgen.
 
Hallo,

Ik ben er een tijdje uit geweest en probeer er weer in te komen, dus...

Wat "Wat heb je qua debugging geprobeerd? Heb je foutmeldingen aan staan?" betreft, dat weet ik niet, hoe moet dat ?

Met,
PHP:
echo $undefined;
Krijg ik inderdaad een Notice van de betreffende regel.

Even ter correctie, het nieuwsbrief script werkt en e-mailscript werkt niet.

Hier onder het script, het is precies het zelfde als het nieuwsbrief script, alleen heb ik het het onderdeel "opmerking" er bijgevoegd.

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">

<head>
<title>E-mail-Contact</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link rel="shortcut icon" type="image/png" href="../favicon.png" />
<link rel="stylesheet" type="text/css" href="../hoofdmenu/pro_pullup_1/pro_drop_1.css" />
<link rel="stylesheet" type="text/css" href="../stylesheets/opdit_custom.css" />

</head>

<?php

	// Breedte en Hoogte Schermresolutie _Verwijderd van wege flits___

	// Gegevens ophalen formulier _____________________________________

		if ($_SERVER['REQUEST_METHOD'] == 'POST')
	{
    	$naam = $_POST['naam'];
	    $email = $_POST['email'];
    	$opmerkingen = $_POST['opmerkingen'];

   // IP en Host nummer ______________________________________________
   
		if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && eregi("^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$",$_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$ipnum = $_SERVER['HTTP_X_FORWARDED_FOR'];
	} 	else {
		$ipnum = getenv("REMOTE_ADDR");
	}
		$host = $_SERVER["HTTP_HOST"];
		
   // Browser naam controle __________________________________________		
	
   if (isset($_SERVER["HTTP_USER_AGENT"]) OR ($_SERVER["HTTP_USER_AGENT"] != "")) {
        $visitor_user_agent = $_SERVER["HTTP_USER_AGENT"];
    } else {
        $visitor_user_agent = "Onbekend";
    }
    $browser = 'Onbekend';
    $version = "0.0.0";
 
    // Next get the name of the useragent yes seperately and for good reason
    if (preg_match('/MSIE/', $visitor_user_agent) && !preg_match('/Opera/', $visitor_user_agent)) {
        $browser = 'Internet Explorer';
        $ub = "MSIE";
    } elseif (preg_match('/Firefox/', $visitor_user_agent)) {
        $browser = 'Mozilla Firefox';
        $ub = "Firefox";
    } elseif (preg_match('/Chrome/', $visitor_user_agent)) {
        $browser = 'Google Chrome';
        $ub = "Chrome";
    } elseif (preg_match('/Safari/', $visitor_user_agent)) {
        $browser = 'Apple Safari';
        $ub = "Safari";
    } elseif (preg_match('/Opera/', $visitor_user_agent)) {
        $browser = 'Opera';
        $ub = "Opera";
    } elseif (preg_match('/Netscape/', $visitor_user_agent)) {
        $browser = 'Netscape';
        $ub = "Netscape";
    } elseif (preg_match('/Seamonkey/', $visitor_user_agent)) {
        $browser = 'Seamonkey';
        $ub = "Seamonkey";
    } elseif (preg_match('/Konqueror/', $visitor_user_agent)) {
        $browser = 'Konqueror';
        $ub = "Konqueror";
    } elseif (preg_match('/Navigator/', $visitor_user_agent)) {
        $browser = 'Navigator';
        $ub = "Navigator";
    } elseif (preg_match('/Mosaic/', $visitor_user_agent)) {
        $browser = 'Mosaic';
        $ub = "Mosaic";
    } elseif (preg_match('/Lynx/', $visitor_user_agent)) {
        $browser = 'Lynx';
        $ub = "Lynx";
    } elseif (preg_match('/Amaya/', $visitor_user_agent)) {
        $browser = 'Amaya';
        $ub = "Amaya";
    } elseif (preg_match('/Omniweb/', $visitor_user_agent)) {
        $browser = 'Omniweb';
        $ub = "Omniweb";
    } elseif (preg_match('/Avant/', $visitor_user_agent)) {
        $browser = 'Avant';
        $ub = "Avant";
    } elseif (preg_match('/Camino/', $visitor_user_agent)) {
        $browser = 'Camino';
        $ub = "Camino";
    } elseif (preg_match('/Flock/', $visitor_user_agent)) {
        $browser = 'Flock';
        $ub = "Flock";
    } elseif (preg_match('/AOL/', $visitor_user_agent)) {
        $browser = 'AOL';
        $ub = "AOL";
    } elseif (preg_match('/AIR/', $visitor_user_agent)) {
        $browser = 'AIR';
        $ub = "AIR";
    } elseif (preg_match('/Fluid/', $visitor_user_agent)) {
        $browser = 'Fluid';
        $ub = "Fluid";
    } else {
		$browser = 'Onbekend';
        $ub = "Onbekend";
    }
	 
    // finally get the correct version number
    $known = array('Version', $ub, 'other');
    $pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
    if (!preg_match_all($pattern, $visitor_user_agent, $matches)) {
        // we have no matching number just continue
    }
 
    // see how many we have
    $i = count($matches['browser']);
    if ($i != 1) {
        //we will have two since we are not using 'other' argument yet
        //see if version is before or after the name
        if (strripos($visitor_user_agent, "Version") < strripos($visitor_user_agent, $ub)) {
            $version = $matches['version'][0];
        } else {
            $version = $matches['version'][1];
        }
    } else {
        $version = $matches['version'][0];
    }
 
    // check if we have a number
    if ($version == null || $version == "") {
        $version = "?";
    };
			
	// Controle naam - emailadres en Opmerking _______________________

		$error = false;
		
		if(empty($naam)) {
		$error .= "<br>Het Naam-veld is niet ingevuld !<br>";}
		
		if ((!preg_match("%.+\@.+\..+%", $email)) || (!preg_match("^[a-zA-Z0-9_@.-]+$^", $email))){   
		$error .= "<br>Ongeldig emailadres !<br>";}
		
		if(empty($opmerkingen)) {
		$error .= "<br>Het Bericht-veld is niet ingevuld !<br>";}
		
?>

<div id="mainplus_nieuwsbrief">
	<br />
	
<?php

	if($error) { echo nl2br($error); }
	if($error) { echo '<br><br><h1><a href="e_nieuwsbrief.php">Klik hier om terug te gaan.' . '</h1></font>'; }
	else {
	
?>

</div>

<?php
   
	// Bericht maken _________________________________________________
	
		$aan      = "Webmaster@opdit.nl";
		$betreft  = "Privé bericht van " . $naam ;
		$betreft1 = "Privé bericht";		
   
        $bericht = $betreft1 . "<br />";
        $bericht .= "___________________________________<br /><br />";		
        $bericht .= "Van . . . . . . . : " . $naam . "<br />";
		$bericht .= "Emailadres. . . . : " . $email . "<br />";		
        $bericht .= "IP - adres. . . . : " . $ipnum . "<br />";
        $bericht .= "Provider. . . . . : " . $host . "<br />";
	    $bericht .= "Browser . . . . . : " . $browser . " " . $version ."<br />";				
	    $bericht .= "Datum . . . . . . : " . date('d-m-Y',time()) . "<br />";
	    $bericht .= "Tijd. . . . . . . : " . date('H:i:s',time()) . "<br />";
        $bericht .= "___________________________________<br /><br />";
        $bericht .= "Bericht . . . . . : " . $opmerkingen . "<br />";
				
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
		$headers .= "From: Info @ " . $_SERVER['SERVER_NAME'] . "\r\n";        

	// Bericht versturen ______________________________________________
	
        mail($aan, $betreft, '<font face="Courier New" size="2">' . nl2br($bericht) . '</font>', $headers);

?>

<div id="header"> <?php include("../0_includes/header.htm"); ?> </div>
<div id="left"> <?php include("../0_includes/left.htm"); ?> </div>

<div id="mainplus_nieuwsbrief">
	<br />

	Bedankt voor je E-mail,<br><br>we zullen je E-mail zo snel mogelijk beantwoorden.

</div>

<?php

	}}
 
	else { 
   
?>

<body>
<div id="header"> 
  <?php include("../0_includes/header.htm"); ?>
</div>
<div id="left"> 
  <?php include("../0_includes/left.htm"); ?>
</div>
<div id="mainplus_nieuwsbrief"> 
  <p class="center">:: Nieuwsbrief ::</p>
  <p class="top50"></p>
  <form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>">
    Naam : *<br />
    <input type="text" name="naam" size="26" value="">
    <br />
    <br />
    Email adres : *<br />
    <input type="text" name="email" size="26" value="">
    <br />
    <br />
	Bericht : *<br />
    <textarea name="opmerkingen" cols="50" rows="6"></textarea>
    <br />
    <br />
    <input type="submit" value="Verstuur" name="verzend">
    <input type="reset" value="Reset">
    <br />
    <br />
    Als de met een * gemarkerde velden blanco zijn kan het bericht niet verzonden 
    worden ! 
  </form>
</div>
<div id="leftfooter"> 
  <?php include("../0_includes/left_footer.htm") ?>
</div>
<div id="rightfooter"> 
  <?php include("../0_includes/right_footer.htm") ?>
</div>
</body>
</html> 
	
<?php } ?>
 
Debuggen is op diverse plekken in de code wat echo's of var_dump's neer zetten zodat je bepaalde waardes van variabelen kunt controleren of zodat je weet in welk IF/ELSE-statement jouw code terecht komt.
 
Dank je voor de tip, dat ga ik doen.
Blijft de vraag waarom het ene script wel mail verstuurd en de ander niet, terwijl ze identiek zijn.
 
Er moet ergens verschil inzitten dan.
 
kijk eens naar lijn 38

zal voorlopig nog geen fout opgeleverd hebben
PHP:
if(isset($_SERVER)&& array_key_exists('HTTP_USER_AGENT',$_SERVER)&&($_SERVER["HTTP_USER_AGENT"] != "")
 
Hallo kenikavanbis,

Ik ben nog niet zo goed in dit soort dingen, ik heb naar de lijn gekeken maar snap niet wat je bedoeld.
Wat voor fout zou de regel moeten opleveren ?
 
Halo Tha Devil,

Het probleem van de niet verzonden e-mail is opgelost en met grote verwondering bleek het probleem een accent te zijn.
Het accent was de " ' " op Privé, in regel 168 en 169.

Bedankt voor je hulp.

Wat blijft is de vraag die voortvloeide uit de eerste vraag betreffende de reactie van kenikavanbis.
Ik zie niet en begrijp niet wat hij bedoeld.

PHP:
if(isset($_SERVER)&& array_key_exists('HTTP_USER_AGENT',$_SERVER)&&($_SERVER["HTTP_USER_AGENT"] != "")

regel 38

Wat is het probleem van deze regel ?
 
sorry ik ben niet altijd duidelijk en array_key_exists('HTTP_USER_AGENT',$_SERVER) zal indien je het wil gebruiken op meerdere servers kunnen gebruiken om te kijken als die aanwezig is . php.ini kan dergelijk kennis ook uitzetten of het bestaat dat de sleutel/key niet aanwezig is.ik zou moeten kijken of het een warning of error afgeeft maar ik dacht dat het werd aangegeven.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan