Jos on sivu jolla on kaikkea jännää + asetukset, ja käytössä php ja MySQL, niin kuinka olisi mahdollista että saisin asetuksiin jokaiselle käyttäjälle lootan, jonne he voisivat laittaa omaa css koodiaan kuten wikeissä. Tiedostoja on nyt mm. style.php ja style2.php. Jos tekisin style3.php tiedoston, niin kuinka saisin se toimimaan jokaisella käyttäjällä erikseen? Olen tehnyt MySQL tietokantaa user kohtaan taulun "css". Miten tästä eteenpäin?
(Mod. lyhensi otsikkoa.)
GrayMan kirjoitti:
Olen tehnyt MySQL tietokantaa user kohtaan taulun "css".
Toivottavasti tarkoitat, että olet tehnyt user-tauluun tekstityyppisen sarakkeen nimeltä css.
Eipä tuossa ole sen kummempaa kuin käyttäjän profiilitiedoissa muutenkaan. Yhteen laatikkoon käyttäjä voi syöttää sähköpostiosoitteensa, toiseen oman kuvauksensa, kolmanteen CSS-koodia. Kaikki tallennetaan samalla tavalla tietokantaan. Sitten style3.php hakee tietokannasta käyttäjän css-koodin ja tulostaa sen, aivan kuten profiilisivu normaalisti hakee ja tulostaa noita muita tietoja.
Mikä kohta tässä tuottaa vaikeuksia? Kai nyt tietokantakyselyt ovat tuttuja, jos olet jo saanut aikaan jonkinlaisen käyttäjärekisterin ja kirjautumisen.
Olen tehnyt tuon tyyppisen jutun sinne databaseen. Mutta se, että olen saanut aikaan jonkinlaisen käyttäjärekisterin ja kirjautumisen, on valetta, koska käytän valmisfoorumia, jota parantelen itselleni sopivammaksi.
usersettings.php
<?php include("topinclude.php"); $pagename=$if_settings; include("pagetop.php"); if($userid==0) { echo "<p>$if_mustlogin</p>"; include("pagebottom.php"); exit(); } switch($_POST['change']) { case 'password': $kysely=mysql_query("SELECT password FROM users WHERE userid = $userid", $yhteys); if(md5($_POST['oldpassword']) != mysql_result($kysely,0,'password')) { echo "<p class='rednote'>$if_invalidpassword</p>"; break; } if($_POST['newpassword'] == '') { echo "<p class='rednote'>$if_givepassword</p>"; break; } if($_POST['newpassword'] != $_POST['newpassword2']) { echo "<p class='rednote'>$if_differentpasswords</p>"; break; } $newpass=md5($_POST['newpassword']); mysql_query("UPDATE users SET password = '$newpass' WHERE userid = '$userid'"); echo "<p class='greennote'>$if_changessaved</p>"; break; case 'email': $newemail = $_POST['newemail']; if(!preg_match("/(.+?)@(.+?)\.([a-z0-9]+?)/",$_POST['newemail'])) { echo "<p class='rednote'>$if_givevalidemail</p>"; break; } $emailconfirm = md5(rand(1,1000000000)); mysql_query("UPDATE users SET email = '$newemail' WHERE userid = '$userid'"); mysql_query("UPDATE users SET emailconfirm = '$emailconfirm' WHERE userid = '$userid'"); $kysely = mysql_query("SELECT email FROM users WHERE userid = 1",$yhteys); $sender = mysql_result($kysely,0,'email'); $headers = "From: ".$sender."\r\nContent-Type: text/plain; charset=''"; $kysely = mysql_query("SELECT username FROM users WHERE userid = '$userid'",$yhteys); $username = mysql_result($kysely,0,'username'); mail($newemail,utf8_decode("$if_sitename: $if_mail_emailconfirmationsubject"), utf8_decode(stringparams($if_mail_emailconfirmationtext, $_SERVER['REMOTE_ADDR'], $userid, $username, curpath()."confirmemail.php?code=$emailconfirm")), $headers); echo "<p class='rednote'>$if_emailchanged</p>"; break; case 'city': $newcity=($_POST['newcity']); mysql_query("UPDATE users SET city = '$newcity' WHERE userid = '$userid'"); echo "<p class='greennote'>$if_changessaved</p>"; break; } echo "<h2>$if_settings</h2>\n"; echo "<h3>$if_changepassword</h3>\n<form method='post' action='usersettings.php'>\n"; echo "<input type='hidden' name='change' value='password'>"; echo "$if_oldpassword: <input type='password' name='oldpassword'><br>\n"; echo "$if_newpassword: <input type='password' name='newpassword'><br>\n"; echo "$if_repeatpassword: <input type='password' name='newpassword2'><br>\n"; echo "<input type='submit' value='$if_changepassword'>\n</form><hr>\n"; echo "<h3>$if_changeemail</h3>\n<form method='post' action='usersettings.php'>\n"; echo "<input type='hidden' name='change' value='email'>"; $kysely = mysql_query("SELECT email FROM users WHERE userid = '$userid'"); $myemail = mysql_result($kysely,0,'email'); echo "$if_emailaddress: <input type='text' value='$myemail' name='newemail'><input type='submit' value='$if_changeemail'>"; echo "<h3>$if_city</h3>\n<form method='post' action='usersettings.php'>\n"; echo "<input type='hidden' name='change' value='city'>"; $kysely = mysql_query("SELECT city FROM users WHERE userid = '$userid'"); $city = mysql_result($kysely,0,'city'); echo "$if_city: <input type='text' value='$city' name='newcity'><input type='submit' value='$if_update_city'>"; include("pagebottom.php"); ?>
Ja haluaisin niin että vain minä (tietokannasta) ja käyttäjä itse näkevät css koodin (myös käyttäjäsivun tyyleissä) jotta kukaan ei voi aiheuttaa muille harmia piilottamalla oman käyttäjäsivunsa css koodilla
(Mod. huom: Älä kirjoita liian pitkiä rivejä ilman välejä! Koodikin on selkeämpää, kun pilkun jälkeen tulee aina väli.)
Eipä siinä sen kummempaa, kuin että teet yhden osion lisää, joka vaihtaa css-sarakkeen sisällön; samalla tavalla kuin aiemmin lisäämäsi kohdat. Sen jälkeen voit pagetop.php:ssä hakea css-filun koodilla:
$kysely = mysql_query("SELECT css FROM users WHERE userid = '$userid'"); $city = mysql_result($kysely,0,'css');
Suosittelen tekemään erillisen tiedoston tuota varten. Mallia voit ottaa style.php:stä.
Pientä pilkunviilausta...
$kysely = mysql_query("SELECT css FROM users WHERE userid = '$userid'"); $city <-------------------- = mysql_result($kysely,0,'css');
Miksi tuo on $city?
korjaan sen itse ja testaan tätä syysteemaa. Kiitos
Muuttujan nimellä ei ole merkitystä, mutta tarkoitus oli laittaa $css, siis.
Ok. Laitoi ton tekstinpagetop.php tiedostoon mutta se veti koko sivun sekasin
Aihe on jo aika vanha, joten et voi enää vastata siihen.