Ändra din andra insert till
"INSERT INTO passar VALUES ('$kategori')"
Det är ju i variabeln kategori du hittar de successiva, valda värdena.
11 svar · 475 visningar · startad av altruism
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);
?>
Ändra din andra insert till
"INSERT INTO passar VALUES ('$kategori')"
Det är ju i variabeln kategori du hittar de successiva, valda värdena.
Dessutom så heter formulär-elementet: hogtid[] och inte hogtid
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.
Så rätt så, jag som inte tänkte mig för
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. :)
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;
}
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.
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.
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());
}
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...