Witam,
Potrzebuje napisać kawałek kodu, żeby w prostym shoutboxie każdego nowego użytkownika jego wiadomość kolorowało na inny kolor. Wytłumaczę to trochę łopatologicznie, żeby wszytko było jasne. Chodzi o to, że na stronie wyświetla mi się aktualnie 5 ostatnich wiadomości, więc załóżmy, że na jednej przeglądarce wejdę wpisze Janusz i on dostanie jakiś kolor, który zostanie aktualnie do niego przypisany na tej przeglądarce, na innej wejdę wpisze np. nick Marek i on dostanie inny.
Myślę, że wystarczy właśnie 5 kolorów, żeby z nich kolorowało poszczególnych użytkowników i ich wiadomości.
$rezultat = mysqli_query($polaczenie, "SELECT * FROM posty") or die ("Błąd zapytania do bazy: $dbname"); print "<TABLE CELLPADDING=5 BORDER=1>"; print "<TR><TD>ID</TD><TD>Nick</TD><TD>Data</TD><TD>Message</TD></TR>\n"; ?> <form method="POST" action="dodaj.php"> <br> Nick:<input type="text" name="user" value="<?php if (http://www.php.net/isset($_COOKIE['Nick'])) { http://www.php.net/echo $_COOKIE['Nick']; } ?> "; maxlength="10" size="10"><br> Post:<input type="text" name="post" maxlength="90" size="90"> <br> <input type="submit" value="Send"/> </form> Posty: <br> <?php $rezultat = mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat FROM posty ORDER BY idk DESC LIMIT 5"); while ($wiersz = mysqli_fetch_array ($rezultat)) { $idk = $wiersz[0]; $nick = $wiersz[1]; $data = $wiersz[2]; $komunikat = $wiersz[3]; mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat FROM posty"); http://www.php.net/print "<TR><TD>$idk</TD><TD>$nick</TD><TD>$data</TD><TD>$komunikat</TD></TR>\n"; } http://www.php.net/print "</TABLE>"; mysqli_close($polaczenie); ?>
Przypisz sesje z kolorem dla użytkownika.
Zrob przyklad ktory zapisze gdzies w osobnej tabeli kolor. Sprawdzaj jesli jest uzyty wylosuj kolejny albo zrob tablice ze spora iloscia wartosci. Oczywiscie drugi przyklad nie da 100% pewnosci ze kolory nie powiela sie i min 2 userow nie bedzie mialo tego samego koloru.Chociaz z drugiej strony jesli bedzie wiecej niz 5 userow to i tak ktorys sie powieli
Najprosciej tak bez zapisywanie gdziekolwiek:
http://www.php.net/session_start(); $color = http://www.php.net/array('red', 'blue', 'green', 'navy', 'yellow'.............................); $los_kolor = http://www.php.net/array_rand ($color); $losowy = $color[$los_kolor]; $_SESSION['color'] = $losowy; //print $_SESSION['color'];
http://www.php.net/session_start(); $color = http://www.php.net/array('red', 'blue', 'green', 'navy', 'yellow'.............................); $los_kolor = http://www.php.net/array_rand ($color); $losowy = $color[$los_kolor]; $_SESSION['color'] = $losowy; //print $_SESSION['color'];
W momencie ustawienia Twojego Cookie. Zreszsta jak juz bedziesz robil sesje to zmien to ciaskto na sesje 'nick' bo po co mieszac dwie rzeczy.
Nie napisze jak bo nie widze co tam wczesniej robisz.
Mozesz wygenerowac koloro losowo:
$out = '#' . http://www.php.net/substr(http://www.php.net/md5(http://www.php.net/rand()), 0, 6); http://www.php.net/print "<span style=color:" . $out . ">TEST</span>";
$rand = http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); http://www.php.net/print "<span style=color:#" . $rand . ">TEST</span>";
$out = '#' . http://www.php.net/substr(http://www.php.net/md5(http://www.php.net/rand()), 0, 6); http://www.php.net/print "<span style=color:" . $out . ">TEST</span>";
$rand = http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); http://www.php.net/print "<span style=color:#" . $rand . ">TEST</span>";
<?php $dbhost="localhost"; $dbuser="root"; $dbpassword=""; $dbname="php"; $polaczenie = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); if (!$polaczenie) { http://www.php.net/echo "Błąd połączenia z MySQL." . PHP_EOL; http://www.php.net/echo "Errno: " . mysqli_connect_errno() . PHP_EOL; http://www.php.net/echo "Error: " . mysqli_connect_error() . PHP_EOL; http://www.php.net/exit; } $godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat) VALUES('$user','$godzina','$post')"); http://www.php.net/setcookie('Nick', $user,http://www.php.net/time()+60*60); http://www.php.net/header("Location: index.php"); http://www.php.net/exit(); } ?>
<?php $dbhost="localhost"; $dbuser="root"; $dbpassword=""; $dbname="php"; $polaczenie = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); if (!$polaczenie) { http://www.php.net/echo "Błąd połączenia z MySQL." . PHP_EOL; http://www.php.net/echo "Errno: " . mysqli_connect_errno() . PHP_EOL; http://www.php.net/echo "Error: " . mysqli_connect_error() . PHP_EOL; http://www.php.net/exit; } $rezultat = mysqli_query($polaczenie, "SELECT * FROM komunikaty") or http://www.php.net/die ("Błąd zapytania do bazy: $dbname"); http://www.php.net/print "<TABLE CELLPADDING=5 BORDER=1>"; http://www.php.net/print "<TR><TD>ID</TD><TD>Użytkownik</TD><TD>Data i godzina</TD><TD>Wiadomość</TD></TR>\n"; ?> <form method="POST" action="dodaj.php"> <br> Nick:<input type="text" name="user" value="<?php if (http://www.php.net/isset($_COOKIE['Nick'])) { http://www.php.net/echo $_COOKIE['Nick']; } ?> "; maxlength="10" size="10"><br> Post:<input type="text" name="post" maxlength="90" size="90"> <br> <input type="submit" value="Send"/> </form> Posty: <br> <?php $rezultat = mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat FROM komunikaty ORDER BY idk DESC LIMIT 5"); while ($wiersz = mysqli_fetch_array ($rezultat)) { $idk = $wiersz[0]; $nick = $wiersz[1]; $data = $wiersz[2]; $komunikat = $wiersz[3]; $kolor = $wiersz[4]; mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat FROM komunikaty"); http://www.php.net/print "<TR><TD>$idk</TD><TD>$nick</TD><TD>$data</TD><TD>$komunikat</TD></TR>\n"; } http://www.php.net/print "</TABLE>"; mysqli_close($polaczenie); ?>
$godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { $kolor = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat,kolor) VALUES('$user','$godzina','$post','$kolor')");
http://www.php.net/setcookie('Nick', $user,http://www.php.net/time()+60*60); $_SESSION['kolor'] = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
http://www.php.net/session_start();
$godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { $kolor = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat,kolor) VALUES('$user','$godzina','$post','$kolor')");
http://www.php.net/setcookie('Nick', $user,http://www.php.net/time()+60*60); $_SESSION['kolor'] = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
http://www.php.net/session_start();
Wkradl mi sie maly blad. W pierwszym prrzypadku bedzie Ci dodawac za kazdym razem nowy kolor.
http://www.php.net/session_start(); $_SESSION['nick'] = $_POST['user']; // zamiast setcookie('Nick', $user,time()+60*60); $_SESSION['kolor'] = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
http://www.php.net/print_r($_SESSION);
http://www.php.net/print_r($_SESSION);
Pokaz mi gdzie ty to dajesz te sesje
<?php http://www.php.net/session_start(); $dbhost="localhost"; $dbuser="root"; $dbpassword=""; $dbname="php"; $polaczenie = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); if (!$polaczenie) { http://www.php.net/echo "Błąd połączenia z MySQL." . PHP_EOL; http://www.php.net/echo "Errno: " . mysqli_connect_errno() . PHP_EOL; http://www.php.net/echo "Error: " . mysqli_connect_error() . PHP_EOL; http://www.php.net/exit; } $godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat) VALUES('$user','$godzina','$post')"); $_SESSION['nick'] = $_POST['user']; if(!http://www.php.net/isset($_SESSION['kolor'])) { $_SESSION['kolor'] = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); }else { $_SESSION['kolor'] = $_SESSION['kolor']; } http://www.php.net/header("Location: index.php"); http://www.php.net/exit(); } ?>
<?php http://www.php.net/session_start(); $dbhost="localhost"; $dbuser="root"; $dbpassword=""; $dbname="php"; $polaczenie = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); if (!$polaczenie) { http://www.php.net/echo "Błąd połączenia z MySQL." . PHP_EOL; http://www.php.net/echo "Errno: " . mysqli_connect_errno() . PHP_EOL; http://www.php.net/echo "Error: " . mysqli_connect_error() . PHP_EOL; http://www.php.net/exit; } $godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat) VALUES('$user','$godzina','$post')"); $_SESSION['nick'] = $_POST['user']; $_SESSION['kolor'] = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); http://www.php.net/header("Location: index.php"); http://www.php.net/exit(); } ?>
$rezultat = mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat, kolor FROM komunikaty ORDER BY idk DESC LIMIT 5"); $rand = http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); while ($wiersz = mysqli_fetch_array ($rezultat)) { $idk = $wiersz[0]; $nick = $wiersz[1]; $data = $wiersz[2]; $komunikat = $wiersz[3]; $kolor = $wiersz[4]; mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat FROM komunikaty"); http://www.php.net/print "<TR><TD>$idk</TD><TD>$nick</TD><TD>$data</TD><TD>$komunikat</TD></TR>\n"; } http://www.php.net/print "</TABLE>"; mysqli_close($polaczenie);
Ma byc tak: [sory ale rownoczesnie ogladam F1 i nie moge sie skupic ani tu ani tu
<?php http://www.php.net/session_start(); $dbhost="localhost"; $dbuser="root"; $dbpassword=""; $dbname="php"; $polaczenie = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); if (!$polaczenie) { http://www.php.net/echo "Błąd połączenia z MySQL." . PHP_EOL; http://www.php.net/echo "Errno: " . mysqli_connect_errno() . PHP_EOL; http://www.php.net/echo "Error: " . mysqli_connect_error() . PHP_EOL; http://www.php.net/exit; } $godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat) VALUES('$user','$godzina','$post')"); $_SESSION['nick'] = $_POST['user']; $_SESSION['kolor'] = (!http://www.php.net/isset($_SESSION['kolor'])) ? '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT) : $_SESSION['kolor']; http://www.php.net/header("Location: index.php"); http://www.php.net/exit(); } ?>
http://www.php.net/print "<span style=color:".$_SESSION['kolor'].">" . $komunikat . "</span>";
Chyba gdzieś się pogubiłem. Koloruje mi teraz, ale tylko na zielono zarówno na jednej jak i na drugiej przeglądarce. Teraz mam tak:
$godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; if (http://www.php.net/isset($_POST['post'])) { $kolor = '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); mysqli_query($polaczenie, "INSERT INTO komunikaty(nick, data, komunikat,kolor) VALUES('$user','$godzina','$post','$kolor')"); http://www.php.net/setcookie('Nick', $user,http://www.php.net/time()+60*60); //możliwość wprowadzania danych nick tylko raz\ $_SESSION['nick'] = $_POST['user']; $_SESSION['kolor'] = (!http://www.php.net/isset($_SESSION['kolor'])) ? '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT) : $_SESSION['kolor']; http://www.php.net/header("Location: index.php"); http://www.php.net/exit(); }
$rezultat = mysqli_query($polaczenie, "SELECT * FROM komunikaty") or die ("Błąd zapytania do bazy: $dbname"); print "<TABLE CELLPADDING=5 BORDER=1>"; print "<TR><TD>ID</TD><TD>Użytkownik</TD><TD>Data i godzina</TD><TD>Wiadomość</TD></TR>\n"; ?> <form method="POST" action="dodaj.php"> <br> Nick:<input type="text" name="user" value="<?php if (http://www.php.net/isset($_COOKIE['Nick'])) { http://www.php.net/echo $_COOKIE['Nick']; } ?> "; maxlength="10" size="10"><br> Post:<input type="text" name="post" maxlength="90" size="90"> <br> <input type="submit" value="Send"/> </form> Posty: <br> <?php $rezultat = mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat, kolor FROM komunikaty ORDER BY idk DESC LIMIT 5"); $rand = http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); while ($wiersz = mysqli_fetch_array ($rezultat)) { $idk = $wiersz[0]; $nick = $wiersz[1]; $data = $wiersz[2]; $komunikat = $wiersz[3]; $kolor = $wiersz[4]; mysqli_query($polaczenie, "SELECT idk, nick, data, komunikat FROM komunikaty"); http://www.php.net/print_r($_SESSION); http://www.php.net/print "<TR><TD>$idk</TD><TD>$nick</TD><TD>$data</TD><TD><span style=color:".$_SESSION['kolor'].">" . $komunikat . "</span></TD></TR>\n"; } http://www.php.net/print "</TABLE>"; mysqli_close($polaczenie);
Kazda przeglądarka przechowuje swój własny zestaw plikow cookie (ktore są technologicznymi sesjami) - nie są one wspołuzytkowane przez rozne przeglądarki.
Sprobuj wywolac
http://www.php.net/session_destroy();
Nie pykło i jeszcze jakiś warning wywaliło. Może gdzieś w kodzie są błędy.
http://www.php.net/session_start(); @$mysqli = new mysqli($server, $username, $password, $database); if ($mysqli->connect_error) { http://www.php.net/die("Błąd połączenia z MySQL: " . $mysqli->connect_error); } $sql = "SELECT `idk`, `nick`, `data`, `komunikat` FROM komunikaty ORDER BY `idk` DESC LIMIT 5"; $result = $mysqli->query($sql); $allRows = $result->num_rows; if ($allRows > 0) { http://www.php.net/print 'Wszystkich rekordów: <u><b>' . $allRows . '</b></u>'; while($row = $result->fetch_assoc()) { http://www.php.net/print "</span style=\"color:".$_SESSION['kolor']."\">".$row['komunikat']."</span><br>"; } } else { http://www.php.net/print 'Znaleziono: ' . $allRows . ' rekordów'; } $mysqli->close();
http://www.php.net/session_start(); $mysqli = new mysqli($SERVER, $USER, $PASSWORD, $DBNAME); $godzina = http://www.php.net/date("Y-m-d H:i:s"); $user = $_POST['user']; $post = $_POST['post']; $_SESSION['kolor'] = (!http://www.php.net/isset($_SESSION['kolor'])) ? '#' . http://www.php.net/str_pad(http://www.php.net/dechex(http://www.php.net/rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT) : $_SESSION['kolor']; $kolor = $_SESSION['kolor']; if ($stmt = $mysqli->prepare("INSERT INTO komunikaty" . " (nick, data, komunikat, kolor) VALUES ( ?, ?, ?, ? )")) { $stmt->bind_param('ssss', $user, $godzina, $post, $kolor); $stmt->execute(); $stmt->close(); $mysqli->close(); http://www.php.net/header('location: index.php'); // jesli ok } else { http://www.php.net/print 'blad zapisu'; http://www.php.net/exit; }
No to wcześniej zapisywało w formacie hex, tylko że zapisywało randomowo, a chyba ma zapisywać do nicku określony kolor. Próbowałem wyciągnąć kolor z bazy, ale nie działało w taki sposób:
Edit. Dobra, udało się chyba. Dzięki wielkie za pomoc i za cierpliwość, ale programowanie to nie moja bajka. Dzięki!
A niby ta funkcja co robi. HEX to format koloru.
Przeczytaj sobie wczesniejszy post i zastosuj. Nie mieszaj swojego z moim.
Musisz przed dodaniem do bazy dac ten warunek bo inaczej caly czas bedzie dodawalo nowy kolor.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)