2017-04-01 78 views
1

我创建像这样如何解决数组到字符串转换的时候尽量将数据保存到数据库

<?php //Sript PHP 
$Host = "localhost"; 
$User = "root";    //Memilih user/pengguna 
$Password = "";    //Password, Biasanya Kosong 
$db  = "spkjazuly";   //Memilih Database 
$konek=mysql_connect($Host,$User,$Password)or die (mysql_error()); 
mysql_select_db ($db,$konek) or die (mysql_error("TIdak Terhubung Ke Server Mysql")); //Menghubungkan ke Mysql dan memilih Database 
mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) VALUE(DEFAULT,'$_GET[alternatif]','$_GET[nilaialternatif]','$_GET[rankingalternatif]')") //Perintah Mysql untuk mengisi tabel Tamu 
or die(mysql_error("Tidak Berhasil Menyimpan !")); //Or Die (mysql_error()) Pesan Error 
echo "<h1>Berhasil Menyimpan Data</h1>"; 
?> 

$peringkat=0; 
$ranking = array("$ATTT[0]" => "$HA[0]", "$ATTT[1]" => "$HA[1]"); 
arsort($ranking); 
foreach ($ranking as $alternatif => $nilaialternatif) { 
$peringkat++; 
echo " 
<th class='akhir'><input class='rankingakhir' type='text' name='alternatif[]' value='$alternatif' size='12' readonly></th> 
<td class='akhir'><input class='nilaiakhir' type='text' name='nilaialternatif[]' value=".number_format($nilaialternatif, 3, '.', ',')." size='12' readonly></td> 
<td class='akhir'><input class='rankakhir' type='text' name='rankingalternatif[]' value='$peringkat' size='12' readonly></td></tr>"; 

} 
echo '<div class="akhir"><input class="akhir" type="submit" value="Simpan Ranking ke Database"></div></table></div></div> 

我的数据库代码我尝试运行的var_dump代码,结果是这样

array(3) { ["alternatif"]=> array(2) { [0]=> string(12) "Alternatif 1" [1]=> string(12) "Alternatif 2" } ["nilaialternatif"]=> array(2) { [0]=> string(5) "0.628" [1]=> string(5) "0.372" } ["rankingalternatif"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } } 

错误显示 enter image description here 表活desain enter image description here 数据库表 enter image description here

+0

首先来去除不要使用** mysql _ ***,因为它已被弃用。使用mysqli或PDO代替 –

+0

您的代码[可广泛应用于SQL注入](http://stackoverflow.com/documentation/php/5828/pdo/2685/preventing-sql-injection-with-parameterized-queries)。请[停止使用mysql_函数,因为它们从PHP中删除](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – Machavity

回答

0

首先,不要使用mysql_ *作为疗法已被弃用。改用mysqli或PDO。该错误是在这里:

VALUE(DEFAULT,'$_GET[alternatif]','$_GET[nilaialternatif]','$_GET[rankingalternatif]')") 

["alternatif"]=> array(2) 

,你不能直接插入表中的列的数组。

+0

然后,如何解决这个错误? – Jazuly

+0

迭代它或使用索引像[0],[1] –

0

有两种方法来回答你的问题:

(1)将数组使用serialize()

在您的例子字符串表示,这将是这样的:

mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
"VALUE(DEFAULT,'". serialize($_GET['alternatif']) ."','". serialize($_GET['nilaialternatif']) ."','". serialize($_GET['rankingalternatif']) ."')") 

当然,从表中选择这些值时,必须使用deserialize()将它们转换回原始数组结构。

请注意,serialize()deserialize()是PHP特定的函数,但数据库值取决于特定的实现语言是不好的做法。为了避免这种情况,您可能更愿意使用json_encode()json_decode()

然而,现在,我已经解释了如何在技术上转换数组到字符串,以便将它们存储在数据库中,请考虑我的第二个答案:

(2)不要这样做

你可能更好地考虑你的数据库设计。即使不知道你打算做什么,我敢说,将数组存储为单个数据库值是数据库设计不良的有力指示。虽然这并不能真正回答你的问题,但我建议将每个数组元素存储在一个单独的表格行中。根据您的需要,您可能需要在表格中添加额外的行ID或组ID列。然后遍历数组来存储数据。例如:

for ($i = 0; $i < count($_GET[alternatif]; $i++) { 
    mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
    "VALUE(DEFAULT,'". $_GET['alternatif'][$i] ."','". $_GET['nilaialternatif'][$i] ."','". $_GET['rankingalternatif'][$i] ."')") 
} 

除此之外,我建议你看看替代的mysql_ *函数在http://php.net/manual/de/mysqlinfo.api.choosing.php,那些被取消,并将在PHP 7

+0

我得到这个错误
注意:使用undefined常量alternatif - 假设'alternatif'在 – Jazuly

+0

啊是的,他们应该用单引号。 – not2savvy

+0

它工作?反馈非常感谢。 – not2savvy

相关问题