webForumDet fria alternativet

värden från kryssrutor till databas

PHP

11 svar · 475 visningar · startad av altruism

Medlem sedan nov. 200664 inlägg
Frågan#1

Jag har letat och sökt på forumet och diverse andra ställen men hittar ingen egentlig lösning på mitt problem. Jag har ett formulär:

		
<form method="post" action="addpresent.php">
		<h3 class="formular">Vilken typ av present:</h3> <p>
			<input type="checkbox" name="hogtid[]" value="Födelsedagspresent" />Födelsedagspresent
			<input type="checkbox" name="hogtid[]" value="Bröllopspresent" />Bröllopspresent
			<input type="checkbox" name="hogtid[]" value="Julklapp" />Julklapp
			<input type="checkbox" name="hogtid[]" value="Namnsdagspresent" />Namnsdagspresent
			<br /><input type="checkbox" name="hogtid[]" value="Annan present" />Annan present
		</p>
</form>

Nu vill jag att när man fyller i en eller flera kyssrutor i formuläret så ska värdena läggas till i tabell i databasen. Jag har fått det att fungera med enkla textfält men inte med kryssrutor/radiobuttons. Vad jag lyckats luska fram så är kanske en foreach-loop ett sätt att kolla igenom kryssrutorna och om dom har värden.

Php-koden ser ut såhär nu:

function laggTillProdukt($mysqlUser, $artNummer)
{
	//ansluter till databasen
	$mysqlLänk = mysql_connect($mysqlUser['server'],$mysqlUser['användarnamn'],
	$mysqlUser['lösenord']);
	mysql_select_db($mysqlUser['databas']);
	$artNummer = $_GET['artNummer'];
	$hogtid = $_POST[hogtid[]];
	$query = mysql_query("INSERT INTO present (namn,beskrivning,bild) VALUES ('$_POST[namn]','$_POST[beskrivning]','$_POST[imgLink]')") or die(mysql_error());

		foreach ($_POST['hogtid'] as $kategori)
		{
		$query2 = mysql_query("INSERT INTO passar VALUES ('$hogtid')") or die('Query failed: ' . mysql_error());
		}
	return $query, $query2;
}
laggTillProdukt($mysqlUser, $artNummer);
?>
Medlem sedan mars 20034 471 inlägg
#2

Ändra din andra insert till

"INSERT INTO passar VALUES ('$kategori')"

Det är ju i variabeln kategori du hittar de successiva, valda värdena.

Medlem sedan juni 20014 421 inlägg
#3

Dessutom så heter formulär-elementet: hogtid[] och inte hogtid

Medlem sedan juli 20033 147 inlägg
#4

colione skrev:

Dessutom så heter formulär-elementet: hogtid[] och inte hogtid

Det är bara för att värderna ska hamna i en array, elementet heter fortfarande hogtid.

Medlem sedan juni 20014 421 inlägg
#5

Så rätt så, jag som inte tänkte mig för

Medlem sedan nov. 200664 inlägg
#6

aasah skrev:

Ändra din andra insert till

"INSERT INTO passar VALUES ('$kategori')"

Det är ju i variabeln kategori du hittar de successiva, valda värdena.

När jag ändrar det får jag felmeddelandet:
"Query failed: Column count doesn't match value count at row 1" när jag väljer att kryssa i en ruta, om alla är tomma blir det inget fel.

Om ni inte förstått det är jag väldigt ny på php, mysql. :)

Medlem sedan juni 20014 421 inlägg
Medlem sedan nov. 200664 inlägg
#8

Tack det hjälpte! Dock har ett nytt problem uppstått, mitt artikelnummer på produkterna blir inte samma för presenten som läggs till. Antar att det beror på att jag nu har två olika funktioner som körs. Den första körs och då blir artnummret (artNummer) 3 och sen körs den andra funktionen och då blir artnummret 4 och 5 om man väljer två högtider. Men hur kan jag slå ihop antingen funktionerna eller de två olika query's till en (det kommer bli fler än två innan jag är klar)

Någon som har en idé om hur jag ska hålla koll på artikelnummret så att det blir samma för alla fält? Jag har autoincrement i databasen.

Den relevanta koden ser ut såhär nu:

function namnBeskrivning($mysqlUser, $artNummer)
{
	//ansluter till databasen
	$mysqlLänk = mysql_connect($mysqlUser['server'], $mysqlUser['användarnamn'],
	$mysqlUser['lösenord']);
	mysql_select_db($mysqlUser['databas']);
	$artNummer = $_GET['artNummer'];
		$query = mysql_query("INSERT INTO present (namn,beskrivning,bild) VALUES ('$_POST[namn]','$_POST[beskrivning]','$_POST[imgLink]')") or die(mysql_error());
		
	return $query;
}
function hogtid($mysqlUser, $artNummer)
{
	//ansluter till databasen
	$mysqlLänk = mysql_connect($mysqlUser['server'], $mysqlUser['användarnamn'],
	$mysqlUser['lösenord']);
	mysql_select_db($mysqlUser['databas']);
	
	$artNummer = $_GET['artNummer'];
	

		foreach ($_POST['hogtid'] as $kategori)
		{
		$query2 = mysql_query("INSERT INTO passar(artNummer,hogtidsNamn) VALUES ('$artnummer','$kategori')") or die('Query failed: ' . mysql_error());
		}
	return $query2;
}
Medlem sedan mars 20034 471 inlägg
#9

Först: En INSERT (eller UPDATE eller DELETE) returnerar ingenting. Därför är det inte meningsfullt att returnera dina $query och $query2.

Sedan: Vad har du egentligen för PRIMARY KEYS på present och passar? Passar bör INTE ha auto_increment på artikelnummer. Jag antar att du bara har en rad för varje artikelnummer i present, och då funkar auto_increment. Men i passar, ska ju samma artikelnummer dyka upp flera gånger ihop med olika hogtidsNamn. Alltså måste (artNummer,hogtidsNamn) bilda PRIMARY KEY ihop. Ett visst unikt värde på paret förekommer bara en gång, men däremot förekommer både artNummer och hogtidsNamn - var för sig - på många olika rader. Alltså, ingen av kolumnerna ska ha auto_increment här. I stället får du skicka in det värde du vill ha på dessa två värden.

För att få samma värde får du antingen skicka med aktuellt artNummer som inparameter, eller så lägger du båda inserten i samma funktion.

Medlem sedan nov. 200664 inlägg
#10

I tabellen present har jag artNummer som ensam primärnyckel och i passar är artNummer tillsammans med hogTidsNamn primärnyckel. Jag har bara auto increment på present-tabellen.
Nu har jag båda sqlfrågorna i samma funktion och det läggs till rätt i present-tabellen men i passar-tabellen blir alltid artNummer 0 och när man ska lägga in en ny present ökas det inte på utan jag får det här felet :

"Query failed: Duplicate entry '0-Födelsedagspresent' for key 1"

Där födelsedagspresent är den första högtiden man kan kryssa i.

Sen undrar jag också om man kan "nollställa" räknaren som räknar upp på auto increment för som det är nu är artNummer i presenttabellen 25 efter alla mina test.

Medlem sedan nov. 200664 inlägg
#11

Problemet har löst sig.....

....genom att jag använde mig av mysql_insert_id(); på detta sätt:

//ansluter till databasen
	$mysqlLänk = mysql_connect($mysqlUser['server'], $mysqlUser['användarnamn'],
	$mysqlUser['lösenord']);
	mysql_select_db($mysqlUser['databas']);
	
	
	$query = mysql_query("INSERT INTO present (namn,beskrivning,bild) VALUES ('$_POST[namn]','$_POST[beskrivning]','$_POST[imgLink]')") or die(mysql_error());
	
	$artNummer = mysql_insert_id();
	
	foreach ($_POST['hogtid'] as $kategori)
	{
		$query2 = mysql_query("INSERT INTO passar (artNummer,hogtidsNamn) VALUES ('$artNummer','$kategori')") or die('Query failed: ' . mysql_error());
	}
Medlem sedan mars 20034 471 inlägg
#12

Skriv hellre HUR det löste sig! Det där är inte någon vidare hjälpsam kommentar för nästa person med liknande problem...

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)