Terve
Osaisko joku auttaa minua tälläisessa MySql-tiedonvienti ongelmassa.
Mulla on lomakkeessa, ns. lisääntyvä kenttä, mihin saa nappia painamalla lisää samoja kenttiä lisätietoja varten. Miten saisin nämä tiedot järkevästi mysql tietokantaan. Nyt kun yritän, tietokannan kentissä lukee vain Array.
Tietokannassa on kentät: id, name, code
Alla koodia:
Tiedon syöttösivu:
<html> <head> <title> </title> <script type="text/javascript"> function addTab(tabId,theBtn){ var newTab = document.getElementById(tabId).cloneNode(true); theBtn.parentNode.insertBefore(newTab,theBtn); var arr = newTab.getElementsByTagName("input"); for (var i = 0; i < arr.length; ++i) { arr[i].value = ""; } } </script> </head> <body> <form method="post" action="http://localhost/mysql/save.php"> <div id="Rakennukset"> Name:<input type="text" name="name[]"><br> Code:<input type="text" name="code[]"><br> </div> <input type="button" value="Lisää uusi nimi" onClick="addTab('Rakennukset',this)"> <input type="submit" value="lisää taulukkoon"> </form> </body> </html>
php-file joka vie tiedon mysql-tietokantaan:
<?php //read input value. $name=$_POST['name']; $code=$_POST['code']; //open connection to database-server. $dbconnection=mysql_pconnect("localhost", "root"); if(!$dbconnection) { print "error opening database"; exit; } //select your own database. if(!mysql_select_db("test")) { print "could not find database test"; mysql_close($dbconnection); exit; } //execute SQL-statement. $sql="INSERT INTO Course (name,code) VALUES ('$name','$code')"; if (!mysql_query($sql,$dbconnection)) { print "error executing SQL-statement" . mysql_error(); } mysql_close($dbconnection); ?> <a href="http://localhost/mysql/retrieve.php">Tulosta taulukko</a>
Kokeile mitä noissa taulukoissa on.
<?php var_dump($_POST); ?>
Periaate on kuitenkin se, että lisäät kantaan sen verran dataa mitä annatkin. Nythän tilanne on se että sinulla on vain yksi insert rivi, vaikka olet ehkä syöttänyt 3-riviä lomakkeen kautta.
Joo tolla ne näyttää purkautuvan
$sql="INSERT INTO Course (name,code) VALUES ('$name[0]','$code[0]')";
...ja jne..
Pitää seuraavaksi miettiä hieman tota tietokanta-rakennetta.
Kiitos
Sulla on koodissasi pahemman luokan tietoturvareikä. Sinun täytyy varmistaa käyttäjän antamat syötteet ennen kuin käytät niitä SQL-kyselyissä.
$name = mysql_real_escape_string($_POST['name']); $code = mysql_real_escape_string($_POST['code']);
Miten toi insert rivi olisi järkevin toteuttaa, jottai sais kaikein syötetyn tiedon sinne mysql ään?
Näin se ei näytä toimivan oikein, jättää ton ensinmäinen arvon tallettamatta.
$sql="INSERT INTO Course (name,code) VALUES ('$name[0]','$code[0]')"; $sql="INSERT INTO Course (name,code) VALUES ('$name[1]','$code[1]')";
Mod. lisäsi kooditagit.
No tuossahan sinulla on kaksi erillistä SQL-lausetta, joten sinun pitäisi ajaa molemmat erikseen mysql_query-funktiolla.
Silmukka voisi olla hyvä ratkaisu:
foreach ($_POST["name"] as $i => $name) { if (!isset($_POST["code"][$i])) { trigger_error("Missing code[$i] (name[$i] = $name)", E_USER_WARNING); continue; } $code = $_POST["code"][$i]; $name = mysql_real_escape_string($name); $code = mysql_real_escape_string($code); $sql = "INSERT INTO plaa VALUES ('$name', '$code')"; if (!mysql_query($sql)) { $error = mysql_error(); trigger_error("MySQL error: $error, query: $sql", E_USER_ERROR); } }
Minkälaisia muutoksia mun pitäs tehdä tohon koodiin että saisin ton silmukan toimimaan ?
Poista //execute SQL-statement.
- ja mysql_close
-rivien välissä oleva koodi ja laita Metabolixin koodi niiden väliin.
Jep, kiitos sain mä sen nyt toimimaan.
foreach ($_POST["name"] as $i => $name) { if (!isset($_POST["code"][$i])) { trigger_error("Missing code[$i] (name[$i] = $name)", E_USER_WARNING); continue; } $code = $_POST["code"][$i]; $name = mysql_real_escape_string($name); $code = mysql_real_escape_string($code); $sql = "INSERT INTO Course (name,code) VALUES ('$name', '$code')"; if (!mysql_query($sql)) { $error = mysql_error(); trigger_error("MySQL error: $error, query: $sql", E_USER_ERROR); } }
JimProfit kirjoitti:
En mä vieläkään saa tätä oikein toimimaan. Antaa tälläisen virheen:
Fatal error: MySQL error: Column count doesn't match value count at row 1, query: INSERT INTO Course VALUES ('ddssd', 'sdds') in C:\wamp\www\mysql\save.php on line 46
Virhe johtuu SQL-kyselystä, muuta se alkuperäiseksi.
$sql = "INSERT INTO Course (name, code) VALUES ('$name', '$code')";
Edit: Olin näköjään liian hidas.
Aihe on jo aika vanha, joten et voi enää vastata siihen.