Form data opslaan in mySql

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Ik heb een submit form voor data op te slaan in een mySql db, maar heb geen idee hoe ik gegevens kan opslaan zonder voor elk input veld een sql querry te maken...

Is er geen redelijk korte manier om iets dergelijks te doen?

Alvast bedankt :D
 
Meer info, plz...

kan je misschien laten zien hoe je form eruitziet? code, misschien dat je een query kan samenstellen door een for-loop te gebruiken?
Ik snap niet helemaal wat je bedoeld, maar misschien als je de code upload van het form en je bedoeling duidelijk maakt dat ik je kan helpen :d Ik denk het wel...
 
Hoezo?
PHP:
$query =
"INSERT INTO tabel (veld1, veld2, veld3)
 VALUES ('". $_POST['veld1'] ."', '". $_POST['veld2'] ."', '". $_POST['veld3'] ."')";
Lijkt mij toch 1 query die alles opslaat?
 
Hoezo?
PHP:
$query =
"INSERT INTO tabel (veld1, veld2, veld3)
 VALUES ('". $_POST['veld1'] ."', '". $_POST['veld2'] ."', '". $_POST['veld3'] ."')";
Lijkt mij toch 1 query die alles opslaat?

dat lijkt mij ook, ja...
 
Euhm, deze tabel :)
i1659098_Clipboard02.gif


Al mn inputvelden hebben trouwens dezelfde naam als hun overeenstemmende waarde in config_field, helpt dat?
 
Laatst bewerkt:
Kan je hier wat mee?

action.php
Code:
<?php
$config_f = $_POST("congif_field");
$config_d = $_POST("config_data");

include("verbinding.php");

$query = "INSERT INTO tabelnaam('config_field', 'config_data') VALUES($config_f, $config_d);
mysql_query($query);
?>

en je form
Code:
<form action="action.php" method="POST">

deze heb je al...
verbinding.php
Code:
<?php
mysql_connect("host","user","pass") or die("verbinding met server mislukt vanwege: ".mysql_error());
mysql_select_db("database") or die("database error: ".mysql_error());
?>

Is dit wat je bedoel? :d
 
Laatst bewerkt:
Dan bevat $config_f en $config_d toch slechts de gegevens voor 1 record? Of is dat een array ofzo?
 
Je krijgt de input van het de onderdelen van het form die zijn ingevuld.

Je kan wel met behulp van een for-loop elk onderdeel een naam geven, en dan door middel van een <input type=hidden> het aantal inputmembers van het form doorsturen.
Dan in action.php weer met een for-loop alle input velden de gegevens eruit halen

Code:
<?php
$config_f = array();

for($i = 0; $i < $_POST("hiddentype"); $i++)
{
    $config_f[$i] = $_POST("naaminputveld$i");
}

?>

zoiets misschien?? :p
 
Denk dat dat niet gaat, aangezien niet elk veld in de tabel een overeenstemmend inputveld heeft...
 
Ik krijg sterk het vermoeden dat dit gewoon met je vorige vraag te maken heeft...

Je zult dan inderdaad met allerlei WHERE queries moeten komen, simpel omdat je die array wilde.
 
Het heeft idd met mn vorige vraag te maken...
Ik dacht dat ik op die manier kon voorkomen dat ik met zoveel verschillende queries zou moeten werken, maar b lijkbaar hjeb ik ze toch ofwel bij laden, ofwel bij opslaan :confused:
 
Tja dan lijkt het mij verstandiger dat je je databasestructuur herziet wanneer je dit niet wilt/ziet zitten.
 
Hoe suggereer je dan dat ik hem structureer?
 
Ik weet niet hoe hij er nu uit ziet en wat het idee achter bepaalde velden is :)
 
Laat maar, ik heb het opgelost met een zooi functies en lussen.

Hier heb je mn code (moet hem wel nog eens deftig structureren, ma doe ik pas als ik met derest klaar ben :))

PHP:
<?php

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

switch ($mode)
	{
	case "global":
		saveGlobalConfig();
		break;
	case "layout":
  		saveLayoutConfig();
 		break;
	case "tooltip":
		saveTooltipConfig();
		break;
	default:
		exit("<br /><b>Could not stave the data!</b><br />");
	}



/* // // // START CONTENT FUNCTIONS \\ \\ \\ */

function saveGlobalConfig()
	{
	updateRadioList("startCircle",array("inner","outher"));
	updateRadioList("minimun",array("1", "2","3", "4", "5"));
	updateTxtFields(array("siteTitle","metaTags"));
	}

function saveLayoutConfig()
	{
	updateRadioList("align", array("left","center","right"));
	updateRadioList("valign", array("top","middle","bottom"));
	updateColorFields(array("linkHoverCol","linkActiveCol","linkVisitedCol"));
	foreach(array("title","location","city","url","telephone","email","fax") as $groupeName)
		{
		foreach(array("Bold","Cursive","Underlined") as $attribute)
			{
			updateCheckBoxes(array($groupeName.$attribute)); // attributes
			}
		updateColorFields(array($groupeName."Color")); // color
		updateData($groupeName."Font", $_REQUEST[$groupeName."Font"]); // font
		updateData($groupeName."Size", $_REQUEST[$groupeName."Size"]); // size
		}	
	}

function saveTooltipConfig()
	{
	updateRadioList("ttFontSize", array("10", "11","12", "13", "14"));
	updateRadioList("ttTextAlign", array("left","center","right"));
	updateTxtFields(array("ttDelay","ttDuration","ttFadeIn","ttFadeOut","ttBorerWidth","ttShadowWidth","ttWidth","ttOffsetX","ttOffsetY","ttOpacity","ttPadding"));	
	updateColorFields(array("ttBgColor","ttBorderColor","ttFontColor","ttShadowColor"));
	updateCheckBoxes(array("ttShadow","ttFontWeight","ttCenterMouse","ttFollowMouse"));
	}

/* \\ \\ \\ END CONTENT FUNCTIONS // // // */



/* // // // START UPDATE FUNCTIONS \\ \\ \\ */

function updateData($field, $data = "", $compareTable = "config_field", $dataTable = "config_data", $compareVal = "", $tableName = "config")
	{
	if ($data == "") {$data = $_REQUEST[$field];}
	if ($compareVal == "") {$compareVal = $field;}
	// echo "<br />UPDATE `$tableName` SET `$dataTable` = '$data' WHERE `$compareTable` = '$compareVal'";
	mysql_query("UPDATE `$tableName` SET `$dataTable` = '$data' WHERE `$compareTable` = '$compareVal'");
	}

function updateTxtFields($fields)
	{
	foreach($fields as $field)
		{
		if (strlen($_REQUEST[$field]) > 0)
			{
			updateData($field);
			}
		}
	}

function updateColorFields($fields)
	{
	foreach($fields as $field)
		{
		updateData($field, str_pad($_REQUEST[$field], 6, "0", STR_PAD_LEFT));
		}
	}

function updateRadioList($field, $dbValues, $indx = "")
	{
	if ($indx == "") {$indx = $_REQUEST[$field];}
	updateData($field, $dbValues[$indx]);
	}

function updateCheckBoxes($boxes)
	{
	foreach($boxes as $box)
		{
		updateData($box, 0 + $_REQUEST[$box]);
		}
	}

/* \\ \\ \\ END UPDATE FUNCTIONS // // // */

?>
 
misschien een beetje mosterd na de maaltijd, maar het is mogelijk om meerdere rijen van een tabel aan te passen met behulp van mysql.

zelf heb ik deze namelijk ook een keer gebruikt.dit kan door gebruik te maken van een 'conditional statement', voor mysql de case statement waarvan je de documentatie hier vindt: http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

zelf heb ik hem zo kort geschreven
PHP:
$items = array('naam', 'adres', 'postcode', 'provincie', 'land');
	$query = "UPDATE instellingen SET waarde = CASE naam";
	foreach($items as $name){
		$query .= "\nWHEN '".$name."' THEN '".$_POST[$name]."'";
	}
	$query .= "\nELSE waarde END";

natuurlijk moet je nog wel je data evt opschonen en de query uitvoeren, maar de query kun je zo maken. het helpt dan zeker dat al je inputvelden dezelfde naam als hun overeenstemmende waarde in config_field hebben. Items bevat dan dus al je namen.
 
Thnx gast, volgende keer dat ik hem herschrijf zal ik er zeker rekening mee houden :D
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan