aggiornamento dati su tabelle collegate

megarospo

Utente Attivo
25 Set 2007
147
0
0
Ho 2 tabelle. Una chiamata "Utenti" con tre campi: id, nome, Cognome.
Una intitolata "Clienti", con vari campi tra cui: id, ragionesociale, idUtenti (questo campo è collegato a Id della tabella Utenti).
con un form php permetto ad un utente, dopo il login, di inserire un cliente. Tutto bene, solo che il campo IdUtente rimane vuoto.
Come posso far inserire l'Id dell'utente nella tabella clienti?
Grazie!
 


Come lo useresti in questo codice?
<?php require_once('Connections/database.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",

$theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" :

"NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO clienti (Nome, Cognome, RagSoc) VALUES (%s,

%s, %s)",
GetSQLValueString($_POST['Nome'], "text"),
GetSQLValueString($_POST['Cognome'], "text"),
GetSQLValueString($_POST['RagSoc'], "text"),

mysql_select_db($database_database, $database);
$Result1 = mysql_query($insertSQL, $database) or die(mysql_error());

$insertGoTo = "Agenti/AgentiLoginOK.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>
<p>Inserimento clienti </p>
<p>&nbsp;</p>

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<table align="center">
<tr valign="baseline">
<td nowrap align="right">&nbsp;</td>
<td><input name="id" type="hidden" value="" /></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Nome del Referente o Direttore:</td>
<td><input type="text" name="Nome" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Cognome :</td>
<td><input type="text" name="Cognome" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">RagSoc:</td>
<td><input type="text" name="RagSoc" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">&nbsp;</td>
<td><input type="submit" value="Inserisci record"></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1">
</form>
<p>&nbsp;</p>


l'errore finale che ricevo al momento della conferma di diserimento è:
Cannot add or update a child row: a foreign key constraint fails

da cosa è causato?
Grazie.:)
 
Ma sbaglio o nel tuo codice viene richiamata una sola tabella?

Si. Non sbagli. Essendo le tabelle collegate credevo che l'id dell'utente che inseriva il nuovo record venisse inserito in automatico.
come posso correggerlo?
dell'errore che ricevo che ne pensi? (Cannot add or update a child row: a foreign key constraint fails)
Grazie.
 
1) Dopo che effettui la prima query ne esegui un'altra sulla seconda tabella, per ricarvarti l'id della prima utilizzando mysql_insert_id() semplcemente associandola come valore ad una variabile subito dopo l'esecuzione della INSERT.

2) Cannot add or update a child row si verifica di solito quando cerchi di inserire chiavi esterne in una tabella MyIsam, dovresti attivare il supporto innoDB:
mysqld_safe --user=root --default-storage-engine=InnoDB
 
Grazie Eliox. il fatto è che sono agli inizi e quindi ho molte difficoltà anche a eseguire i tuoi consigli. devo proprio fare pratica.
Grazie per il tuo aiuto.
 

Discussioni simili