Jump to content
  • 0

Массивы


rus
 Share

Question

Всем здрасте!

Ребят, я конечно понимаю что вопрос очень простой для кого-то покажется, но все же...

Инфы по массивам очень много в инете и вобщем то все прекрасно описано, но мне надо знать какую именно функцию применить в моем случае.

Существует форма, в форме автоматом создаются поля типа инпут, в которых так же автоматом создаются name="name[0]", name="name[1]", name="name[2]" и т.д... соответственно в обработчике мне надо вытащить значения, которые пришли постом из name="name[]" обритившись по индексу, но не к конкретному, а ко всем индексам. Пробовал копать в сторону array_keys но что то не понял что дальше делать с результатом.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0
А если foreach ($name as $_name=>$val) {} ?

Вот смотри:

С формы:

<input type="text" name="name[0]">

В обработчике:

$name = $_POST['name'];
$name = array($name);
foreach ($name as $_name=>$val)

И далее:

Привет '.$val.'

Так? или я че-то не понял...

Link to comment
Share on other sites

  • 0
Вот смотри:

С формы:

<input type="text" name="name[0]">

В обработчике:

$name = $_POST['name'];
$name = array($name);
foreach ($name as $_name=>$val)

И далее:

Привет '.$val.'

Так? или я че-то не понял...

точно - не понял) смотри - есть список инпутов

<input type="text" name="myinput[]" value="" />
<input type="text" name="myinput[]" value="" />
<input type="text" name="myinput[]" value="" />
<input type="text" name="myinput[]" value="" />
<input type="text" name="myinput[]" value="" />

в php просто

<?php
var_dump($_POST['myinput']);
?>

и увидишь все свои элементы которые прислались формой :unsure:

Link to comment
Share on other sites

  • 0
в php просто

<?php
var_dump($_POST['myinput']);
?>

и увидишь все свои элементы которые прислались формой :unsure:

Спасибо, но немного не то, ну либо просто не понял.

Вот как у меня получилось в обработчике:

$arr = array($name[0]);

foreach ($arr as $key => $value) {
Привет <strong>' . $value . '</strong>
}

Тут в принципе все получилось, но это не совсем то, так как надо это связать с отсыланием на рызные e-mail адреса.

В моем случае (как есть сейчас) отсылает только на один адрес, так как я в индексе указал [0], вот на него и отсылается:

foreach ($arr2 as $key => $value) {
$toMail = $value;
$subject= "Тема сообщения: $theme";
$from="$res";
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=windows-1251 \r\n";
$headers.= "From: $from $email1\r\n";
mail ($toMail, $subject, $text, $headers);
}

Я же пытаюсь получить зависимость, то есть:

в форме допустим 6 инпутов

—-- имя —-- email

—-- имя —-- email

—-- имя —-- email

В зависимости от того какое имя и email в тексте сообщения будет подставлено имя введенное в инпуте:

foreach ($arr as $key => $value) {
Привет <strong>' . $value . '</strong>
}

И отослано на email указаный в инпуте.

Link to comment
Share on other sites

  • 0
Спасибо, но немного не то, ну либо просто не понял.

Вот как у меня получилось в обработчике:

$arr = array($name[0]);

foreach ($arr as $key => $value) {
Привет <strong>' . $value . '</strong>
}

Тут в принципе все получилось, но это не совсем то, так как надо это связать с отсыланием на рызные e-mail адреса.

В моем случае (как есть сейчас) отсылает только на один адрес, так как я в индексе указал [0], вот на него и отсылается:

foreach ($arr2 as $key => $value) {
$toMail = $value;
$subject= "Тема сообщения: $theme";
$from="$res";
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=windows-1251 \r\n";
$headers.= "From: $from $email1\r\n";
mail ($toMail, $subject, $text, $headers);
}

Я же пытаюсь получить зависимость, то есть:

в форме допустим 6 инпутов

—-- имя —-- email

—-- имя —-- email

—-- имя —-- email

В зависимости от того какое имя и email в тексте сообщения будет подставлено имя введенное в инпуте:

foreach ($arr as $key => $value) {
Привет <strong>' . $value . '</strong>
}

И отослано на email указаный в инпуте.

по логике все верно, но реально - попробуй вребить режим отладки через print/echo/var_dump и посмотреть что у тебя во всез переменных - где-то здесь косяк

Link to comment
Share on other sites

  • 0
Вот как у меня получилось в обработчике

странные потом конструкци

вы же можете напрямую

foreach ($_POST['name'] as $key => $value) {

}

но беда в другом - вы код точный формы не приводите, скорее всего там мудрите

если сделаете пары

<input type="text" name="name[]" value="" /> <input type="text" name="email[]" value="" />

тогда в цикле можно получить

foreach ($_POST['name'] as $key => $value) {
echo "имя $value и почту {$_POST['email'][$key]}";
}

но это еcли соблюдать вашу логику

давайте выкладывайте код формы и излагайте в чем смысл

Edited by alexspb
Link to comment
Share on other sites

  • 0
давайте выкладывайте код формы и излагайте в чем смысл

Суть задачи заключается вот в этой теме.

Сразу оговорюсь что денег я за это не получу, так как решил просто помоч, да и самому показалась задачка интересная.

Вот полный листинг кода:

HTML

<?php
error_reporting (0);
session_start();
?>
<html>
<head>
<script language="JavaScript" type="text/javascript">
// TextArea MaxLength
var ns6=document.getElementById&&!document.all
function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}
function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}
function displaylimit(theform,thelimit){
var limit_text='<em>Разрешается ввести не более <span id="'+theform.toString()+'" style="color: #888;">'+thelimit+'</span> символов в форму</em>'

if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true);
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true);
}
}
</script>

<script>
var c=2; //счётчик количества строк
function addline()
{
c++; // увеличиваем счётчик строк
s=document.getElementById('table').innerHTML; // получаем HTML-код таблицы
s=s.replace(/[\r\n]/g,''); // вырезаем все символы перевода строк
re=/(.*)(<p id=.*>)(<\/p>)/gi;
// это регулярное выражение позволяет выделить последнюю строку таблицы
s1=s.replace(re,'$2'); // получаем HTML-код последней строки таблицы
s2=s1.replace(/\[\d+\]/gi,'['+c+']'); // заменяем все цифры к квадратных скобках
// на номер новой строки
s2=s2.replace(/(rmline\()(\d+\))/gi,'$1'+c+')');
// заменяем аргумент функции rmline на номер новой строки
s=s.replace(re,'$1$2'+s2+'$3');
// создаём HTML-код с добавленным кодом новой строки
document.getElementById('table').innerHTML=s;
// возвращаем результат на место исходной таблицы
return false; // чтобы не происходил переход по ссылке
}
function rmline(q)
{
if (c==2) return false; else c--;
// если раскомментировать предыдущую строчку, то последний (единственный)
// элемент удалить будет нельзя.
s=document.getElementById('table').innerHTML;
s=s.replace(/[\r\n]/g,'');
re=new RegExp('<p id="?newline"? nomer="?\\['+q+'.*?<\\/p>','gi');
// это регулярное выражение позволяет выделить строку таблицы с заданным номером
s=s.replace(re,'');
// заменяем её на пустое место
document.getElementById('table').innerHTML=s;
return false;
}
</script>
</head>
<body>
<form method="Post" action="sendmail.php" name="limit">
<table class="table_content">
<tr>
<td class="td_border">Ваше имя<font color="#FF0000">*</font>:</td>
<td class="td_border"><input type="Text" name="name1"/></td>
</tr>
<tr>
<td class="td_border">Ваш E-Mail<font color="#FF0000">*</font>:</td>
<td class="td_border"><input type="Text" name="email1"/></td>
</tr>
<tr>
<td class="td_border">Тема сообщения<font color="#FF0000">*</font>:</td>
<td class="td_border"><input type="Text" name="theme"/></td>
</tr>
<tr>
<td class="td_border">Сообщение:</td>
<td class="td_border">
<textarea cols=40 rows=5 name="message">
Привет друг %Такой-то%
Это твой друг %Такой-то%,
хочу сообщить тебе об интересном сайте таком-то...
Вот %ссылка% на этот сайт
Если будут вопросы - спрашивай на форуме
Удачи мой друг %Такой-то%
</textarea>
<div align="center"><script>displaylimit("document.limit.message",1000)</script></div></td>
</tr>
<tr>
<td class="td_border" colspan="2" align="center">
<h3>Введите текст с картинки:</h3>
<p><img src="captcha/index.php?<?php echo session_name()?>=<?php echo session_id()?>"></p>
<p><input type="text" name="keystring"></p>
</td>
</tr>
</table>

<div id="table">
<p id="newline" nomer="[0]">
Имя<font color="#FF0000">*</font>
<input type="text" name="name[0]">
E-mail<font color="#FF0000">*</font>
<input type="text" name="email[0]">
<a href="#" onclick="return rmline(0);"><img src="minus.gif" border="0"></a>
</p>
<p id="newline" nomer="[1]">
Имя<font color="#FF0000">*</font>
<input type="text" name="name[1]">
E-mail<font color="#FF0000">*</font>
<input type="text" name="email[1]">
<a href="#" onclick="return rmline(0);"><img src="minus.gif" border="0"></a>
</p>
<p id="newline" nomer="[2]">
Имя<font color="#FF0000">*</font>
<input type="text" name="name[2]">
E-mail<font color="#FF0000">*</font>
<input type="text" name="email[2]">
<a href="#" onclick="return rmline(0);"><img src="minus.gif" border="0"></a>
</p>
</div>
<p><a href="#" onclick="return addline();"><img src="plus.gif" border="0"></a></p>
<input type="image" src="submit.gif" />
</form>
</body>
</html>

PHP

<?
session_start();
$date = date("d/m/Y");
$name1 = $_POST['name1'];
$theme = $_POST['theme'];
$email1 = $_POST['email1'];
$message = $_POST['message'];
$name = $_POST['name'];
$email = $_POST['email'];
$arr2 = array($email[1]);
$arr = array($name[1]);

if(count($_POST)>0)
{
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{


if (empty($_POST['name1']) or strlen($name1) < 5)

echo
'<p>Вы не указали фамилию и имя!</p>';

if (empty($_POST['theme']) or strlen($theme) < 5)

echo
'<p>Вы не указали тему сообщения.</p>';

if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email1']))

echo
'<p>Email не был указан, или указан некорректный email!</p>
<a href="java script:history.back(1)">Вернуться назад</a>';

else
{
foreach ($arr as $key => $value) {
$text = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>'. $from . '</title>
<style media="screen" type="text/css">
table {
padding:5px;
margin:5px;
border:#E2E2E2 solid 2px;
width:600px;
text-align: center;
}
td {
border:#E2E2E2 solid 1px;
width:100px;
padding:5px;
margin:5px;
text-align: center;
color:#3E73C8;
}
body {
margin: 0;
padding: 6px;
border: 0;
background: #fff;
text-align: center;
}
</style>
</head>
<body>
<table>
<tr>
<td>Имя отправителя:</td>
<td>'.$name1.'</td>
</tr>
<tr>
<td>Email отправителя:</td>
<td>'.$email1.'</td>
</tr>
<tr>
<td>Тема сообщения:</td>
<td>'.$theme.'</td>
</tr>
<tr>
<td>Текст сообщения:</td>
<td>
Привет друг <strong>' . $value . '</strong>
Это твой друг <strong>'.$name1.'</strong>,
хочу сообщить тебе об интересном сайте таком-то...
Вот %ссылка% на этот сайт
Если будут вопросы - спрашивай на форуме
Удачи мой друг <strong>' . $value . '</strong></td>
</tr>
<tr>
<td>Дата отправки сообщения:</td>
<td><div style="line-height: 30px;"> (' . $date . ')</div></td>
</tr>
</table>
</body>
</html>';
}
foreach ($arr2 as $key => $value) {
$toMail = $value;
}
$subject = "Тема сообщения: $theme";
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: $email1\r\n";
mail ($toMail, $subject, $text, $headers);
echo
'<p>Сообщение успешно отправлено.</p>
<a href="java script:history.back(1)">Вернуться назад</a>';
}

echo '<p>Код введен правильно!</p>';
}
else
{
echo '<p>Ошибка - не введен код подтверждения!<br />
Либо введен неверно!</p>
<p><a href="java script:history.back(1)">Вернуться назад</a></p>';
}
}

unset($_SESSION['captcha_keystring']);
?>

А вот как выглядет заготовка в реале

Link to comment
Share on other sites

  • 0

rus, вы не обижайтесь, но даже смотреть такой - потеря времени

надо пользоваться шаблонами как минимум (разделять HTML и PHP)

конструкции вида $arr2 = array($email[1]); вообще лишние, научитесь в цикле обрабатывать массивы

Link to comment
Share on other sites

  • 0
rus, вы не обижайтесь, но даже смотреть такой - потеря времени

надо пользоваться шаблонами как минимум (разделять HTML и PHP)

конструкции вида $arr2 = array($email[1]); вообще лишние, научитесь в цикле обрабатывать массивы

Не обижаюсь, над советом подумаю.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy