webForumDet fria alternativet
Logga in / Bli medlem

Avancerad insert (get_all_values)

PHP

4 svar · 445 visningar · startad av K++

Medlem sedan juli 2002171 inlägg
Trådstart#1

Försöker komma på en funktion som underlättar alla j*dra inserts till databaser. Funktionen ska ta emot ett antal okända namn med värden från vanliga txt-fält / annat.

Tänker mig en funktion liknande denna;

function globalinsert($db,$tabell)
{
$g_ins = new c_layer;
$g_ins->connect($db);
$sql = "INSERT INTO $tabell (";
$sql .= ??????????: # Alla namn separerade med komma
$sql .= ") VALUES(";
$sql .= ??????????; #Alla värden dvs $_POST['xxx'],$_POST['yyy']
$sql .= ")";
$sql = extract all values
$g_ins->query( $sql );
$g_ins->close();
.
}

Is this possible?

Medlem sedan okt. 2001538 inlägg
#2

Hej :)

Vet scriptet om fältnamnen i förväg eller kan dessa variera med?

Jag har en liten fundering på om man inte skulle kunna göra så att man döper formulärfälten till samma saker som fältnamnen i databasen (möjlig säkerhetsrisk iofs då man ger ut namnen på fält i tabellen, det är ju aldrig bra) och sedan med hjälp av get_defined_vars(); och funktionen som står i kommentarerna för den funktionen på php.net ( http://se.php.net/manual/en/function.get-defined-vars.php )

Funktionen han/hon döpt till "generateDebugReport"
Modifierar man denna så får man ju snabbt och lätt ut både variabelnamnet, och det tillhörande värdet, och borde således kunna pluppa in det i din sql-kod.

Vad tror du om det?

MVH Patrik

Medlem sedan juli 2002171 inlägg
#3

Hej igen Patrik81! Fast det är nog en annan historia.

Jag löste det på ett litet annorlunda sätt;

	$arr = get_defined_vars();
	$postcrap = $arr[HTTP_POST_VARS];
	$nycklar = implode(",",array_keys($postcrap));
	$falt = "'" . implode("','",array_values($postcrap)) . "'";
Medlem sedan juli 20033 147 inlägg
#4

Låter intressant, kan du förklara dig lite mer hur du löste det? Hur funkar koden osv?

Medlem sedan juli 2002171 inlägg
#5

Jag satt och pillade mig lite i naveln (tog som vanligt bort lite navelludd) och så löste det sig. Det är en ganska enkel lösning istället för att använda massa for satser. Jag har samma namn på fälten som fälten i databaserna. Och koden därovan skapar en del av sql-satsen. Dvs, fältnamnen och värdena i rättformat. Bara att lägga till lite parenteser så är den komplett.

$sql = "INSERT INTO $dbset (" . $nycklar . ") VALUES (" . $falt . ")";
261 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)