anonymousПон, 21.02.11, 23:27 |
Здравейте как може да се направи примерно на php нещо от този род ... линк при регистрация да се изиска правилен отговор на въпроса и тогава да се допуска към определена страница... |
joniewalkerВто, 22.02.11, 08:19 | RE: Генериране на произволен въпрос php... ?
” Здравейте как може да се направи примерно на php нещо от този род ... линк при регистрация да се изиска правилен отговор на въпроса и тогава да се допуска към определена страница... „ "You have chosen not to accept the forum rules, so registration cannot continue." И линка ти не показва необходимото. Не разбирам нищо от програмиране, но мисля че се прави набор от 100- 200-... въпроси и се подава случаен. Може и да се комбинират. Ако има и ограничение на броя опити за време и IP , мисля че всичко ще е ок. |
anonymousВто, 22.02.11, 14:03 |
И с един въпрос да е пак ми върши работа защото ми омръзна да се занимавам със спамери от чужбина... поне по този начин ще огранича до някаква степен. Едит: Идейка с пхп тест... редактиран от anonymous на 22.02.11 14:10 |
anonymousВто, 22.02.11, 19:17 |
Един приятел вече ми помогна... ето как става това което искам... <form action="" method="post"> <input name="chsl"> <input name="sbm" type="submit"> </form> <?php $chislo = $_POST['chsl']; $sbm = $_POST['sbm']; if (isset($_POST['sbm'])) { if($chislo == '1') { ?> <META HTTP-EQUIV="refresh" CONTENT="1;URL=http://abv.bg"> <?php } else { exit; } } ?> Когато бъде въведен 1 скрипта препраща към абв.бг когато бъде въведено друго число то се презарежда... |
phrozencrewВто, 22.02.11, 19:40 |
Според мен най-лесно ще е със простичка сесия. Сравняваш дали отговора съвпада със стойност от сесията и ако да пускаш човека, ако не, значи е бот. Като се разтърсих за нещо простико попаднах на една семпла идея, която мнооого ми хареса. Математически формули, които са съставени от малки букви. Супер готина идея: PHP_MathGuard_AntiSpam_v3.3815.rar |
anonymousВто, 22.02.11, 21:39 |
Нед искам да използвам текст за да огранича да могат да се егват хора само от бг или знаещи бг .... а ако са математически изрази или нещо друго всеки ще се регва както сега и да спамят форума ми с реклами.... |
anonymousСря, 23.02.11, 03:32 |
phrozencrew е прав. Без никакво ограничение просто числа... Така наречения защитен код. Успех на ботовете. Ето идеята: Имаш един файл, който да кажем си кръстил identify.php <?php
session_start();
$t=time();
$size_x=200;
$size_y=75;
$rcode=rand(1000,9999);
$codes="$rcode";
$_SESSION['mycode']=$rcode;//поставям в сесиен файл така генерирания код за достъп
$space_per_char=$size_x/(strlen($codes)+1);
$img=imagecreatetruecolor($size_x,$size_y);
$background=imagecolorallocate($img,255,255,255);
$border=imagecolorallocate($img,128,128,128);
$colors[]=imagecolorallocate($img,200,200,200);
$colors[]=imagecolorallocate($img,204,204,204);
$colors[]=imagecolorallocate($img,204,204,204);
$colors[]=imagecolorallocate($img,204,204,204);
$colors[]=imagecolorallocate($img,204,204,204);
imagefilledrectangle($img,1,1,$size_x-2,$size_y-2,$background);
imagerectangle($img,0,0,$size_x-1,$size_y-1,$border);
for($i=0;$i<strlen($codes);$i++)
{
$mycolor=imagecolorallocate($img,0,0,0);
imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space_per_char,50+rand(0,10),$mycolor,'times.ttf',$codes[$i]);
}
for($i=0;$i<1000;$i++)
{
$x1=rand(5,$size_x-5);
$y1=rand(5,$size_y-5);
$x2=$x1-4+rand(0,8);
$y2=$y1-4+rand(0,8);
imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
}
imageantialias($img,true);
imagepng($img);//създава .png картинка
imagedestroy($img);
?> |
Самата ти регистрация, в който си файл искаш, прихващаш събитията: <?php
session_start();
// ......
//тука всякакъв код, който ти трябва за каквото и да е
// и някъде там
if ($_POST[register_new_user]) {
$user = htmlspecialchars($_POST[new_name]);
$pass = md5($_POST[new_pass]);
$pass_again = md5($_POST[new_pass_again]);
$email = htmlspecialchars($_POST[new_email]);
$fullname = htmlspecialchars($_POST[new_fullname]);
$address = htmlspecialchars($_POST[new_address]);
$phone = htmlspecialchars($_POST[new_phone]);
if (strlen($user) < 3)
$txt = 'Поне 3 символа за потребителско име!<br />';
if (strlen($_POST[new_pass]) < 6)
$txt .= 'Поне 6 символа за парола!<br />';
else
if ($pass != $pass_again)
$txt .= 'Паролата и повторно въведената не съвпадат!<br />';
if (strlen($email) < 7 || !eregi("^[a-z0-9]+[a-z0-9_.-]*@[a-z0-9]+[a-z0-9_.-]*.[a-z]{2,4}$", $email))
$txt .= 'Некоректно въведен E-mail адрес!<br />';
if (strlen($fullname) < 12)
$txt .= 'Непълни три имена!<br />';
if (strlen($address) < 18)
$txt .= 'Некоректен адрес за достравка!<br />';
if (strlen($phone) < 7)
$txt .= 'Несъществуващ телефон!<br />';
if ($_POST[new_secure_code] != $_SESSION['mycode'])
$txt .= 'Защитният код не съвпада!';
if ($txt) {
err($txt);
$act = 'new_user';
} else {
$ip = getenv('REMOTE_ADDR');
$at_time = date ("Y-m-d H:i:s");
if (mysql_query("INSERT INTO users (user, pass, email, realname, address, phones, create_time, ip_address, visit_count, access_) VALUES ('$user', '$pass', '$email', '$fullname', '$address', '$phone', '$at_time', '$ip', '0', '0')")) {
$msg = "Здравейте $fullname,<br />Вие се регистрирахте в http://твоя.сайт.com със следните данни:<br />Потребителско име: $user <br />Парола: $_POST[new_pass] <br /><br />За да активирате Вашата регистрация моля, натиснете <a href=http://твоя.сайт.com/index.php?go=active_profile&user=$user&email=$email&sesid=$pass>тук</a>.<br />В случай, че линка не работи моля, копирайте и поставете http://твоя.сайт.com/index.php?go=active_profile&user=$user&email=$email&sesid=$pass в адрес бара на Вашия браузер, след което заредете адреса.";
$msg .= "<br /><br /><br />Zdrawejte $fullname,<br /> Wie se registrirahte w http://твоя.сайт.com sys slednite danni:rnPotrebitelsko ime: $user <br /> Parola: $_POST[new_pass] <br />Za da aktiwirate Washata registraciq molq, natisnete <a href=http://твоя.сайт.com/index.php?go=active_profile&user=$user&email=$email&sesid=$pass>tuk</a>.<br />W sluchaj, che linka ne raboti molq, kopirajte i postawete http://твоя.сайт.com/index.php?go=active_profile&user=$user&email=$email&sesid=$pass w adres bara na Washiq brauzer, sled koeto zaredete adresa.";
send_to_user($msg, $email, 'Успешна регистрация!');
ok('Вашата регистрация премина успешно.');
$act = 1;
$output = '<span style="color:#ff0000">Регистрация:</span><br />Вашата регистрация премина успешно.<br /><br />На посочения от Вас E-mail адрес бе изпратено писмо, което съдържа линк(push-link) за да активирате акаунта си.<br /><br /><br />Благодарим Ви!';
} else {
err('Възникна грешка при регистрацията!<br/><br />Моля, опитайте отново.');
$act = 'new_user';
}
}
}
//....
//още о още код според нуждите ти
?> |
От последния файл обърни внимание на този ред: if ($_POST[new_secure_code] != $_SESSION['mycode'])
$txt .= 'Защитният код не съвпада!'; |
Точно тука проверяваш дали защитния код е правилно въведен или не... Формата ти за регистрация: <?php
session_start();
/* **какъвто си искаш код според потребностите ти** */
$output = '<FORM action="?go=register_new_user" method="post">
<span style="color:#ff0000">Регистрация:</span><br />
<span style="color:#0000ff; font-size:10px">Всички полета са задължителни!</span><br /><br />
<table cellpadding="3" cellspacing="7" width="636">
<tr>
<td>Потребителско име:</td>
<td><input type="text" name="new_name" value="' . stripslashes($_POST[new_name]) . '" onkeyup="test_('register.php', this.name, this.value)" style="width:230px" /></td>
<td width="200"><span id="new_name" style="font-size:10px">За вход в сайта.</span></td>
</tr>
<tr>
<td>Парола:</td>
<td><input type="password" name="new_pass" onkeyup="check_pass(this.value, this.name)" style="width:230px" /></td>
<td width="200"><span id="new_pass" style="font-size:10px">За вход в сайта.</span></td>
</tr>
<tr>
<td>Повтори паролата:</td>
<td><input type="password" name="new_pass_again" onkeyup="check_(this.form.new_pass.value, this.value, this.name)" style="width:230px" /></td>
<td width="200"><span id="new_pass_again" style="font-size:10px">За вход в сайта.</span></td>
</tr>
<tr>
<td>E-mail адрес:</td>
<td><input type="text" name="new_email" value="' . stripslashes($_POST[new_email]) . '" onkeyup="test_('register.php', this.name, this.value)" style="width:230px" /></td>
<td width="200"><span id="new_email" style="font-size:10px">За кореспонденция.</span></td>
</tr>
<tr>
<td>Трите Ви имена:</td>
<td><input type="text" name="new_fullname" value="' . stripslashes($_POST[new_fullname]) . '" onkeyup="test_('register.php', this.name, this.value)" style="width:230px" /></td>
<td width="200"><span id="new_fullname" style="font-size:10px">За доставка.</span></td>
</tr>
<tr>
<td>Адрес за доставка:</td>
<td><textarea name="new_address" onkeyup="test_('register.php', this.name, this.value)" style="overflow:hidden; border:1px solid #071507; background-color:#49D5C4; width:230px; height:70px">' . stripslashes($_POST[new_address]) . '</textarea></td>
<td width="200"><span id="new_address" style="font-size:10px">За доставка.</span></td>
</tr>
<tr>
<td>Телефон/и/ за връзка:</td>
<td><input type="text" name="new_phone" value="' . stripslashes($_POST[new_phone]) . '" onkeyup="test_('register.php', this.name, this.value)" style="width:230px" /></td>
<td width="200"><span id="new_phone" style="font-size:10px">За кореспонденция.</span></td>
</tr>
<tr>
<td>Защитен код:</td>
<td><img src="identify.php" width="80" border="1" style="float:left; height:16px" /> <input type="text" name="new_secure_code" style="width:140px" /></td>
<td width="200"> </td>
</tr>
</table>
<br />
<input type="submit" name="register_new_user" class="bt" value=" Регистрирай ме " />
</FORM>';
/* **Ако това не е предпоследния ти ред във файла спокойно може да продължиш да си дописваш кода** */
?> |
Ето как се вика и файла, който ти създава произволно число от 1000 до 9999: <img src="identify.php" width="80" border="1" style="float:left; height:16px" /> <input type="text" name="new_secure_code" style="width:140px" /> |
Съдържа се в самата форма за регистрация, както сам виждаш :) Формата за регистрация е примерна. Вкарваш си в твоята каквото искаш потребителите да попълват. Проверката е също примерна. В този случай отговаря от до на въведените данни от потребителя. П.С.: Създаването на произволно число от 4 цифри съм го писал в момента. Възможно е да има и грешка. Не съм го тествал. Единственото за което трябва да си напомняш от този файл, е че трябва да качиш и фонта/шрифта, който използваш в същата директория, в която е и файла за създаване на този цифров код примесен с малко шум. В случая съм ползвал 'times.ttf'. imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space_per_char,50+rand(0,10),$mycolor,'times.ttf',$codes[$i]); |
|