how to Insert Primary key instead of name column in database - php

I am developing a hotel reservation system in PHP using MySQL.
I want to know how to insert primary key value instead of name in the database. user select hotel name from drop down , instead of putting hotel name in database I want to insert hotel_id.
where I have a page named with ADD New room where the user will add new rooms.
table related to add new room page is: room in MySQL
in that page, I have a form where the user has to select hotel name from a select tag which is populated dynamically from a database table named as hotels.
I want to insert hotel_id which is a foreign key in room table correspondence to the selected hotel name
Below is the code which shows select tag populated with the hotel name.
<div class="form-group">
<label class="form-label">Hotel Name</label>
<select class="form-control" name="name" id="name">
<?php
$sel_cus = "select * from hotels ";
$res_cus = mysqli_query($connection, $sel_cus);
while ($row = mysqli_fetch_array($res_cus)) {
?>
<option value="<?php echo $row['hotel_name']; ?>"><?php echo $row['hotel_name']; ?></option>
<?php
}
?>
</select>
</div>
when i insert room record in database using below code it insert hotel name instead of hotel_id. I want to insert hotel_id in room table.
Please guide me with code example. Thanks
if (isset($_POST['submit'])) {
$hotel_name = $_POST['name'];
$date = date('m-dd-yy');
$query = "INSERT INTO room (Hotel_Id, date)
VALUES ('$hotel_name ','$date')";
}

You need to use the option value. Currently you are using hotel_name as option value, change this to hotel_id and you should be fine.
<option value="<?php echo $row['hotel_id']; ?>"><?php echo $row['hotel_name'];?></option>

Related

Linking foreign keys between tables

I have two tables: TEMA e SOTTOTEMA.
In TEMA I have, as primary key, IDtema which is auto-increment.
I want it to be foreign key in the sottotema table and I wrote, in phpmyadmin, where I have my db,
ALTER TABLE sottotema ADD FOREIGN KEY (IDtema) REFERENCES tema (IDtema)
It doesn't give me errors, but the foreign key doesn't work.
I have predefined themes in a select option, and depending on the theme you choose, you can insert a sub-theme yourself.
<select id = "tema" name = "tema">
<option hidden></option>
<option value = "Animali"> Animali</option>
<option value = "Cucina"> Cucina </option>
<option value = "Sport"> Sport </option>
<option value = "Musica"> Musica </option>
<option value = "Cinema"> Cinema </option>
<option value = "Letteratura"> Letteratura </option>
</select></br>
<div id = "sottotema" style = "display:none">
<p id = "titolosottotema"> Sottotema </p>
<input type = "text" placeholder="Scrivi un sottotema" id = "st" name = "st"/>
</div>
All this obviously is inside a FORM and everything works, except for inserting the IDtema as a foreign key, in the sottotema table.
I report only the data entry queries in the db, but in my php code there is something else written, including the connection to the db obviously
<?php
$sottotema = $_POST['st'];
$query = "INSERT INTO sottotemi (nomeSottotema) VALUES ('$sottotema')";
$result = mysqli_query($mysqli, $query);
if (!$result){​​​​​​
echo "errore 1";
}​​​​​​ else {​​​​​​
$query2 = "INSERT INTO blog (titoloBlog,nomeSottotema,nomeUtente,sfondo, font, colorefont) VALUES ('$titoloblog','$sottotema',(SELECT nomeUtente FROM utentiregistrati WHERE nomeUtente = '$nomeutente'),'$sfondo','$font','$colore');";
$result2 = mysqli_query($mysqli, $query2);
if(!$result2){​​​​​​
echo 'errore 2';
}​​​​​​
?>
In the db I have already entered my predefined themes, so the idtema, primary key, is already associated with a specific theme (eg 1 - Animali, etc.).
Please help me I'm desperate !!!!!
For the foreign key to work you need to specify the foreign table identifier in the INSERT operation, otherwise the row would be orphan form the start. Instead of INSERT INTO sottotemi (nomeSottotema) VALUES ('$sottotema') you'll need to find identifier (IDtema) to the foreign table (tema) and also provide it in the INSERT operation as follows (NOTE this is a different format of the INSERT statement that consumes the results of a SELECT statement instead of using the VALUES() version):
INSERT INTO sottotemi
(nomeSottotema, IDtema)
SELECT
'$sottotema', T.IDtema
FROM tema AS T
WHERE T.nome = '$tema'

Proper way using array in this kind of situation or any expert advice?

The situation is I have a database that have a three tables, I wanted to insert data to each table using a single form.
In the database, I have three tables (table_a(profile), table_b(attributes(age,height) and table_c(favorite books(genre, title)
table_a
p_id(auto_increment)
p_name
p_surname
table_b
a_id(auto_increment)
p_id
a_age
a_height
table_c
b_id(auto_increment)
p_id
b_type
b_name
In class.php, I have three query that insert data to the three different table at the same time.
class nameOfClass{
function insertData(){
In query_1 the p_namea and p_surname is inserted to table_a
$query_1 = “ INSERT INTO table_a SET p_name=:p_name, p_surname=:p_surname”;
$stmt_1 = $this->conn->prepare(query_1);
$this->p_name=$this->p_name;
$this->p_surname=$this->p_surname;
$stmt_1->bindParam(':p_name', $this->p_name);
$stmt_1->bindParam(':p_surname', $this->p_surname);
if($stmt_1->execute()){
In query_2, p_id values was from the last inserted id on table_a and inserted to table_b along with a_age and a_height.
In the next query similar to table_b, p_id will come from the last inserted id from table_a and inserted to table_c along with b_type and b_name columns. b_type and b_values are array. because a p_name can have multiple book list.
$query_2 = "INSERT INTO table_b SET p_id=:p_id, a_age=:a_age, a_height=:a_height;
INSERT INTO table_c p_id=:p_id, b_type=:b_type, b_name=:b_name”;
$stmt_2 = $this->conn->prepare($query_2);
$this->p_id=$this->conn->lastInsertId();
$this->a_age=$this->a_age;
$this->a_height=$this->a_height;
foreach($this->b_type AS $key => $value{
$this->b_type=$value;
$this->b_name=$this->b_name[$key];
}
$stmt_2->bindParam(':p_id', $this->p_id);
$stmt_2->bindParam(':a_age', $this->a_age);
$stmt_2->bindParam(':a_height', $this->a_height);
$stmt_2->bindParam(':b_type', $this->b_type;
$stmt_2->bindParam(':b_name', $this->b_name);
if($stmt_2->execute()){
return true;
}else{
return false;
}
}
}
on the form.php, in this form it connects to db, retrieve the class, and execute the function if form was submitted
<?php
include_once 'config/database.php';
include_once 'objects/class.php';
$database = new Database();
$db = $database->getConnection();
$nameofclass = new nameOfClass($db);
if($_POST){
$nameofclass ->p_name=$_POST['p_name'];
$nameofclass ->p_surname=$_POST['p_surname'];
$nameofclass ->a_age=$_POST['a_age'];
$nameofclass ->a_height=$_POST['p_height'];
$nameofclass ->b_type=$_POST['b_type'];
$nameofclass ->b_name=$_POST['b_name'];
if($nameofclass->insertData()){
echo “success” ;
} else {
echo “error”;
}
}
<form method="post">
table_a (regular input box)
<input type="text" name="p_name">
<input type="text" name="p_surname">
table_b (regular input box)
<input type="text" name="a_age">
<input type="text" name="a_height">
table_c (dynamic add/remove input box using jquery( because a person can have multiple
books))
<input type="text" name="b_type[]">
<input type="text" name="b_name[]">
I can make it work, the two query regarding inserting data to table_a and table_b, but when I add the query about table_c that is where I get a problem I cannot make it work, it is using an array, I am not familiar with array, I am just copying codes around the web and slowly stitching them to get the result that I want.
I am not sure my code is correct. When I save it or click the submit button on query_1 is getting through which is inserting data to table_a.

How to insert row id to another table field using php mysql?

I have first table name is conference.
I want to insert table conference row id (81) to another second table name conf_dates
and that have field conf_id use for save conference row id
The issue is that value is empty insert in second table conf_dates as shown in second table image
Here is php code
<?php
$id = $_GET["id"];
$trans = array("strtdate"=>$strtdate,"enddate"=>$enddate,"conf_id"=>$id);
$query = $db->insert($trans,PREFIX."conf_dates");
?>
Here is html code
<p>
<label>Conference ID</label>
<input name="conf_id" class="text-input medium-input" type="text" id="conf_id" value="" />
</p>
Please tell me how to insert row id to another table field?
what are the values of $strtdate, $enddate
Also please share the table structure of "conf_dates" .
$id = intval($_GET["id"]);
check you are getting correct types, and values for variables you trying to insert
You named the input field conf_id while you try to insert $_GET['id'].
You should insert $_GET['conf_id']` instead.

Unable to select a result from drop down list

I am new to this and i am trying to write a script where it will query the DB and return all the usernames in a drop down list and then to copy out the selected name and then when you register a Dog to them it will copy the name into the DB,
So Owners can have many dogs but dog can only have 1 owner...
i can enter Name and Breed but not the results from the drop down list,
i did try to get java script to pull the selected item in drop down to be where the $ownername is in in the 'insert into...' script
can you send me a message if you can help me with this i will link you the files to download
mysql_query("INSERT INTO `dog`(`id`, `dogname`, `breed`, `owner`)
VALUES ('', '$reg_dogname', '$breed', '$row');") or die (mysql_error());
$userid = mysql_insert_id();
}}
$sql = mysql_query('SELECT `username` FROM `users`');
$ownername = array();
while ($row = mysql_fetch_array($sql)){
$ownername[] = $row;
<select id="dropdown" name="dropdown" onchange="selectDropdown()">
<?php
foreach ($ownername as $ownername1) {
?>
<option value="<?php echo $ownername1['username']?>">
<?php echo $ownername1['username']?>
</option>
<?php
}
?>
</select>
It will be difficult to give you a problem specific answer until you post your code, but I think this would work pretty well for you:
-create relational tables for owners, breeds, and dogs:
Table: owners
Fields:
id_key: integer, auto number, primary key - table index
owner: varchar, 16 character, unique index - account records (unique prevents duplicate account records)
password: varchar, 32 character (assuming you are using md5 encryption, you will always get a 32 character result. Additional security concerns are beyond the scope of this question)
any other account related fields (but not dogs, give them their own table)
Table: breeds
Fields:
id_key: integer, auto number, primary key - table index
breed: varchar, 16 character, unique - available dog breeds
Table: dogs
Fields:
id_key: integer, auto number, primary key - table index
dog: varchar, 16 character, index - dog owned by account
breed: varchar, 32 character, index, foreign key= breeds.breed on delete=restrict on update=cascade (prevents duplicate breed entries during data entry)
owner: varchar, 16 character, index, foreign key= owners.owner on delete=cascade on update=cascade (this constricts the dog owner to existing accounts)
Then make a form something like this:
<?php
$formdata=array(
owners => array(),
breeds => array()
);
require_once 'dbconnection.php';
echo '<form id="dog_input" name="dog_input" method="post">';
$result=mysql_query("SELECT `owner` FROM owners;");
while ($row = mysql_fetch_row($result)) {
array_push($formdata[owners], $row[0]);
}
$result=mysql_query("SELECT `breed` FROM breeds;");
while ($row = mysql_fetch_row($result)) {
array_push($formdata[breeds], $row[0]);
}
?>
<FORM name="dog_input" method="post" action="dog_data.php">
<ul>
<li>
<label for="owner">Dog Owner</label>
<SELECT name="owner" id="owner">
<?php
foreach ($formdata[owners] as $i) {
echo '<OPTION>'.$i.'</OPTION>';
>
?>
</SELECT>
</li>
<li>
<label for="breed">Dog Breed</label>
<SELECT name="breed" id="breed">
<?php
foreach ($formdata[breeds] as $i) {
echo '<OPTION>'.$i.'</OPTION>';
>
?>
</SELECT>
</li>
<li>
<label for="dog">Dog Name</label>
<INPUT type="text" name="dog" />
</li>
<li><INPUT type="submit" value="Submit /></li>
</ul>
</FORM>
Then you need to create the validation script that will check your results and enter safe data into the database:
<?php
/*
* dog_data.php - checks data and inserts it into the database.
*/
require_once 'dbconnection.php';
$owner = $_POST['owner'];
$breed = $_POST['breed'];
$dog = mysql_real_escape_string($_POST['owner']);
//perform any additional data validation here, use an if statement to check validation before insert query if you do so
mysql_query("INSERT INTO `dogs` (`id_key`, `owner`, `breed`, `dog`)
VALUES(DEFAULT, '".$owner."', '".$breed."', '".$dog."');");
mysql_close($con);
header(" Location: http://www.example-redirection-page.com");
?>

How can I make a web form with drop down boxes to insert data into a relational database

I'm busy trying to create a website for my football team. The thing I'm having problems with is creating a web form with drop down boxes to select and insert the match data. I'm already able to add a match in phpmyadmin where I can just select team_home and team_away, so the relational database seems to work.
I've got the following 2 tables:
Teams
id (pk - ai)
name
Matches
id (pk - ai)
date
team_home (foreign key -> table teams field name)
team_away (foreign key -> table teams field name)
score_home
score_away
So how can I make a web form with drop down boxes so I can add matches into my database?
UPDATE:
I've got the form working with drop down boxes, but I'm getting the following error when I'm submitting the form:
Error: Cannot add or update a child row: a foreign key constraint fails (roflz.matches, CONSTRAINT matches_ibfk_1 FOREIGN KEY (team_home) REFERENCES teams (name))
I've posted my submit form code and insertmatch.php code
Submit form code
$sql="SELECT id, name FROM Teams";
$result=mysql_query($sql);
$options="";
while ($row=mysql_fetch_array($result)) {
$id=$row["id"];
$name=$row["name"];
$optionshometeam.="<OPTION VALUE=\"$id\">".$name;
$optionsawayteam.="<OPTION VALUE=\"$id\">".$name;
}
?>
<form action="insertmatch.php" method="post">
<SELECT NAME=Teams>
<OPTION VALUE=0>Home Team
<?=$optionshometeam?>
</SELECT>
<SELECT NAME=Teams>
<OPTION VALUE=0>Away team
<?=$optionsawayteam?>
</SELECT>
Score Home team: <input type="text" name="score_home" />
Score Away team: <input type="text" name="score_away" />
Match Date: <input type="text" name="score_away" />
<input type="submit" />
</form>
insertmatch.php code
mysql_select_db("roflz", $con);
$sql="INSERT INTO matches (team_home, team_away, score_home, score_away, date)
VALUES
('$_POST[team_home]','
$_POST[team_away]','
$_POST[score_home]','
$_POST[score_away]'
$_POST[date]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "Match added";
mysql_close($con);
?>
So what's causing this error?
Error: Cannot add or update a child row: a foreign key constraint fails (roflz.matches, CONSTRAINT matches_ibfk_1 FOREIGN KEY (team_home) REFERENCES teams (name))
okay you have very basic problem.
i don't know much about php but i can suggest you some logical thing which you can perform.
<select>
<option value="t1">Team 1</option>
<option value="t2">Team 2</option>
<option value="t3">Team 3</option>
<option value="t4">Team 4</option>
</select>
this will create drop down box. What you need to do is to set your teams id(using php) in "value" and team name between "option" tag. The "value" of the particular selected team will be passed in request when you submit your form.
ok try out this..
<?
...
mysql cnx code
...
$sql="SELECT id, name FROM Teams";
$result=mysql_query($sql);
$options="";
while ($row=mysql_fetch_array($result)) {
$id=$row["id"];
$name=$row["name"];
$options.="<OPTION VALUE=\"$id\">".$name;
}
?>
...
html code
...
<SELECT NAME=Teams>
<OPTION VALUE=0>Choose
<?=$options?>
</SELECT>
but don't forget to wrap it with in the "form" tag.
This question is a bit broad and alot has to be cover prior to nailing the result, its almost asking how to build a website and that in itself could take years to learn. That said, these 2 links should give you what you need to get going.
W3C Forms
W3C MySql introduction and tutorials
Please note how much code is behind phpmyadmin (just go through its source code) and you will find there is no simple 1 click way off doing it.
you may try something like
<?php
$db = "database_name";
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db($db, $con);
$query = "SELECT * FROM YOUR_TABLE";
$result = mysql_query($query);
?>
Also, in your html body part, inside your form, you may use this for generating a dropdown box
<select>
<?php
while($info = mysql_fetch_array($result)){
$name = $info["table_column_name"];
echo '<option value="'.$name.'">'.$name.'</option>';
}
?>
</select>
Hope this helps.. :)
Error: Cannot add or update a child row: a foreign key constraint fails (roflz.matches, CONSTRAINT matches_ibfk_1 FOREIGN KEY (team_home) REFERENCES teams (name))
This is all you need to know, blah blah....foreign key constraint fails blah bla....REFERENCES teams
You are updating matches, but since matches uses foreign keys to teams you cannot add something in matches that is not in teams

Categories