Защо дава грешка

vasilev5

Registered
къде греша в този код
if (ereg('^([8-12_])$',$klas))
{
echo "<center>Íåêîðåêòíà klas!Ìîëÿ îïèòàéòå <a href=\"?d=dir&c=login&p=hregister\">îòíîâî!</a></center>";

exit;
 
vasilev5 каза:
къде греша в този код
if (ereg('^([8-12_])$',$klas))
{
echo "<center>Íåêîðåêòíà klas!Ìîëÿ îïèòàéòå <a href="?d=dir&c=login&p=hregister">îòíîâî!</a></center>";

exit;
ereg вече не се ползва
виж тук има пример как да я замениш
http://takien.com/513/how-to-fix-function-eregi-is-deprecated-in-php-5-3-0.php
 
в целия скрипт има много f (ereg, които работят за име, парола и поща, когато се опитах да направя и за клас започна да ми дава грешка
 
Warning: ereg() [function.ereg]: REG_ERANGE in /home/limi/public_html/dir/login/register.php on line 36
line 36 e точно това::
if (ereg('^([ 8-12])$',$klas))
 
vasilev5 каза:
Warning: ereg() [function.ereg]: REG_ERANGE in /home/limi/public_html/dir/login/register.php on line 36
line 36 e точно това::
if (ereg('^([ 8-12])$',$klas))
дай целия код да го видим
 
<?php
$name=$_POST[name];
$username=$_POST[username];
$klas=$_POST[klas];
$password=$_POST[password];
$email=$_POST;

$name=htmlspecialchars($name);
$username=htmlspecialchars($username);
$password=htmlspecialchars($password);
$email=htmlspecialchars($email);
$klas=htmlspecialchars($klas);
$db_conn = mysql_connect("$host", "$dbusername", "$dbpassword")
or die("unable to connect to the database");
mysql_select_db("$db", $db_conn)
or die("unable to select the database");
$checkname = mysql_query("SELECT username FROM users WHERE username='$username'");
$checkklas= mysql_query("SELECT username FROM klas WHERE klas='$klas'");
$checkname= mysql_num_rows($checkname);
$checkemail = mysql_query("SELECT email FROM users WHERE email='$email'");
$checkemail = mysql_num_rows($checkemail);
if($username!=""|$password!=""|$email!="")
{
if (ereg('^([ a-zA-Z0-9_\-\.])$',$username))
{
echo "<center>Íåêîðåêòíî ïîòðåáèòåëñêîòî èìå!Ìîëÿ îïèòàéòå <a href=\"?d=dir&c=login&p=hregister\">îòíîâî!</a></center>";

exit;
}
if (ereg('^([ a-zA-Z0-9_\-\.])$',$password))
{
echo "<center>Íåêîðåêòíà ïàðîëà!Ìîëÿ îïèòàéòå <a href=\"?d=dir&c=login&p=hregister\">îòíîâî!</a></center>";

exit;
}
if (ereg('^([ 8-12])$',$klas))
{
echo "<center>Íåêîðåêòíà klas!Ìîëÿ îïèòàéòå <a href=\"?d=dir&c=login&p=hregister\">îòíîâî!</a></center>";

exit;
}
if (!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$_POST['email']))
{
echo "<center>Íåêîðåêòåí åìàéë!Ìîëÿ îïèòàéòå <a href=\"?d=dir&c=login&p=hregister\">îòíîâî!</a></center>";

exit;
}
if ($checkemail>0|$checkname>0)
{
echo "Ïîòðåáèòåëñêîòî èìå èëè å-ìàéëà ñà çàåòè";
}
else
{
$password = ($password);
mysql_query("INSERT users (name, username, password, email, klas, level, style) VALUES ( '$name', '$username', '$password', '$email', '$klas', '1', 'obiknovenen')");

echo '<table align="center"><tr><td align="center">Ðåãèñòðàöèÿòà å óñïåøíà! <a href="?d=dir&c=login&p=hlogin">âëåçòå</a></td></tr></table>';
}
}
else
{
echo "<center>Íå ñòå ïîïúëíèëè çàäúëæèòåëíèòå ïîëåòà.Ìîëÿ îïèòàéòå <a href=\"?d=dir&c=login&p=hregister\">îòíîâî!</a></center>";
}
?>
 
vasilev5 каза:
Warning: ereg() [function.ereg]: REG_ERANGE in /home/limi/public_html/dir/login/register.php on line 36
line 36 e точно това::
if (ereg('^([ 8-12])$',$klas))
Ти правиш това - проверка дали $klass е в следния формат:

интервал, цифра от 8 до 1, или 2.


Което всъщност няма как да не даде грешка :)

Предполагам че искаш да провериш дали числото е по-голямо или равно на 8 и по-малко или равно на 12. Така че направи така:

PHP:
if( $klass >= 8 && $klass <= 12) {
   //kod
}
Или ако не е това, кажи какво искаш да провериш, за да знаем какъв регулярен израз ти трябва.
 
по този начин кодът работи, но в базата се записват различни други знаци вместо класа - тирета, шпации, точки, а аз искам да е конкретно от 8 до 12 и задължително да изисква запис на класа
 
vasilev5 каза:
по този начин кодът работи, но в базата се записват различни други знаци вместо класа - тирета, шпации, точки, а аз искам да е конкретно от 8 до 12 и задължително да изисква запис на класа
Просто правиш проверка дали $klass е int:
PHP:
if( is_int($klass) && $klass >= 8 && $klass <= 12) {
   //kod
}
 
vasilev5 каза:
Работи, но може да записва интервал и после не показва класа
Преди проверката сложи
Код:
 $klass = trim($klass);
, за да отстраниш всички интервали, нови редове и... абе всичко, описано тук

uphero каза:
ereg вече не се ползва
Да, след php 5.3 се ползва preg_match, но ако ти е старо php-то може и да работи :D

http://bg2.php.net/ereg каза:
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
 
vasilev5 каза:
а как ще стане с preg_match
По същия начин, просто заместваш ereg с preg_match. Ако толкова не ти е ясно, прочети в php net: http://php.net/preg_match
 
anonimen каза:
Преди проверката сложи
Код:
 $klass = trim($klass);
, за да отстраниш всички интервали, нови редове и... абе всичко, описано тук


а след като $klas трябва да е число, най-добре:

PHP:
$klas = (int) $_POST['klas'];
 

Back
Горе