2016-08-29 5 views
2

Ich erstelle ein Formular, um Daten in die Legementtabelle und die beleuchtete Tabelle einzufügen, und auch Tabelle espace. Ich versuche, Daten in all diesen Tabellen einzufügen, wie in dem Bild verbunden sind enter image description hereFehler mit einer Fremdschlüsseleinschränkung schlägt fehl

, aber ich bin immer diese Fehlermeldung:

Warning: mysql_insert_id() expects parameter 1 to be resource, object given in F:\-- SOFTWARE\WEB-SERVER\esyphp\ep0002\data\localweb\school\buckup\BU-Projet\0008\ajoutez.php on line 88 
ERROR: Could not able to execute INSERT INTO logement(Titre, AdresseLogement, Prix, NombrePerson, idTypeLogement) VALUES ('hgfrte','125669 hgfer','1236','33',''). Cannot add or update a child row: a foreign key constraint fails (`yandexd`.`logement`, CONSTRAINT `FK_Logement_idTypeLogement` FOREIGN KEY (`idTypeLogement`) REFERENCES `typedelogement` (`idTypeLogement`)) ERROR: Could not able to execute INSERT INTO lit(idLit, TypeDeLit) VALUES ('','kanape, canape'). Cannot add or update a child row: a foreign key constraint fails (`yandexd`.`lit`, CONSTRAINT `FK_Lit_idLogement` FOREIGN KEY (`idLogement`) REFERENCES `logement` (`idLogement`)) 

mein PHP-Code ist

if(isset($_POST['Submit'])){ 
 
/* Attempt MySQL server connection. Assuming you are running MySQL 
 
server with default setting (user 'root' with no password) */ 
 
$link = @mysqli_connect("localhost", "root", "", "yandexd"); 
 
    
 
// Check connection 
 
if($link === false){ 
 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
 
} 
 

 
switch ($_POST['logm-type']) { 
 
    case "Maison": 
 
     $_POST['logm-type'] = 1; 
 
     break; 
 
    case "Appartement": 
 
     $_POST['logm-type'] = 2; 
 
     break; 
 
    case "Chambre_privée": 
 
     $_POST['logm-type'] = 3; 
 
     break; 
 
    case "Chambre_partagée": 
 
     $_POST['logm-type'] = 4; 
 
     break; 
 
} 
 

 

 
$sql = "INSERT INTO logement(Titre, AdresseLogement, Prix, NombrePerson, idTypeLogement) 
 
\t VALUES ('".$_POST['logm-titre']."','".$_POST['logm-adresse']."','".$_POST['logm-prix']."','".$_POST['logm-personne']."','".$_POST['logm-type']."')"; 
 

 

 
$thelogm_id = mysql_insert_id($link); 
 

 
$sql1 = "INSERT INTO espace(TypeDEspace, idLogement) 
 
\t VALUES ('".$_POST['logm-espace']."','".$thelogm_id."')"; 
 

 

 
$sql2 = "INSERT INTO lit(TypeDeLit, idLogement) 
 
\t VALUES ('".$_POST['logm-typelit']."','".$thelogm_id."')"; 
 

 

 
if(mysqli_query($link, $sql)){ 
 
    echo "Le logement est ajouté."; 
 
} else{ 
 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
 
} 
 
if(mysqli_query($link, $sql1)){ 
 
    echo "Le logement est ajouté."; 
 
} else{ 
 
    echo "ERROR: Could not able to execute $sql1. " . mysqli_error($link); 
 
} 
 
if(mysqli_query($link, $sql2)){ 
 
    echo "Le logement est ajouté."; 
 
} else{ 
 
    echo "ERROR: Could not able to execute $sql2. " . mysqli_error($link); 
 
} 
 
    
 
// close connection 
 
mysqli_close($link); 
 
} 
 
     else {

Ich versuchte alle Lösung auf Stackoverflow gefunden, b Ich kann das Problem nicht lösen

+0

Ihr Fehler erwähnt 'mysql', während Sie' mysqli' verwenden, haben Sie das überprüft? – RST

+0

ich verwende mysql – Bynd

+0

Ja, Sie verwenden MySQL als Ihre Datenbank-Engine, aber mysql_insert_id() ist keine gültige Funktion für mysqli. –

Antwort

0

Wenn der Client Ihnen eine Zeichenfolge in logm-type sendet, die nicht genau einer der vier in Ihrer switch-Anweisung genannten übereinstimmt, wird Ihr Code die Zeichenfolge übergeben, die er Ihnen gegeben hat Wenn es sich um die ID handelt, ist die Fehlermeldung, die Sie sehen, der beste Fall.

Ihr Code verwendet POST-Werte in SQL-Abfragen direkt, was keine gute Idee ist - was ist, wenn der Client (versehentlich oder absichtlich) ein Apostroph enthält?

+0

Dies ist ein Kommentar keine Antwort – RST

+0

Erster Absatz ist die Antwort. Zweitens war nur ein Ratschlag, der relevant erschien. –

0

jetzt geändert i um den Code zu

$sql = "INSERT INTO logement(Titre, AdresseLogement, Prix, NombrePerson, idTypeLogement) 
 
\t \t VALUES ('".$_POST['logm-titre']."','".$_POST['logm-adresse']."','".$_POST['logm-prix']."','".$_POST['logm-personne']."','".$_POST['logm-type']."')"; 
 

 

 
$thelogm_id = mysql_insert_id($link); 
 

 
$sql1 = "INSERT INTO espace(TypeDEspace, idLogement) 
 
\t \t VALUES ('".$_POST['logm-espace']."','".$thelogm_id."')"; 
 

 

 
$sql2 = "INSERT INTO lit(TypeDeLit, idLogement) 
 
\t \t VALUES ('".$_POST['logm-typelit']."','".$thelogm_id."')";

aber ich diesen Fehler

Warnung empfangen hat: mysql_insert_id() erwartet Parameter 1 in F bestimmte Ressource, zu lösende Aufgabe: - SOFTWARE \ WEB-SERVER \ esyphp \ ep0002 \ daten \ localweb \ school \ buckup \ BU-Projet \ 0008 \ ajoutez.php in Zeile 87 Le logement est ajoute.Le logement est ajoute.ERROR: Konnte nicht ausgeführt werden EINFÜGEN IN TO lit (TypeDeLit, idLogement) WERTE ('Sofa, Canape, beleuchtet', ''). Es kann kein Kind Zeile hinzufügen oder aktualisieren: ein Fremdschlüssel fehlschlägt (. yandexdlit, CONSTRAINT FK_Lit_idLogement FOREIGN KEY (idLogement) LITERATUR logement (idLogement))

+0

Sie sollten Änderungen, die Sie vornehmen, zu Ihrem ursprünglichen Beitrag hinzufügen und sie nicht als Antwort hinzufügen. Bitte entfernen Sie diese Antwort. – RST

+0

Wie ich es entferne – Bynd

0

Ihre Berufung mysql_insert_id in der richtigen Reihenfolge. Es gibt die generierte ID von der letzten erfolgreichen Abfrage zurück, was bedeutet, dass Sie zuerst $ sql ausführen müssen.

Try this:

// this declares the sql query, but hasn't executed it. 
$sql = "INSERT INTO logement(Titre, AdresseLogement, Prix, NombrePerson, idTypeLogement) 
    VALUES ('".$_POST['logm-titre']."','".$_POST['logm-adresse']."','".$_POST['logm-prix']."','".$_POST['logm-personne']."','".$_POST['logm-type']."')"; 

// this executes the sql. Now mysql_insert_id can fetch the id. 
if(mysql_query($link, $sql)){ 
    echo "Le logement est ajouté."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// call mysql_insert_id after executing $sql, otherwise you'll just get null 
$thelogm_id = mysql_insert_id($link); 
if(is_null($thelogm_id)){ 
    echo "ERROR: no id". 
} 

$sql1 = "INSERT INTO espace(TypeDEspace, idLogement) 
    VALUES ('".$_POST['logm-espace']."','".$thelogm_id."')"; 


$sql2 = "INSERT INTO lit(TypeDeLit, idLogement) 
    VALUES ('".$_POST['logm-typelit']."','".$thelogm_id."')"; 

if(mysqli_query($link, $sql1)){ 
    echo "Le logement est ajouté."; 
} else{ 
    echo "ERROR: Could not able to execute $sql1. " . mysqli_error($link); 
} 

Seien Sie sich bewusst, wenn die Abfrage für $ sql nicht Sie werden nicht sql2 $ sql1 und $ ausgeführt werden soll.

+0

Ich erhalte diesen Fehler: Warnung: mysql_query() erwartet Parameter 1 als String, Objekt in F angegeben: \ - SOFTWARE \ WEB-SERVER \ esyphp \ ep0002 \ data \ localweb \ school \ buckup \ BU-Projet \ 0010 \ ajoutez.php on line 88 FEHLER: INSERT INTO logement konnte nicht ausgeführt werden (Titre, AdresseLogement, Prix, NombrePerson, idTypeLogement) VALUES ('bestes Haus', '123 moncton', '500 ',' 6 ',' 4 '). Warnung: mysql_insert_id() erwartet Parameter 1 als Ressource, Objekt in F: \ - SOFTWARE \ WEB-SERVER \ esyphp \ ep0002 \ daten \ localweb \ school \ buckup \ BU-Projet \ 0010 \ ajoutez.php online 95 FEHLER: no idLe logement est ajouté. – Bynd

+0

Wie andere darauf hingewiesen haben, verbinden Sie sich mit mysqli_connect. Dies gibt ein mysqli OBJECT zurück. Sie müssen entweder Ihren Code in mysqli konvertieren oder Ihre Verbindung mit mysql_connect() erstellen, die eine REFERENCE zurückgibt. Hier ist ein Link zur mysqli php Seite http://php.net/manual/en/book.mysqli.php. Wenn dies keine Option für Sie ist, ändern Sie @mysqli_connect ("localhost", "root", "", "yandexd"); zu @mysql_connect ("localhost", "root", "", "yandexd"). – serverSentinel

Verwandte Themen