Помогите с массивом и числом

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)
башка и у меня на денвере заработалоsmile щас проверю дальше его

15. TheFaith (02.02.2010 / 06:04)
Заипись пасиба Башка smile

16. Артур (02.02.2010 / 06:04)
Да незашо, правда не доволен я этим кодом, не знаю почему

17. TheFaith (02.02.2010 / 06:09)
наверно потому шо массив
$aStr[] = "ноль";   
$aStr[] = "один";   
$aStr[] = "два";   
$aStr[] = "три" ;   
$aStr[] = "четыре";   
$aStr[] = "пять"; 
а не
$aStr array(1=>"один", 2=>"два", 3=>"три" и тд);
D

18. Артур (02.02.2010 / 06:14)
Нее.. smile Я про размер кода не говорю. Просто если известны номера ячеек массива символов, то как то не очень хочетя гонять по нему в цикле, в голове сидит что то вроде:
$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)
а как мне его профильтровать терь? интвал не прокатит жеsmile

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)
Что означает "отфильтровать"? Я не особо понимаю smile

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