Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: form handler tai joku sellainen

abina [27.02.2005 12:23:28]

#

Moi! en nyt tiedä onko oikein sanoa form handler mut se nyt kuulosti järkevimmältä ja eniten kertovalta pistää se otsikkoon. Eli kysymys:

Onko järkeä ja käytättekö itse usein koodia joka hoitaa formilta tulevat tiedot tietokantaan. kun mietin tässä tehdessäni pienimuotoista hallintasivustoa että eikö pitäisi tehdä koodi joka käy kaikki $_POSTit läpi ja tallentaa ne mysliin. formilta tietty pitäisi lähettää hiddeninputissa vaikka teko eli olisiko lisäys, muokkaus vai poisto. ja sitten vielä lähetettäisiin kohde eli tablen nimi minnekkä nuo tallennettaisiin. joten tästä eteenpäin pitäisi tehdä vain sivu missä olisi formi. jossa olisi esim. tekstikenttiä minkä nimi olisi sama kuin tietokannassa kohta jonne haluaa tallentaa. ja ei tarviaisi jokaiselle formille mitä hallintasivulla on niin tehdä omaa lisää/muokkaa/poista koodia vaan tuo sama koodi tekisi sen aina. eli kaikki formit vaan lähettäisi tiedot tuolle koodille. tietty siinä olisi onko käyttäjällä oikeudet muokata tuota ja tarkistettaisiin että onko olemassa tuollaista tablea. sekavaa mutta tuntui että ei hirveesti ole juttua tälläisestä. onko tämä yleinen tyyli? vai onko tässä jotain riskejä jonka takia aina tehdään joka formille oma koodi jolla tallennetaan tiedot mysliin. tai poistetaan ne sieltä.

toinen kysymyskin heräsi tässä. kun <form> tageihin voi laittaa formin nimen. saako phpllä tätä jotenkin esiin? eikun tuota formin "hoitajaa" ajatellen voisi käyttää sitä. eli poikkeuksia. eli jos formin nimi on "erikoinen" niin tehtäisiin jotain muuta. muuten käytettäisiin tuota perus juttua. no se onnistuu muutenkin mutta tulipa vaan mieleen.

sekavaa mutta toivottavasti tajusitte mitä ajoin takaa.

ajv [27.02.2005 14:50:47]

#

Veikkaan, että ei ihan helpolla onnistuisi tuommoinen yleispätevä hallintasivu. Tauluthan ovat kuitenkin erilaisia, ja niissä on erilaisia sarakkeita, joten ensin pitäisi kait hakea sen kannan tiedot ja sen mukaan tulostella kannalle sopivat inputit.

Itse teen aina tapauskohtaisesti tuon adminpaneelin - kyllä, se on aina yhtä inhottavan tylsää - ja sanoisin että tämä on myös käytäntö. Jos haluaa yleipätevää adminpaneelia, sitä varten on phpMyAdmin.

abina [27.02.2005 15:05:10]

#

tuota.. nyt selitin väärin. eli se formi esim. vaikka uutisten kirjoitus toki tehtäisiin ihan normaalisti. mutta se että olisi kyseessä nyt uutisten lisäys, tallennus, poisto tai vaikka vieraskirjaan kirjoitus niin kaikki formit lähettää tietonsa tälle vaikka form_handler.php tiedostolle. ja joka kenttä olisi saman niminen kuin tietokannassa on se kenttä mihin haluaa sen lisättävän. tai muutettavan. sitten vaan vielä kaikkien näiden lisäksi lähettäisi hiddeninputissa tablen nimen. ja mitä haluaa tehdä. eli vaikka lisätä. ja koodi kävisi kaikki postit läpi ja tarkistaisi onko olemassa tälläinen kenttä. ja kun kaikki postit käyty läpi ja poistettu sellaiset postit jonka nimistä kenttä ei löydy niin on poistettu. sen jälkeen vaan lisäisi ne kaikki postit mysliin. aah.. vaikee selittää selkeästi.

eli en hae formin tekijää. vaan formit tehdään ihan tylsän pitkästyttävästi itse. mutta formin kun lähettää niin tämä tallennus/muokkaus/poiston hoitaisi tämä koodi.

sotkinko vielä enemmän?

ajv [27.02.2005 15:12:50]

#

Joo, arvelinkin, että ymmärsin jotain väärin :)

Tuohon en osaa kyllä sanoa juuta enkä jaata. Oma käytäntöni on ollut jakaa koodit omiin tiedostoihin, mutta kait se on makukysymys. Ei kai siinä sen erikoisempia riskejä ole, jos koodi vaan on turvallista ja ylipäätänsä tiedostaa riskit puuhatessa MySQL:n kanssa (olihan kyse MySQL:stä ?).

Tulee mieleen eräs foorumi, jonka joku aika sitten tein, ja jota vieläkin välillä koodailen. Siinä tiedostoja on _riittävästi_ ja kun pitkän ajan päästä alkaa ettiä esim, että mikäs tiedosto sen viestin poistikaan sieltä kannasta, niin joutuu todella perehtymään koodiin että löytää sen tiedoston. Tältä kantilta ajatellen, tuollainen systeemi vaikuttaa pätevältä. Toisaalta henkilökohtaisesti kyllä inhoan 1000-rivisiä php-tiedostoja, ei niitäkään ole kiva muokata.

abina [27.02.2005 15:14:31]

#

sitä ajattelinkin että tämä yksi koodi tekisi kaikkien formien tallennuksen,muokkauksen,poiston. joten tämän koodin teon jälkeen ei tarvitsisi kuin aina tehdä vain se sivu missä joko on lisäys formi, muokkaus formi tai poisto. joten tämän jälkeen ei tarvitse tehdä kuin noita sivuja. on kyse minkätahansa formin käsittelystä.

pitää ruveta kirjottelemaan. katsotaan onko siinä mitään järkeä. kertokaa toki jos jollain on jo ajatuksia tälläisestä.

abina [27.02.2005 16:40:14]

#

En ole mikään pro phpn koodaamisessa joten aikamoisia purkka virityksiä saattaa olla. mutta parannus ehdotuksia antakaa. en ole testannut tuota koodia mutta idean siitä näkee. ja no tuossa on vasta tuo lisäys pätkä. et siihen lisäksi kun tekee muokkaa ja poista pätkät. mutta tällä idealla niin onko tässä mitään järkeä? kannattaako näin tehdä? ideoita ja jos virheitä sattuu silmään niin kertokaa.

$dbhosti = 'localhost'; //yhdistetään näillä tiedoillä
$dbkayttajanimi = '';
$dbsalasana = '';
$dbtietokanta = '';


	$dbyhdistys = mysql_pconnect("$dbhosti","$dbkayttajanimi","$dbsalasana");//yhdistetään tietokantaan
	if($dbyhdistys == false){ //jos virhe niin lisätään virheilmoitus
		$virheilmoitus [] = "Tietokantaan ei saatu yhteyttä. <br> Mysql virhe:".mysql_error()."";
	}

	$dbtietokantavalinta = mysql_select_db("$dbtietokanta", $dbyhdistys);//valitaan tietokanta
	if($dbtietokantavalinta == false){//jos virhe niin lisätään virheilmoitus
		$virheilmoitus [] = "Tietokantaa ei saatu valittua. <br> Mysql virhe:".mysql_error()."";
	}



if(!empty($_POST)){ //tarkistetaan onko mitään lähetetty formilla
if(!empty($_POST['teko']) || !isset($_POST['teko'])){	// tarkistetaan onko annettu teko
if(!empty($_POST['kohde']) || !isset($_POST['kohde'])){ // tarkistetaan onko annettu kohde


$tarkistus2 = mysql_query("SELECT ".$_POST['kohde']." FROM users WHERE siteid = '".$_SESSION['siteid']."' AND userid = '".$_SESSION['userid']."'");
if(mysql_num_rows($tarkistus2) > 0 && mysql_result($tarkistus2, 0, $_POST['kohde']) == 'kylla'){// tarkistetaan onko käyttäjällä oikeuksia palvelulle

	$teko = $_POST['teko'];
	$kohde = $_POST['kohde'];
	unset($_POST['teko']);//poistetaan turhat postit
	unset($_POST['kohde']);//jotta koodi ei yritä niitä
	unset($_POST['submit']);//lisätä mysliin

	if($teko == 'lisaa'){

		$tablen_tarkistus = mysql_query("SELECT 1 FROM ".$kohde." LIMIT 0");

		if($tablen_tarkistus){//tarkistetaan että kohde on olemassa

			$fieldin_tarkistus = mysql_list_fields($dbtietokanta, $kohde);
			if($fieldin_tarkistus){



				$field_num = mysql_num_fields($fieldin_tarkistus); //kenttien määrä
				foreach($_POST as $nimi => $teksti){//käydään postit läpi

					for($i=0;$i<$field_num;$i++){//käydään kaikki kentät läpi ja verrataan sitä postiin

						if(mysql_field_name($fieldin_tarkistus, $i) == $nimi){

							if($i == 0){//tehdään mysqllää varten query
								$mysql_kentat = $nimi;//purkka viritelmä jotta ei tulisi turhaa
								$mysql_valuet = "'".$teksti."'"; //pilkkua
							}else{
								$mysql_kentat = ", ".$mysql_kentat;
								$mysql_valuet = ", '".$mysql_valuet."'";
							}
						}
					}
				}
				if(!empty($mysql_kentat) && !empty($mysql_valuet)){
				$mysql_lisays = mysql_query("INSERT INTO ".$kohde."(".$mysql_kentat.") VALUES (".$mysql_valuet.")");

				}else{
					$virheilmoitus[] = "Virhe tallentaessa.";
				}
			}else{
				$virheilmoitus[] = "Kenttien haku epäonnistui";
			}
		}else{
			$virheilmoitus[] = "Kohdetta ei ole olemassa";
		}

	}elseif($teko == 'muokkaa'){

		foreach($_POST as $nimi => $teksti){
			$mysql_tarkistus = mysql_query("SELECT ".$nimi." FROM ".$kohde."");
			if(mysql_num_rows($mysql_tarkistus) > 0){//tarkistetaan onko kohde olemassa

														//otetaan myslille vaaralliset himpsut pois
				$teksti = get_magic_quotes_gpc() ? $teksti : mysql_escape_string($teksti);

				$mysql_tallennus = mysql_query("INSERT INTO ");


			}
		}
	}

}else{
$virheilmoitus[] = "Käyttäjällä ei oikeuksia";
}
}else{
$virheilmoitus[] = "Palvelua ei ole asennettu tälle sivustolle"
}
}else{			// virhe ilmoitus jos ei ole annettu kohdetta
$virheilmoitus[] = 	highlight_string(
					'Koodille ei lähetetty kohdetta. Lisää <form></form> tagien väliin hiddeninput kenttä ja anna nimeksi kohde ja valueksi tablen nimi jonne tiedot tallennetaan';
}
}else{         // virhe ilmoitus jos ei ole annettu tekoa
$virheilmoitus[] = 	highlight_string(
					'Koodille ei lähetetty tekoa. Lisää <form></form> tagien väliin hiddeninput kenttä ja anna nimeksi teko ja valueksi joku seuraavista: lisaa, muokkaa, poista');
}
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta