Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySql array-ongelma

Sivun loppuun

JimProfit [17.02.2011 17:37:18]

#

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>

Teuro [17.02.2011 17:49:36]

#

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.

JimProfit [17.02.2011 18:00:56]

#

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

The Alchemist [17.02.2011 18:05:45]

#

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']);

JimProfit [17.02.2011 18:17:39]

#

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.

Metabolix [17.02.2011 18:24:38]

#

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);
  }
}

JimProfit [17.02.2011 18:46:23]

#

Minkälaisia muutoksia mun pitäs tehdä tohon koodiin että saisin ton silmukan toimimaan ?

-tossu- [17.02.2011 19:17:40]

#

Poista //execute SQL-statement.- ja mysql_close-rivien välissä oleva koodi ja laita Metabolixin koodi niiden väliin.

JimProfit [17.02.2011 20:07:48]

#

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);
  }
}

-tossu- [17.02.2011 20:13:56]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta