2017-05-14 5 views
0

Ich versuche, einen Einsatz zu tun, wo es FK in einer Tabelle, aber es funktioniert nicht ..Php Mysql mit mehreren Fremdschlüssel einfügen

Mein db Name bd_telefonos

meine db aussieht wird dies:

Tisch marcas:

idmarcas --> PK AI

nombre

Tisch sistemas_operativos:

idsistemas_operativos -->PK AI

nombre

Tisch telefonos:

modelo

idtelefonos --> PK AI

resolucion_alto

resolucion_ancho

peso

bateria

marcas_idmarcas --> FK

sistemas_operativos_idsistemas_operativos -- > FK

Meine php sieht wie folgt aus:

<?php 

include_once('conexion/conexion.php'); 
$con = new conectar(); 

$modelo= $_POST['modelo']; 
$alto= $_POST['alto']; 
$ancho= $_POST['ancho']; 
$peso= $_POST['peso']; 
$bateria= $_POST['bateria']; 
$nombresis = $_POST['nombresis']; 
$nombremarca = $_POST['nombremarca']; 



$sSql = "INSERT INTO `bd_telefonos`.`telefonos` (`modelo`, `resolucion_alto`, `resolucion_ancho`, `peso`, `bateria`) VALUES ('$modelo', '$alto', '$ancho', '$peso', '$bateria')"; 

if(!mysqli_query($con->conectarse(), $sSql)){ 
     $resp = 'error '; 


    } 
    else{ 

     /*============================================================================= 
     =   select recently insert   = 
     =============================================================================*/ 

     $sSqlId = "SELECT MAX(id) as `id` FROM `bd_telefonos`.`telefonos`"; 

     if($respuesta = mysqli_query($con->conectarse(), $sSqlId)){ 
      foreach ($respuesta as $resp) { 
       $id = $resp['id']; 
      } 
     } 

     /*======================================================== 
     =   Insert sistemas_operativos   
     ========================================================*/ 

     $sSqlMas = "INSERT INTO `bd_telefonos`.`sistemas_operativos` (`idsistemas_operativos`, `nombre`) VALUES ('$id', '$nombresis')"; 

     if (mysqli_query($con->conectarse(), $sSqlMas)) { 
      $resp = 'success'; 
      echo $resp; 
     } else { 
      $resp = 'error'; 
      echo $resp; 
     } 


     /*======================================================== 
     =   Insert marcas    
     ========================================================*/ 


     $sSqlMass = "INSERT INTO `bd_telefonos`.`marcas` (`idmarcas`, `nombre`) VALUES ('$id', '$nombremarca')"; 
     if (mysqli_query($con->conectarse(), $sSqlMass)) { 
      $resp = 'success'; 
      $resp = 'error'; 

      echo $resp; 
     } 

    } 

    mysqli_close($con->conectarse()); 




?> 

es funktioniert nicht, es ist nur nicht Einsatz in meinem Tisch telefonos machen, was mache ich falsch?

Hilfe bitte :(

+0

"es funktioniert nicht" ist eine ziemlich imprec ise Beschreibung des Verhaltens, das beobachtet wird. Ein paar Vorschläge ... verwenden Sie mysqli_error, um die Fehlermeldung von MySQL abzurufen und den Fehler anzuzeigen oder zu protokollieren. Auch das "select max (id)" - Muster zum Abrufen des ID-Werts einer Zeile, die gerade eingefügt wurde, funktioniert beim Testen, aber es ist ein grundlegend gebrochenes Muster mit gleichzeitigen Sitzungen. Der Code scheint auch anfällig für SQL Injection zu sein. https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – spencer7593

Antwort

1

Verwenden $ conn-> insert_id statt MAX (ID).

$conn = new mysqli("hostname", "db_user_name", "db_password", "db_name"); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$modelo= $_POST['modelo']; 
$alto= $_POST['alto']; 
$ancho= $_POST['ancho']; 
$peso= $_POST['peso']; 
$bateria= $_POST['bateria']; 
$nombresis = $_POST['nombresis']; 
$nombremarca = $_POST['nombremarca']; 



$sSql = "INSERT INTO `telefonos` (`modelo`, `resolucion_alto`, `resolucion_ancho`, `peso`, `bateria`) VALUES ('$modelo', '$alto', '$ancho', '$peso', '$bateria')"; 

if ($conn->query($sSql) === TRUE) { 
    $id = $conn->insert_id; 

    /*======================================================== 
    =   Insert sistemas_operativos 
    ========================================================*/ 

    $sSqlMas = "INSERT INTO `sistemas_operativos` (`idsistemas_operativos`, `nombre`) VALUES ('$id', '$nombresis')"; 

    if ($conn->query($sSqlMas) === TRUE) { 
     echo 'success'; 
     $sistemas_operativos_id = $conn->insert_id; 
    } else { 
     echo "Error: " . $sSqlMas . "<br>" . $conn->error; 
    } 

    /*======================================================== 
    =   Insert marcas 
    ========================================================*/ 

    $sSqlMass = "INSERT INTO `marcas` (`idmarcas`, `nombre`) VALUES ('$id', '$nombremarca')"; 

    if ($conn->query($sSqlMass) === TRUE) { 
     echo 'success'; 
     $marcas_id = $conn->insert_id; 
    } else { 
     echo "Error: " . $sSqlMass . "<br>" . $conn->error; 
    } 

    /************** Update FK ***************/ 
    $update_sql = "UPDATE telefonos SET marcas_idmarcas ='$marcas_id', sistemas_operativos_idsistemas_operativos ='$sistemas_operativos_id' WHERE idtelefonos = '$id'"; 
    if ($conn->query($update_sql) === TRUE) { 
     echo 'Successfully Update'; 
    } else { 
     echo "Error: " . $update_sql. "<br>" . $conn->error; 
    } 


} else { 
    echo "Error: " . $sSql . "<br>" . $conn->error; 
} 

$conn->close(); 
+0

Ich habe diesen Fehler: 'Fehler: INSERT INTO' telefonos' ('modelo',' resolucion_alto', 'resolucion_ancho' , 'peso',' bateria') WERTE ('g', 'g', 'g', 'g', 'g') Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl ('bd_telefonos'. 'telefonos', CONSTRAINT' fk_telefonos_marcas' AUSSENSCHLÜSSEL ('marcas_idmarcas') REFERENZEN' marcas' ('idmarcas') ON LÖSCHEN KEINE AKTION AUF UPDATE KEINE AKTION)' – User100696

+0

gelöst und gearbeitet! Danke. – User100696

0

Haben Sie die folgenden zwei Spalte in telefonos Tabelle aktualisieren möchten

marcas_idmarcas --> FK 
sistemas_operativos_idsistemas_operativos -- > FK 

Sie können den letzten Einfügewert aus beiden Tabellen erhalten und in Telefonen aktualisieren Tabelle