Doubts with the insert

Asked

Viewed 48 times

1

I have a form to be inserted in three different tables:

<form name="customer_details" method="POST" onsubmit="return form_validation()" >
<h5><strong>Utente</strong></h5> <input type="text" id="nome" name="nome" placeholder="Primeiro e último nome" style="width:300px" required />
<h5><strong>Nº Utente</strong></h5> <input type="text" id="codigoutente" name="codigoutente" style="width:80px" required />
<h5><strong>Valência</strong></h5>
<select name="codvalencia" required>
       <option></option>
	 <?php  
$sql = "SELECT * FROM centrodb.Valencia ORDER BY Valencia ASC"; 
		$qr = mysqli_query($conn, $sql); 
		while($ln = mysqli_fetch_assoc($qr)){ 
		echo '<option value="'.$ln['CodValencia'].'"> '.$ln['Valencia'].'</option>';  
		}
	 ?>   
</select>
<h5><strong>Responsável</strong></h5> <input type="text" id="Responsavel" name="Responsavel" style="width:350px" required />
<h5><strong>Contato</strong></h5> 
<div class="input-group">
<span class="input-group-addon">351</span> <input type="text" class="input" id="Contato" name="Contato" style="width:150px" required />
</div>
<input type="submit" value="Registo"/>
</form>

Code to insert:

$nome = $_POST['nome']; 
$codigoutente = $_POST['codigoutente']; 
$codvalencia = $_POST['codvalencia']; 
$Responsavel = $_POST['Responsavel'];
$Contato = $_POST['Contato']; 

$stmt = $conn->prepare("INSERT INTO UtentesCons (`nome`,`codvalencia`,`codigoutente`) VALUES ('$nome','$codvalencia','$codigoutente')");    
mysqli_stmt_execute($stmt);

$stmt1 = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$Responsavel','$codigoutente')");    
mysqli_stmt_execute($stmt1);
$last_id = $conn->insert_id;

$stmt2 = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$Contato')");    
mysqli_stmt_execute($stmt2);

So far it’s working properly. Now I’ve added one more form before the input of submit:

<input id="botao" style="float: right;" class="botao1" onclick="addresp()" value="Adicionar Responsável"/>
 
<div id="novoresp">

</div>


<div class="teste" id="respform" hidden> 

<h5><strong>Responsável</strong></h5> <input type="text" id="Responsavel" name="Responsavel" style="width:350px"/>

<h5><strong>Contato</strong></h5> 
<div class="input-group">
<span class="input-group-addon">351</span> <input type="text" class="input" id="Contato" name="Contato" style="width:150px"/>
</div>	
</div>

I intended that if there is more than one new person in charge, form novoresp also insert into the same tables of the first form, in these two:

$stmt1 = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$Responsavel','$codigoutente')");    
mysqli_stmt_execute($stmt1);
$last_id = $conn->insert_id;

$stmt2 = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$Contato')");    
mysqli_stmt_execute($stmt2); 

2 answers

1

Speak beginner ! All good brother ? So! what would I do in your case...

You would take the data of the other guardians, usually through the $_POST.
In the PHP execution code (Where you enter your data) you would insert these new responsaveis IF there are new guardians (That is, using the IF), Come on !

$nome = $_POST['nome']; 
$codigoutente = $_POST['codigoutente']; 
$codvalencia = $_POST['codvalencia']; 
$Responsavel = $_POST['Responsavel'];
$Contato = $_POST['Contato']; 
$NOVOresponsavel = $_POST['novoResponsavel']; //Note que aqui eu mudei o ID do form para não ficar igual ao responsavel principal, então mude no codigo HTML o id.
$NOVOcontato = $_POST['novoContato']; //Mesma situacao do $NOVOresponsavel.

if ($NOVOresponsavel != null && $NOVOcontato != null){    
$stmt = $conn->prepare("INSERT INTO UtentesCons (`nome`,`codvalencia`,`codigoutente`) VALUES ('$nome','$codvalencia','$codigoutente')");    
mysqli_stmt_execute($stmt);

$stmt1 = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$Responsavel','$codigoutente')");    
mysqli_stmt_execute($stmt1);
$last_id = $conn->insert_id;

$stmt1NOVO = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$NOVOresponsavel','$codigoutente')");    
mysqli_stmt_execute($stmt1); // Vai adicionar o novo responsavel POREM com a variavel que voce pegou do novo form.


$stmt2 = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$Contato')");    
mysqli_stmt_execute($stmt2);

$stmt2NOVO = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$NOVOcontato')");    
mysqli_stmt_execute($stmt2); // Mesma situação do $stmt1NOVO.
} else {  //Ou seja, se não houver novo responsavel, roda o codigo normal 
$stmt = $conn->prepare("INSERT INTO UtentesCons (`nome`,`codvalencia`,`codigoutente`)         VALUES ('$nome','$codvalencia','$codigoutente')");    
mysqli_stmt_execute($stmt);

$stmt1 = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$Responsavel','$codigoutente')");    
mysqli_stmt_execute($stmt1);
$last_id = $conn->insert_id;

$stmt2 = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$Contato')");    
mysqli_stmt_execute($stmt2);
}

In short... the lines of code I added were...

$NOVOresponsavel = $_POST['novoResponsavel']; //Note que aqui eu mudei o ID do form para não ficar igual ao responsavel principal, então mude no codigo HTML o id.
$NOVOcontato = $_POST['novoContato']; //Mesma situacao do $NOVOresponsavel.

if ($NOVOresponsavel != null && $NOVOcontato != null){ 

$stmt1NOVO = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$NOVOresponsavel','$codigoutente')");    
mysqli_stmt_execute($stmt1); // Vai adicionar o novo responsavel POREM com a variavel que voce pegou do novo form.

$stmt2NOVO = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$NOVOcontato')");    
mysqli_stmt_execute($stmt2); // Mesma situação do $stmt1NOVO.
} else {  //Ou seja, se não houver novo responsavel, roda o codigo normal 

I hope I helped !! Good luck and great studies.

1


I came to the solution by creating two for, in the second and third insert, and making the insert_id in a array, like the countryside Responsavel and Contato of form:

$nome = $_POST['nome']; 
$codigoutente = $_POST['codigoutente']; 
$codvalencia = $_POST['codvalencia']; 
$Responsavel = $_POST['Responsavel'];
$Contato = $_POST['Contato']; 

$stmt = $conn->prepare("INSERT INTO UtentesCons (`nome`,`codvalencia`,`codigoutente`) VALUES ('$nome','$codvalencia','$codigoutente')");
mysqli_stmt_execute($stmt);

for ($i=0;$i<count($_POST["Responsavel"]);$i++) { 
$Responsavel = $_POST['Responsavel'][$i];

$stmt1 = $conn->prepare("INSERT INTO Responsaveis (`Responsavel`,`IdUtente`) VALUES ('$Responsavel','$codigoutente')");
mysqli_stmt_execute($stmt1);
$last_id_array[] = $conn->insert_id;
}

for ($i=0;$i<count($_POST["Contato"]);$i++) { 
$Contato = $_POST['Contato'][$i];
$last_id = $last_id_array[$i];

$stmt2 = $conn->prepare("INSERT INTO ContatoRes (`IdUtente`,`IdResponsavel`,`Contato`) VALUES ('$codigoutente','$last_id','351$Contato')");
mysqli_stmt_execute($stmt2);
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.