Status gadu-gadu na stronie www


(Darom82) #1

Mam do Was takie trzy sprawy.

  1. Co zrobić żeby status gadu-gadu na stronie www wyświetlał się tak, że klikne w czyjś numer to otworzy mi się okienko rozmowy gadu-gadu ? - obecnie mam tak to zrobione:

    [/code]

    1. Gdy ktoś przy rejestracji nie poda swojego numeru gadu-gadu to żeby się nie wyświetlały takie puste obrazki jak teraz mam tutaj: http://www.northangel.is.net.pl/uzytkownicy.php

    Jak to zrobić ?

    1. Posiadam taki skrypt rejestracji i jak zrobić takie ograniczenie przy rejestracji nazwy użytkownika, że długość musi być od 3 do 20 znaków ? żeby to u mnie przy rejestracji wyglądało tak jak tutaj:

    Tak wygląda mój skrypt:

    logowanie.php

\<?php session\_start(); if(isset($\_SESSION['login'])){ echo "Jesteś już zalogowany jako $\_SESSION[login]. [Wyloguj](%5C)"; }elseif(!isset($\_POST['nazwa']) or !isset($\_POST['haslo'])){ ?\> Nawa: Hasło: \<?php }else{ $dir=md5($\_POST['nazwa']); if(file\_exists("db/$dir.php")){ include("db/$dir.php"); } if(!isset($user[$\_POST['nazwa']]) or $user[$\_POST['nazwa']]['password']!=md5($\_POST['haslo'])){ echo 'Niepoprawna nazwa użytkownika i/lub hasło.'; }else{ $\_SESSION['login']=$\_POST['nazwa']; echo "Zostałeś zalogowany jako $\_SESSION[login]."; } } ?\>
**rejestracja.php**
    <?php

session_start();

if(!isset($_POST['nazwa']) and !isset($_POST['haslo']) and !isset($_POST['mail']) and !isset($_POST['gg'])){

?>

Nawa:


Hasło:


E-mail:


Numer Gadu-Gadu:





<?php

}else{

   $nazwa=addslashes($_POST['nazwa']);

   $dir=md5($_POST['nazwa']);

   $haslo=md5($_POST['haslo']);

   $mail=addslashes($_POST['mail']);

   $gg=addslashes($_POST['gg']);


   if(file_exists("db/$dir.php")){

      die('Podana nazwa użytkownika jest zajęta.');

   }

   $handle=fopen("db/$dir.php",'w+');

   fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail','gg'=>'$gg'); ?>");

   fclose($handle);

   $_SESSION['login']=$_POST['nazwa'];

   echo "Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa].";

//mail($_POST['mail'],'Zostałeś zarejestrowany','Jakaś treść');

}

?>
**uzytkownicy.php**
    <?php

foreach(scandir('db') as $file){

   if($file!='.' and $file!= '..'){

      include('db/'.$file);

   }

}

echo "
| $name | [![\"\"](%5C) ](%5C)[![%5C](%5C)](%5C) |\n"; ?

wyloguj.php
[code]?php session_start(); if(!isset($_SESSION['login'])){ echo 'Nie jesteś zalogowany.'; }else{ unset($_SESSION['login']); echo 'Zostałeś wylogowany.'; } ?

Prosze o pomoc w tej sprawie.


(Grzesie K) #2
  1. http://info.gadu-gadu.pl/faq/18

  2. w php instrukcja warunkowa z np. isset() lub empty()

  3. z wyglądem chyba sobie poradzisz, a długość możesz sprawdzić przy pomocy strlen() w php i ewentualnie dodatkowo sprawdzanie w js


(Darom82) #3

Grzesie1k co do 1 i 2 to zrobilem to tak:

<?php if ($data['gg']) {

?><?php } ?>[/code]


W pliku uzytkownicy.php dalem to tak i nie dziala :(

[code]<?php foreach(scandir('db') as $file){ if($file!='.' and $file!= '..'){ include('db/'.$file); } } echo "

| $name | [\"\"](%5C) ](%5C)[![%5C](%5C)](%5C) |\n"; ? ?php if ($data['gg']) { ? ![status.asp?id=?php } ?Natomiast co do 3 to kombinowalem tak:

if(strlen($_POST['nazwa']) = 3 strlen($_POST['nazwa']) = 20) {

// login poprawny

} else {

// login niepoprawny

}[/code[

I w pliku rejestracja.php wyglada to tak]?php

session_start();

if(!isset($_POST['nazwa']) and !isset($_POST['haslo']) and !isset($_POST['mail']) and !isset($_POST['gg'])){

if(strlen($_POST['nazwa']) = 3 strlen($_POST['nazwa']) = 20) {

// login poprawny

} else {

// login niepoprawny

}

?

Nawa:


Hasło:


E-mail:


Numer Gadu-Gadu:





?php

}else{

   $nazwa=addslashes($_POST['nazwa']);

   $dir=md5($_POST['nazwa']);

   $haslo=md5($_POST['haslo']);

   $mail=addslashes($_POST['mail']);

   $gg=addslashes($_POST['gg']);


   if(file_exists("db/$dir.php")){

      die('Podana nazwa użytkownika jest zajęta.');

   }

   $handle=fopen("db/$dir.php",'w+');

   fwrite($handle,"?php \$user['$nazwa']=array('password'='$haslo','mail'='$mail','gg'='$gg'); ?");

   fclose($handle);

   $_SESSION['login']=$_POST['nazwa'];

   echo "Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa].";

//mail($_POST['mail'],'Zostałeś zarejestrowany','Jakaś treść');

}

?

Ale to mi tez nie dziala :frowning:

Mozesz mi pomoc jakos ?


(Grzesie K) #4
  1. Mógłbyś użyć funkcji, które służą do sprawdzania takich rzeczy a nie sam if.

2.

Przeanalizuj działanie tego kodu, gdyż aktualnie nie ma sensu to co dopisałeś (ponieważ jest wykonywane poza foreach() czyli tylko raz).

  1. Co masz w miejscu //login niepoprawny i //login poprawny gdyż to co masz teraz wygląda poprawnie, poza tym że dopisałeś to w nieodpowiednim miejscu (spójrz na if linijkę wyżej).

(Darom82) #5

Grzesie1k niemam pomyslu juz jak to zrobic, jedynie w pliku uzytkownicy.php probowalem tak:

Mozesz mi pomoc zrobic to tak zeby bylo dobrze ? czyli zeby bylo tak, gdy ktos nie poda przy rejestracji numeru gadu gadu to zeby nie bylo pustych ikonek, a gdy ktos poda swój numer gadu gadu, to po kliknieciu w jego numer otwieralo sie okienko z rozmowa ?

<?php

foreach(scandir('db') as $file) {

    if($file!='.' and $file!= '..') {

        include('db/'.$file);

    }

}

?>

| <?php echo $name; ?> | ico_mail.gif?php if ($data['gg']) {? status.asp?id=?php } ? |Ale to mi nie dziala bo wyrzuca blad:
[code]Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in /home/users/northangel/public_html/uzytkownicy.php on line 12


(Drobok) #6

Nie męcz tak tych tagów <?php ?> :stuck_out_tongue:

Poza tym chcesz zrobić takie coś jak takowa ikonka to:

echo '.$data['gg'].'">.$data['gg'].'&styl=1">'; [/code]

A co do ikonki brak gg sprawdzasz czy numer jest pusty za pomocą emply

[code=php]if(!empty($data['gg'])) 
'.$data['gg'].'".$data['gg'].'styl=1"';
"ni ma"; 


(Grzesie K) #7

#drobok ,,Denerwują mnie ludzie powtarzający moją poradę jeszcze raz pod moim postem ..."

Usuń ten cytat z podpisu lub nie powtarzaj cudzych postów. :slight_smile:

#Darom82 Tak powinien wyglądać ten fragment kodu:

echo "

| $name | \"\""; if($data['gg']){ echo "\"\""; } echo " |\n";[/code]


(Drobok) #8

Powiedź mi chociaż, co powtórzyłem po tobie. Bo ja widzę tylko nazwę funkcji, którą imo dość trudno jest zastąpić bardziej optymalnym rozwiązaniem ;]

Tobie się nie chciało nawet przykładu dać, widząc jak autor tematu kaleczy php a jak dałem ja to ty już musisz dać rozwiązanie problemu, bo niby będziesz lepszy.

edit btw twoje używanie ukośnika przed każdym cudzysłowem jest bardzo nie optymalne. O wiele lepiej jest mieć echo 'asdasf'.$zmianna.'asf""""""'; niż echo "asdasd$zmienna\"\"\"\"\"\"; Pierwszy zapis drastycznie poprawia czytelność względem drugiego. Co w wypadku linków w kodzie dość sporo daje ;]


(Grzesie K) #9

Co do ukośników to zdaję sobie sprawę z wydajności (lecz są zauważalne jedynie przy dużej liczbie powtórzeń) ale co do czytelności to zależy już kto czyta. Podałem nazwy funkcji zamiast całych przykładów, gdyż w internecie jest mnóstwo tego typu tematów oraz przykładów na php.net. Co po mnie powtórzyłeś? Praktycznie wszystko wzbogacając jedynie w proste przykłady, lecz być może masz rację gdyż autor tematu faktycznie kaleczy php. Bynajmniej niczego się nie nauczy, jeżeli sam nie zacznie szukać.


(Darom82) #10

drobok i Grzesie1k dzięki Panowie za pomoc i jeszcze został ten jeden problem z ograniczeniem nazwy użytkownika przy rejestracji, by długość nazwy użytkownika musiała być od 3 do 20 znaków. Jak to zrobić ?

Żeby u mnie było tak:

klik.png

Plik logowanie.php wygląda tak:

logowanie.php

?php

session_start();

if(isset($_SESSION['login'])){

   echo "Jesteś już zalogowany jako $_SESSION[login]. Wyloguj";

}elseif(!isset($_POST['nazwa']) or !isset($_POST['haslo'])){

?

Nawa:


Hasło:





?php

}else{

   $dir=md5($_POST['nazwa']);

   if(file_exists("db/$dir.php")){

      include("db/$dir.php");

   }

   if(!isset($user[$_POST['nazwa']]) or $user[$_POST['nazwa']]['password']!=md5($_POST['haslo'])){

      echo 'Niepoprawna nazwa użytkownika i/lub hasło.';

   }else{

      $_SESSION['login']=$_POST['nazwa'];

      echo "Zostałeś zalogowany jako $_SESSION[login].";

   }

}

?[/code]

Bardzo prosze Was o pomoc w tej sprawie.


(Grzesie K) #11

Chyba chodziło o plik rejestracja.php

<?php

session_start();

if(!isset($_POST['nazwa']) and !isset($_POST['haslo']) and !isset($_POST['mail']) and !isset($_POST['gg'])){

?>

Nawa:


Hasło:


E-mail:


Numer Gadu-Gadu:





<?php

}else{

   $nazwa=addslashes($_POST['nazwa']);

   $dir=md5($_POST['nazwa']);

   $haslo=md5($_POST['haslo']);

   $mail=addslashes($_POST['mail']);


   if(file_exists("db/$dir.php")){

      die('Podana nazwa użytkownika jest zajęta.');

   }elseif(strlen($_POST['nazwa'])<=3 or strlen($_POST['nazwa'])>20){

      die('Długość nazwy użotkownika musi być od 3 do 20 znaków.');

   }elseif(empty($_POST['haslo'])){

      die('Hasło nie może być puste.');

   }elseif(!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/", $_POST['mail'])){

      die('Adres E-mail jest niepoprawny.');

   }elseif(!is_numeric($_POST['gg'])){

      die('Numer GG jest niepoprawny.');

   }


   $handle=fopen("db/$dir.php",'w+');

   fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail','gg'=>'$gg'); ?>");

   fclose($handle);

   $_SESSION['login']=$_POST['nazwa'];

   echo "Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa].";

}

?>

(Darom82) #12

Grzesie1k niestety podczas rejestracji nie wyświetla mi tego:

Długość nazwy użytkownika musi być od 3 do 20 znaków.

http://www.northangel.is.net.pl/rejestracja.phpWięc nie wiem czy mi to działa, podejżewam że nie :frowning: A po drugie gdy poczas rejestracji podam numer gadu-gadu to później na liście użytkowników nie wyświetla mi w ogóle słoneczka gadu-gadu ze statusem :(http://www.northangel.is.net.pl/uzytkownicy.php uzytkownicy.php

<?php

foreach(scandir('db') as $file){

   if($file!='.' and $file!= '..'){

      include('db/'.$file);

   }

}

echo "

| $name | \"\""; if($data['gg']){ echo "\"\""; } echo " |\n";[/code] [b]rejestracja.php[/b]
[code]?php session_start(); if(!isset($_POST['nazwa']) and !isset($_POST['haslo']) and !isset($_POST['mail']) and !isset($_POST['gg'])){ ? Nawa: Hasło: E-mail: Numer Gadu-Gadu: ?php }else{ $nazwa=addslashes($_POST['nazwa']); $dir=md5($_POST['nazwa']); $haslo=md5($_POST['haslo']); $mail=addslashes($_POST['mail']); if(file_exists("db/$dir.php")){ die('Podana nazwa użytkownika jest zajęta.'); }elseif(strlen($_POST['nazwa'])=3 or strlen($_POST['nazwa'])20){ die('Długość nazwy użytkownika musi być od 3 do 20 znaków.'); }elseif(empty($_POST['haslo'])){ die('Hasło nie może być puste.'); }elseif(!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $_POST['mail'])){ die('Adres E-mail jest niepoprawny.'); }elseif(!is_numeric($_POST['gg'])){ die('Numer GG jest niepoprawny.'); } $handle=fopen("db/$dir.php",'w+'); fwrite($handle,"?php \$user['$nazwa']=array('password'='$haslo','mail'='$mail','gg'='$gg'); ?"); fclose($handle); $_SESSION['login']=$_POST['nazwa']; echo "Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa]."; } ?
Natomiast gdy wykasuje liste użytkowników i nie mam na tej liście żadnego zarejestrowanego użytkownika to wtedy zamiast listy wyrzuca mi błąd taki:

Warning: Invalid argument supplied for foreach() in /home/users/northangel/public_html/uzytkownicy.php on line 8

Bardzo prosze o pomoc w tej sprawie.


(Grzesie K) #13
  1. Ten tekst się wyświetla tylko w tedy, gdy dane przesłane przez formularz nie spełniają tych wymogów. Chyba o to chodziło? Być może źle skopiowałeś lub coś podobnego...?

  2. Czy to rozwiązuje problem?

    <?php

    $user=array();

    foreach(scandir('db') as $file){

    if($file!='.' and $file!= '..'){

      include('db/'.$file);

    }

    }

    echo "

| $name | \"\" | "; if($data['gg']){ echo "\"\""; } echo " |\n"; ?[/code]


(Darom82) #14

Grzesie1k Chodziło mi żeby ten napis "Długość nazwy użytkownika musi być od 3 do 20 znaków." był widoczny też cały czas podczas rejestracji.

Tak jak widać na tym screenie poniżej:

klik.png

A po drugie ten kod co mi podałeś też nie działa, ponieważ nie wyświetla słoneczka gadu-gadu (statusów gadu-gadu: dostępny, nie dostępny, zaraz wracam itd) - Możesz mi jakoś pomóc ?

http://www.northangel.is.net.pl/uzytkownicy.php


(Grzesie K) #15

Mały błąd:

fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail','gg'=>'$gg'); ?>");

a powinno być

fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail','gg'=>'$_POST[gg]'); ?>");

A co do tego tekstu to chcesz uzyskać dokładnie taki efekt jak na obrazku? O to chodzi?


(Darom82) #16

Grzesie1k ok już działa tylko powiedz mi prosze jeszcze jak zrobić ten napis pod nazwą użytkownika ? tak jak ci pokazałem na obrazku.

Żeby nie było tak jak teraz jest, tylko żeby było tak że jak ktoś poda nazwe użytkownika krótszą niż 3 znaki to żeby pod nazwą użytkownika pojawił się napis czerowny typu: "Wprowadzona przez Ciebie nazwa użytkownika jest zbyt krótka."

A gdy nazwa będzie miała więcej niż 20 znaków to wtedy żeby pojawił się pod nazwą użytkownika napis czerwony typu "Wprowadzona przez Ciebie nazwa użytkownika jest za długa."

Możesz mi pomoć to zrobić ? Bardzo Cie prosze.


(Grzesie K) #17
<?php

session_start();

function formularz(){

	global $_POST,$e;

	echo '';

	if(isset($e[0])){

		echo "
\n";

	}

	echo 'Nawa:';

	echo '
	if(!empty($_POST['nazwa'])){

		echo " value=\"$_POST[nazwa]\"";

	}

	echo " />
\n";

	if(isset($e['nazwa'])){

		echo "
\n";

	}

	echo 'Hasło:';

	echo '
'."\n";

	if(isset($e['haslo'])){

		echo "
\n";

	}

	echo 'E-mail:';

	echo '
	if(!empty($_POST['mail'])){

		echo " value=\"$_POST[mail]\"";

	}

	echo " />
\n";

	if(isset($e['mail'])){

		echo "
\n";

	}

	echo 'Numer Gadu-Gadu:';

	echo '
	if(!empty($_POST['gg'])){

		echo " value=\"$_POST[gg]\"";

	}

	echo " />
\n";

	if(isset($e['gg'])){

		echo "\n";

}

if(isset($_POST['nazwa'])){

	if(empty($_POST['nazwa']) or empty($_POST['haslo']) or empty($_POST['mail']) or empty($_POST['gg'])){

		$e[]='Niewypelniles wszystkich pol formularza.';

	}else{

		$dir=md5($_POST['nazwa']);

		if(file_exists("db/$dir.php")){

		  $e['nazwa']='Podana nazwa użytkownika jest zajęta.';

	   }elseif(strlen($_POST['nazwa'])<=3 or strlen($_POST['nazwa'])>20){

		  $e['nazwa']='Długość nazwy użytkownika musi być od 3 do 20 znaków.';

	   }

	   if(empty($_POST['haslo'])){

		  $e['haslo']='Hasło nie może być puste.';

	   }

	   if(!preg_match("/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/", $_POST['mail'])){

		  $e['mail']='Adres E-mail jest niepoprawny.';

	   }

	   if(!is_numeric($_POST['gg'])){

		 $e['gg']='Numer GG jest niepoprawny.';

	   }

	}


   if(!isset($e)){

		$nazwa=addslashes($_POST['nazwa']);

		$haslo=md5($_POST['haslo']);

		$mail=addslashes($_POST['mail']);


	   $handle=fopen("db/$dir.php",'w+');

	   fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail','gg'=>'$_POST[gg]'); ?>");

	   fclose($handle);

	   $_SESSION['login']=$_POST['nazwa'];

	   die("Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa].");

	}else{

		formularz();

	}

}else{

	formularz();

}

?>[/code]

(Darom82) #18

Teraz już fajnie działa. A Czy mógłbyś mi jeszcze powiedzieć jak zrobić sobie w pliku użytkownicy.php tak, żeby mieć takie tabelki w których będą dane.

Przykładowo tabelka taka jak jest Tutaaj

Będzie sobie tabelka:

Lp. Użytkownicy Miejscowość Adres Emal Gadu-Gadu

I w każdej kolumnie będą odpowiednie dane np.

  1. Darom82 Poznań darom@vp.pl 3436688

Możesz mi pomóc takie coś zrobić ?


(Grzesie K) #19

Po pierwsze musisz posiadać te dane czyli poprosić o nie przy rejestracji :slight_smile: Spsób wyświetlenie nie będzie się różnił od tego.


(Darom82) #20

Przy rejestracji właśnie to zrobiłem w taki sposób: http://www.northangel.is.net.pl/rejestracja.php

rejestracja.php

<?php

session_start();

function formularz(){

   global $_POST,$e;

   echo '';

   if(isset($e[0])){

      echo "
\n";

   }

   echo 'Nawa:';

   echo '
   if(!empty($_POST['nazwa'])){

      echo " value=\"$_POST[nazwa]\"";

   }

   echo " />
\n";

   if(isset($e['nazwa'])){

      echo "
\n";

   }

   echo 'Hasło:';

   echo '
'."\n";

   if(isset($e['haslo'])){

      echo "
\n";

   }

   echo 'E-mail:';

   echo '
   if(!empty($_POST['mail'])){

      echo " value=\"$_POST[mail]\"";

   }

   echo " />
\n";

   if(isset($e['mail'])){

      echo "
\n";

   }

   echo 'Numer Gadu-Gadu:';

   echo '
   if(!empty($_POST['gg'])){

      echo " value=\"$_POST[gg]\"";

   }

   echo " />
\n";

   if(isset($e['gg'])){

      echo "\n";

}

if(isset($_POST['nazwa'])){

   if(empty($_POST['nazwa']) or empty($_POST['haslo']) or empty($_POST['mail']) or empty($_POST['gg']) or empty($_POST['skad'])){

      $e[]='Niewypelniles wszystkich pol formularza.';

   }else{

      $dir=md5($_POST['nazwa']);

      if(file_exists("db/$dir.php")){

        $e['nazwa']='Podana nazwa użytkownika jest zajęta.';

      }elseif(strlen($_POST['nazwa'])<=3 or strlen($_POST['nazwa'])>20){

        $e['nazwa']='Długość nazwy użytkownika musi być od 3 do 20 znaków.';

      }

      if(empty($_POST['haslo'])){

        $e['haslo']='Hasło nie może być puste.';

      }

      if(!preg_match("/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/", $_POST['mail'])){

        $e['mail']='Adres E-mail jest niepoprawny.';

      }

      if(!is_numeric($_POST['gg'])){

       $e['gg']='Numer GG jest niepoprawny.';

      }

   }


   if(!isset($e)){

      $nazwa=addslashes($_POST['nazwa']);

      $haslo=md5($_POST['haslo']);

      $mail=addslashes($_POST['mail']);


      $handle=fopen("db/$dir.php",'w+');

      fwrite($handle,"<?php \$user['$nazwa']=array('password'=>'$haslo','mail'=>'$mail','gg'=>'$_POST[gg]','skad'=>'$_POST[skad]'); ?>");

      fclose($handle);

      $_SESSION['login']=$_POST['nazwa'];

      die("Zostałeś zarejestrowany i automatycznie zalogowany jako $_POST[nazwa].");

   }else{

      formularz();

   }

}else{

   formularz();

}

?>[/code]


Natomiast w pliku [b]uzytkownicy.php[/b] http://www.northangel.is.net.pl/uzytkownicy.php zrobiłem sobie to tak:

[code]<?php $user=array(); foreach(scandir('db') as $file){ if($file!='.' and $file!= '..'){ include('db/'.$file); } } echo "

| $name | \"\" | "; if($data['gg']){ echo "\"\""; } if($data['skad']){ echo "$data[skad]"; } echo " |\n"; ?

Możesz mi w tym jakoś pomóc żeby to było to w takich tabelkach ?