Problème de formulaire PHP

CHSCT
Invité n'ayant pas de compte PHPfrance

15 sept. 2015, 23:06

Bonsoir à tous,
Je tente depuis pas mal de temps de créer un formulaire... sans grand succès :(
Je suis donc parti sur un template Bootstrap, en remplissant correctement (J'espère) ce qui devait l'être (adresse de serveur, mon email etc...). Le formulaire accepte (enfin) les messages et les envois... mais je ne les reçois pas :/
Le lien : http://sunrisecoffeeshopaddict.org/form.html
Le fichier PHP :
<?php

if(!isset($_GET['s'])) {
	die('You must define a search term!');
}

$highlight = true;//highlight results or not
$search_in = array('html', 'htm');//allowable filetypes to search in
$search_dir = '../';//starting directory
$recursive = true;//should it search recursively or not
define('SIDE_CHARS', 80);
$file_count = 0;
$search_term = mb_strtolower($_GET['s'], 'UTF-8');
//$search_term = $_GET['s'];
$search_term_length = strlen($search_term);
$final_result = array();

$files = list_files($search_dir);

foreach($files as $file){
	$contents = file_get_contents($file);
	preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
	if (preg_match("#\<body.*\>(.*)\<\/body\>#si", $contents, $body_content)){ //getting content only between <body></body> tags
		$clean_content = strip_tags($body_content[0]); //remove html tags
		$clean_content = preg_replace( '/\s+/', ' ', $clean_content ); //remove duplicate whitespaces, carriage returns, tabs, etc
	
	//$found = strpos_recursive($clean_content, $search_term);
	$found = strpos_recursive(mb_strtolower($clean_content, 'UTF-8'), $search_term);
	$final_result[$file_count]['page_title'][] = $page_title[1];
	$final_result[$file_count]['file_name'][] = $file;
}
	if($found && !empty($found)) {
		for ($z = 0; $z < count($found[0]); $z++){
			$pos = $found[0][$z][1];
			$side_chars = SIDE_CHARS;
			if ($pos < SIDE_CHARS){
				$side_chars = $pos;
				$pos_end = SIDE_CHARS + $search_term_length;
			}else{
				$pos_end = SIDE_CHARS*2 + $search_term_length;
			}

			$pos_start = $pos - $side_chars;
			$str = substr($clean_content, $pos_start, $pos_end);
			$result = preg_replace('#'.$search_term.'#ui', '<span class="search">\0</span>', $str);
			//$result = preg_replace('#'.$search_term.'#ui', '<span class="search">'.$search_term.'</span>', $str);
			$final_result[$file_count]['search_result'][] = $result;
		}
	} else {
		$final_result[$file_count]['search_result'][] = '';
	}
	$file_count++;
}
?>
<!DOCTYPE HTML>
<html lang="en-US" class="iframe">
<head>
	<title>Search results</title>	
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
	<link rel="stylesheet" href="../css/bootstrap.css" type="text/css" media="screen">
	<link rel="stylesheet" href="../css/style.css" type="text/css" media="screen">
	<link rel="stylesheet" href="search.css" type="text/css" media="screen">

</head>
<body>
<script type="text/javascript">
;(function(){	
	document.body.onload=resize
	window.onresize=resize
	
	function resize(){
		parent._resize(document.getElementById('search-results').offsetHeight)
	}
})()
</script>

	<div id="search-results">
		<ol class="search_list">
	<?php
		$match_count = 0;
		for ($i=0; $i < count($final_result); $i++){
			if (!empty($final_result[$i]['search_result'][0]) || $final_result[$i]['search_result'][0] !== ''){
				$match_count++;
	?>
			<li>
				<h3 class="search_title"><a target="_top" href="<?php echo $final_result[$i]['file_name'][0]; ?>" class="search_link"> <?php echo $final_result[$i]['page_title'][0]; ?> </a></h3>
				...<?php echo $final_result[$i]['search_result'][0]; ?>...
				<span class="match">Terms matched: <?php echo count($final_result[$i]['search_result']); ?> - URL: <?php echo $final_result[$i]['file_name'][0]; ?></span>
			</li>
	<?php
			}
		}
		if ($match_count == 0) {
			echo '<h3>No results found for <span class="search">'.$search_term.'</span></h3>';
		}
	?>
		</ol>
	</div>

</body>
</html>


<?php
//lists all the files in the directory given (and sub-directories if it is enabled)
function list_files($dir){
	global $recursive, $search_in;

	$result = array();
	if(is_dir($dir)){
		if($dh = opendir($dir)){
			while (($file = readdir($dh)) !== false) {
				if(!($file == '.' || $file == '..')){
					$file = $dir.'/'.$file;
					if(is_dir($file) && $recursive == true && $file != './.' && $file != './..'){
						$result = array_merge($result, list_files($file));
					}
					else if(!is_dir($file)){
						if(in_array(get_file_extension($file), $search_in)){
							$result[] = $file;
						}
					}
				}
			}
		}
	}
	return $result;
}

//returns the extention of a file
function get_file_extension($filename){
	$result = '';
	$parts = explode('.', $filename);
	if(is_array($parts) && count($parts) > 1){
		$result = end($parts);
	}
	return $result;
}

function strpos_recursive($haystack, $needle, $offset = 0, &$results = array()) {               
    $offset = stripos($haystack, $needle, $offset);
    if($offset === false) {
        return $results;           
    } else {
        $pattern = '/'.$needle.'/ui';
	preg_match_all($pattern, $haystack, $results, PREG_OFFSET_CAPTURE);
		return $results;
    }
}
?>
Merci à vous et bonne soirée,
CHSCT

Mammouth du PHP | 2703 Messages

15 sept. 2015, 23:21

c'est le code php de http://sunrisecoffeeshopaddict.org/bat/MailHandler.php dont on a besoin pour voir l'envoi de l'email.

CHCT
Invité n'ayant pas de compte PHPfrance

16 sept. 2015, 00:17

Bonsoir,
Le code "bat/MailHandler.php" est celui que j'ai publié lors de la question.
Une idée ? Je suis réellement perdu.
Merci

Mammouth du PHP | 2703 Messages

16 sept. 2015, 01:34

je clique sur le lien, j'obtiens :
mail failed
ce texte figure-t-il dans cette page ? non, et aucun fichier n'est inclus.
donc non, on n'a pas le bon code.

CHSCT
Invité n'ayant pas de compte PHPfrance

16 sept. 2015, 10:21

Bonjour,
Désolé pour l'erreur du lien :p Le bon :
http://sunrisecoffeeshopaddict.org/form
Bonne journée,
C.

CHSCT
Invité n'ayant pas de compte PHPfrance

16 sept. 2015, 11:55

re_bonjour,
Bon, finalement le formulaire fonctionne. Il suffit de ne pas inscrire n'importe quoi (nom, adresse mail...) sinon le message est "envoyé" mais n'est pas réceptionné (aucune trace du message, ce qui reste un problème -?-). En inscrivant une adresse mail correcte (même inventée), je reçois bien le message :)
Des choses sont peut-être à revoir dans le php ?
Bonne journée,
C.

ynx
Mammouth du PHP | 586 Messages

16 sept. 2015, 14:36

Salut,
Il semble que le code php posté ne soit pas le bon : il n'y a pas de traitement de formulaire (hormis $_GET['s']) ni d'envoi de mail.
Peux tu nous poster le code correspondant au traitement de ton formulaire ?

CHSCT
Invité n'ayant pas de compte PHPfrance

16 sept. 2015, 19:45

Slt ynx,
Encore une erreur de ma part :/ Le code php :
<?php
	$owner_email = $_POST["[email protected]"];
	$headers = 'From:' . $_POST["email"];
	$subject = 'A message from your site visitor ' . $_POST["name"];
	$messageBody = "";
	
	if($_POST['name']!='nope'){
		$messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['email']!='nope'){
		$messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}else{
		$headers = '';
	}
	if($_POST['state']!='nope'){		
		$messageBody .= '<p>State: ' . $_POST['state'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['phone']!='nope'){		
		$messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}	
	if($_POST['fax']!='nope'){		
		$messageBody .= '<p>Fax Number: ' . $_POST['fax'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['message']!='nope'){
		$messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
	}
	
	if($_POST["stripHTML"] == 'true'){
		$messageBody = strip_tags($messageBody);
	}
	
	try{
		if(!mail($owner_email, $subject, $messageBody, $headers)){
			throw new Exception('mail failed');
		}else{
			echo 'mail sent';
		}
	}catch(Exception $e){
		echo $e->getMessage() ."\n";
	}
?>
Avec ce dernier, je reçois environ une réponse sur trois (mieux que rien, en attendant mieux ? ;)
Bonne soirée,
C

Mammouth du PHP | 2703 Messages

16 sept. 2015, 20:25

$headers = 'From:' . $_POST["email"];
mettre plutôt une valeur fixe qui fait que le mail parte, et ajouter $_POST["email"] dans le contenu du mail ou le champ reply to.

CHSCT
Invité n'ayant pas de compte PHPfrance

17 sept. 2015, 15:33

Merci pour ta réponse or 1,
Malheureusement c'est la première fois que je tombe sur du php et je ne comprends pas trop. Peux-tu m'en dire plus ?
Désolé :/
Bon après-midi,
C.