Помогите с массивом и числом
1.
TheFaith (02.02.2010 / 05:34)
сделал код
$press_kod=mt_rand(100,999);
$press_kod[] = "ноль";
$press_kod[] = "один";
$press_kod[] = "два";
$press_kod[] = "три" ;
$press_kod[] = "четыре";
$press_kod[] = "пять";
$press_kod[] = "шесть";
$press_kod[] = "семь";
$press_kod[] = "восемь";
$press_kod[] = "девять";
echo "<small>*Защитный код: <b>".$press_kod."</b></small><br/>\n";
теперь как мне сделать чтобы выводило код словами а не цыфрами ?
2.
Артур (02.02.2010 / 05:41)
Никак, нужно полнотью переписывать код
3.
Удаленный (02.02.2010 / 05:44)
mt_rand и массивы мдааа,автор тут можно просто это всё сделать в одной функции,и сравнить результат генерации
4.
TheFaith (02.02.2010 / 05:44)
непонял, зачем его весь переписывать? ты шо то не то говоришь
5.
Артур (02.02.2010 / 05:45)
Если словами то, что то вроде этого:
$sRes = '';
Получаем код в цифрах
Проходим по каждому символу в цикле и передаем в swith
Проверяем цифру и в $sRes += соответствующее слово + ' ';
Возвращаем $sRes;
6.
TheFaith (02.02.2010 / 05:45)
3 а поточнее
7.
TheFaith (02.02.2010 / 05:46)
никуя не понял
8.
Артур (02.02.2010 / 05:48)
Можно по другому, записать в массив слова и не проверять условно, а индексно обращаться к ячейкам, будет чуть быстрее. Как я понял, автор, именно этого ты и хотел. Код примерно следующий:
$aStr[] = "ноль";
$aStr[] = "один";
$aStr[] = "два";
$aStr[] = "три" ;
$aStr[] = "четыре";
$aStr[] = "пять";
$aStr[] = "шесть";
$aStr[] = "семь";
$aStr[] = "восемь";
$aStr[] = "девять";
$sRes = '';
for ($i=0; $i<3; $i++){
$sRes += $aStr[$press_kod[$i]] + ' ';
}
9.
TheFaith (02.02.2010 / 05:50)
этот код ничего не меняет
10.
Артур (02.02.2010 / 05:55)
$press_kod нужно перекодировать в строку
11.
ктулху (02.02.2010 / 05:55)
<?
$kod[]=mt_rand(0,9);
$kod[]=mt_rand(0,9);
$kod[]=mt_rand(0,9);
$kod[]=mt_rand(0,9);
$press_kod[] = "ноль";
$press_kod[] = "один";
$press_kod[] = "два";
$press_kod[] = "три";
$press_kod[] = "четыре";
$press_kod[] = "пять";
$press_kod[] = "шесть";
$press_kod[] = "семь";
$press_kod[] = "восемь";
$press_kod[] = "девять";
#echo implode($kod);
for($i=0; $i<strlen(implode($kod)); $i++) {
$kod[$i]=str_replace($kod[$i], $press_kod[$kod[$i]], $kod[$i]);
}
echo "<small>*Защитный код: <b>".implode(' ', $kod)."</b></small><br/>\n";
?>
Немного быдлокодский способ, но в 8 часов утра только это пришло в голову
12.
Артур (02.02.2010 / 05:59)
<?php
$press_kod=mt_rand(100,999);
$press_kod .= " ";
$aStr[] = "ноль";
$aStr[] = "один";
$aStr[] = "два";
$aStr[] = "три" ;
$aStr[] = "четыре";
$aStr[] = "пять";
$aStr[] = "шесть";
$aStr[] = "семь";
$aStr[] = "восемь";
$aStr[] = "девять";
for ($i=0, $sRes = ""; $i<3; $i++){
$sRes .= $aStr[$press_kod[$i]].' ';
}
echo "<small>*Защитный код: <b>".$sRes."</b></small><br/>\n";
?>
На Денвере работает
13.
Артур (02.02.2010 / 06:02)
11.
ShiftBHT, О.о сстрашнооо
14.
TheFaith (02.02.2010 / 06:03)
башка и у меня на денвере заработало
щас проверю дальше его
15.
TheFaith (02.02.2010 / 06:04)
Заипись пасиба Башка
16.
Артур (02.02.2010 / 06:04)
Да незашо, правда не доволен я этим кодом, не знаю почему
17.
TheFaith (02.02.2010 / 06:09)
наверно потому шо массив
$aStr[] = "ноль";
$aStr[] = "один";
$aStr[] = "два";
$aStr[] = "три" ;
$aStr[] = "четыре";
$aStr[] = "пять";
а не
$aStr array(1=>"один", 2=>"два", 3=>"три" и тд);
18.
Артур (02.02.2010 / 06:14)
Нее..
Я про размер кода не говорю. Просто если известны номера ячеек массива символов, то как то не очень хочетя гонять по нему в цикле, в голове сидит что то вроде:
$sRes = aStr[$press_kod[0]].' '.aStr[$press_kod[1]].' '.aStr[$press_kod[2]];
Хотя по сути это одно и то же, только без объявления переменной $i, трех условий $i<3 и трех инкриментов $i++ но зато с плохочитаемым кодом.
Ну либо то, либо это:
<?php
$press_kod=mt_rand(100,999);
$press_kod .= " ";
$aStr[] = "ноль";
$aStr[] = "один";
$aStr[] = "два";
$aStr[] = "три" ;
$aStr[] = "четыре";
$aStr[] = "пять";
$aStr[] = "шесть";
$aStr[] = "семь";
$aStr[] = "восемь";
$aStr[] = "девять";
$sRes = aStr[$press_kod[0]].' '.aStr[$press_kod[1]].' '.aStr[$press_kod[2]];
echo "<small>*Защитный код: <b>".$sRes."</b></small><br/>\n";
?>
19.
TheFaith (02.02.2010 / 06:18)
хм все кажется простым, можна было сообразить, единственно мне не понятно зачем там $press_kod .= " ";
20.
TheFaith (02.02.2010 / 06:20)
хотя этот второй код выбивает синтаксис на мою ни в чем не повинную скобочку }
21.
TheFaith (02.02.2010 / 06:23)
а как мне его профильтровать терь? интвал не прокатит же
22.
Артур (02.02.2010 / 06:24)
Как работает этот скрипт? Он берет первый символ из $press_kod и получает из массива ячейку с соответствующим словом
aStr[$press_kod[0]]
как видишь к первому символу из $press_kod я так же обращаюсь как к массиву, это возможно лишь если в $press_kod находится слово, а так как mt_rand возвращает число, чтобы получить первую цифру этого числа я делаю его словом с помощью автоматического определения типа. Ели к чему угодно добавить символ, пых превратит это "что угодно" в строку. Вот я и превращаю
$press_kod=mt_rand(100,999); // Были числа
$press_kod .= " "; // Теперь строка
И уже теперь могу обращаться к символам $press_kod как к массиву
$press_kod[0] - первая цифра
$press_kod[1] - вторая
$press_kod[2] - третья
23.
Артур (02.02.2010 / 06:26)
20.
TheFaith,там уже скобочек } не должно быть так как цикл исключили.
Кого фильтровать собираешься?
24.
TheFaith (02.02.2010 / 06:30)
пров код фильтровать, когда была каптча был фильтр intval
25.
Артур (02.02.2010 / 06:32)
Копируй переиенную $press_kod
<?php
$nProverca = $press_kod = mt_rand(100,999);
$press_kod .= " ";
$aStr[] = "ноль";
$aStr[] = "один";
$aStr[] = "два";
$aStr[] = "три" ;
$aStr[] = "четыре";
$aStr[] = "пять";
$aStr[] = "шесть";
$aStr[] = "семь";
$aStr[] = "восемь";
$aStr[] = "девять";
for ($i=0, $sRes = ""; $i<3; $i++){
$sRes .= $aStr[$press_kod[$i]].' ';
}
echo "<small>*Защитный код: <b>".$sRes."</b></small><br/>\n";
?>
и уже теперь проверяешь intvalом не $press_kod а $nProverca
26.
TheFaith (02.02.2010 / 06:37)
intval($_POST['nProverca']) так?
27.
TheFaith (02.02.2010 / 06:38)
не понял
28.
Артур (02.02.2010 / 06:40)
26.
TheFaith, вот другой способ
<?php
$press_kod=mt_rand(100,999);
$press_kod .= " ";
$aStr[] = "ноль";
$aStr[] = "один";
$aStr[] = "два";
$aStr[] = "три" ;
$aStr[] = "четыре";
$aStr[] = "пять";
$aStr[] = "шесть";
$aStr[] = "семь";
$aStr[] = "восемь";
$aStr[] = "девять";
for ($i=0, $sRes = ""; $i<3; $i++){
$sRes .= $aStr[$press_kod[$i]].' ';
}
echo "<small>*Защитный код: <b>".$sRes."</b></small><br/>\n";
$press_kod[3] = "";
$press_kod = intval ($press_kod); // Теперь $press_kod является чилом
echo $press_kod;
?>
29.
Артур (02.02.2010 / 06:41)
TheFaith, ну ты записываешь в капчу, а после сверяешь введеное пользователем с интвалом не важно как, любым доступным способом.
26. Можно и так, только без интвала.
30.
TheFaith (02.02.2010 / 06:41)
гг у меня так и число и слова вывелись, не ты скажи мне как отфильтровать буквы
31.
Артур (02.02.2010 / 06:43)
Способ из 25 поста возьми и передав в _POST переменную $nProverca, ее интвалить не надо, в ней содержаться цифры
32.
TheFaith (02.02.2010 / 06:44)
так не надо цыфры я сделал как ты до этого дал мне код чтоб слова выводились, а теперь мне их надо отфильтровать чтоб всякие хацкеры не ламали ее
33.
Артур (02.02.2010 / 06:45)
Ты делаешь капчу, так?
34.
TheFaith (02.02.2010 / 06:48)
ёмаё, кароче, смотри у меня была эта гр***ая каптча, я захотел буквами, с твоей помошью я сделал, а теперь мне надо эти буквы, эту как бы текстовую каптчу отфильтровать ибо текстовые проверочные коды сламываю тока так
35.
Артур (02.02.2010 / 06:49)
Что означает "отфильтровать"? Я не особо понимаю
36.
TheFaith (02.02.2010 / 06:50)
ааа ладно забей, а ты в запросах хорошо разбираешься?
37.
Артур (02.02.2010 / 06:51)
Забил ))
Запросы чего к чему? Запросы разные бывают, в моем понимании "Запрос" ассоциируется с AJAXом
38.
TheFaith (02.02.2010 / 06:53)
тут
http://visavi.net/forum/topic.php?tid=5562&
39.
TheFaith (02.02.2010 / 06:53)
запрос к бд
40.
Артур (02.02.2010 / 06:55)
Знаю хорошо но капаться в 7 утра в чужом ПыхМускуле извини, не буду. Голова не в состоянии )
41.
TheFaith (02.02.2010 / 06:57)
ладн все равно пасиб те )
42.
Артур (02.02.2010 / 07:03)
Незачеё
URL:
https://visavi.net/topics/5644