2017-04-01 2 views
1

zu speichern erstelle ich einen Code wie dieserwie Array String-Konvertierung zu lösen, wenn versuchen, Daten in der Datenbank

$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> 

meines Datenbank-Code wie diese

<?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>"; 
?> 

i var_dump und das Ergebnis laufen versuchen, wie diese

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" } } 

Fehler angezeigt enter image description here Tabelle zu Hause Desain enter image description here Datenbanktabelle enter image description here

+0

Zunächst einmal entfernt werden Verwenden Sie nicht ** mysql _ ***, da sie veraltet sind.Verwenden Sie stattdessen mysqli oder PDO –

+0

Ihr Code ist [weit offen für SQL-Injection] (http://stackoverflow.com/documentation/php/5828/pdo/2685/preventing-sql-injection-with-parameterized-queries). Bitte [stoppen Sie die Verwendung von MySQL-Funktionen, wie sie aus PHP entfernt wurden] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – Machavity

Antwort

0

allererste Verwenden mysql_ nicht * als ther ist veraltet. Verwenden Sie stattdessen mysqli oder PDO. Der Fehler ist hier:

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

als

["alternatif"]=> array(2) 

und Sie können nicht direkt ein Array in einer Tabellenspalte einfügen.

+0

dann, wie Sie diesen Fehler beheben ? – Jazuly

+0

Iterate drüber oder benutze Index wie [0], [1] –

0

Es gibt zwei Möglichkeiten, um Ihre Frage zu beantworten:

(1) Wandeln Sie einen Array in einer String-Darstellung serialize()

In Ihrem Beispiel verwenden, das wäre so etwas wie:

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

Wenn Sie diese Werte aus der Tabelle auswählen, müssen Sie natürlich deserialize() verwenden, um sie in die ursprüngliche Array-Struktur zurück zu konvertieren.

Beachten Sie, dass und deserialize() PHP-spezifische Funktion sind, während es eine schlechte Praxis ist, Datenbankwerte von einer bestimmten Implementierungssprache abhängig zu machen. Um dies zu vermeiden, möchten Sie möglicherweise json_encode() und json_decode() verwenden.

jedoch, jetzt, wo wir haben erklärt, wie technisch-Arrays, um in String konvertieren sie in einer Datenbank zu speichern, bitte meine zweite Antwort betrachten:

(2) dies nicht tun

Sie können besser über Ihr Datenbankdesign nachdenken. Auch wenn ich nicht genau weiß, was Sie vorhaben, wage ich zu sagen, dass das Speichern von Arrays als einzelner Datenbankwert ein starker Hinweis auf ein schlechtes Datenbankdesign ist. Obwohl dies Ihre Frage nicht beantwortet, würde ich empfehlen, jedes Array-Element in einer separaten Tabellenzeile zu speichern. Abhängig von Ihren Anforderungen müssen Sie möglicherweise eine zusätzliche Zeilen-ID oder Gruppen-ID-Spalte zu Ihrer Tabelle hinzufügen. Dann iteriere über das Array, um die Daten zu speichern. Zum Beispiel:

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] ."')") 
} 

Zusätzlich zu diesem, empfehle ich Ihnen die Alternativen zum mysql_ einen Blick * Funktionen bei http://php.net/manual/de/mysqlinfo.api.choosing.php, wie die sind veraltet und wird in PHP 7.

+0

Ich habe diesen Fehler
Hinweis: Verwendung von undefinierten Konstante Alternatif - angenommen "Alternatif" in – Jazuly

+0

Ah ja, sie sollten in einfache Anführungszeichen gesetzt werden. – not2savvy

+0

Hat es funktioniert? Feedback wird sehr geschätzt. – not2savvy

Verwandte Themen