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:
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
[code]<?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].”; } } ?> 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 "
Mógłbyś użyć funkcji, które służą do sprawdzania takich rzeczy a nie sam if.
Przeanalizuj działanie tego kodu, gdyż aktualnie nie ma sensu to co dopisałeś (ponieważ jest wykonywane poza foreach() czyli tylko raz).
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).
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);
}
}
?>
[code]Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ‘,’ or ‘;’ in /home/users/northangel/public_html/uzytkownicy.php on line 12
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 ;]
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ć.
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:
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]
<?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].";
}
?>
[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
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…?
Czy to rozwiązuje problem?
<?php
$user=array();
foreach(scandir('db') as $file){
if($file!='.' and $file!= '..'){
include('db/'.$file);
}
}
echo "
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:
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 ?
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.”
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.