Avatar billede CipherGuy Novice
24. oktober 2013 - 23:16 Der er 9 kommentarer og
1 løsning

Array ind i database

Hej Eksperter.
Jeg har en textarea, som jeg gerne vil have lagt ord for ord ind i min database.

Hvad jeg har gjort indtil videre:
<textarea class="text" name="content"></textarea>

$content = $_POST['content'];
$contentPieces = explode(" ", $content);

Nu vil jeg så gerne have lagt alle contentPieces ind i min database, så de ligger i hver sin række.

Håber i kan hjælpe mig!
Avatar billede arne_v Ekspert
24. oktober 2013 - 23:51 #1
Enten en INSERT per raekke eller brug af den MySQL specifikke feature hvor en enkelt INSERT kan have flere values.
Avatar billede CipherGuy Novice
25. oktober 2013 - 22:34 #2
Har du mulighed for at give et eksempel på det?
Det er jo tilfældigt hvor mange elementer der ligger i arrayet, så skal man ikke have en måde, at kalde til hvert enkelt element, så som:
INSERT INTO table
          VALUES('', '$array[element])";

?
Avatar billede arne_v Ekspert
25. oktober 2013 - 23:54 #3
du skal jo have en for loekke som itererer over array
Avatar billede cht22 Professor
03. november 2013 - 09:34 #4
Det gøres sådan:

<?php
$content = $_POST['content'];
$contentPieces = explode(" ", $content);

$db_host = "??";
$db_name = "??";
$db_user = "??";
$db_pass = "??";

$con = mysql_connect("$db_host","$db_user","$db_pass");
if (!$con) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("$db_name", $con);

for ($i = 0; $i <= (count($contentPieces)-1); $i++) {

$sql = "INSERT INTO mintabel (kolonne) VALUES ('".
str_replace("'", "''",$contentPieces[$i]).
"')";

mysql_query($sql,$con);

}

mysql_close($con);
?>

Du skal lige rette "mintabel" og "kolonne". Og indstillingerne hvor der står "??".
Avatar billede arne_v Ekspert
03. november 2013 - 15:04 #5
for ($i = 0; $i <= (count($contentPieces)-1); $i++) {

vil man normalt lave som:

for ($i = 0; $i < count($contentPieces); $i++) {

og:

str_replace("'", "''",$contentPieces[$i])

er et hack - som absolut minimum boer bruges mysql_real_escape_string, men nyere og bedre loesninger eksisterer.
Avatar billede cht22 Professor
03. november 2013 - 15:39 #6
Gør det nogen forskel om man bruger mysql_real_escape_string frem for str_replace ud over at jeg kan se at mysql_real_escape_string erstatter ' med \' og \ med \\ ?
Avatar billede arne_v Ekspert
03. november 2013 - 16:56 #7
"Other than that, how was the play, Mrs. Lincoln?"

Proev on indsaet:

'\\\\////'

og se om du kan lide hvad der bliver indsat.

Proev og indsaet:

'abc\'

og se hvad MySQL siger.

Sidstnaevnte problem kan ogsaa i mange sammenhaeng (men vistnok ikke i denne) bruges til SQL injection.

str_replace duer ikke!
Avatar billede cht22 Professor
03. november 2013 - 17:25 #8
Tak jeg kan godt se problemet.

'\\\\////' bliver til '\\////'

'abc\' kan slet ikke udføres.
Avatar billede CipherGuy Novice
04. november 2013 - 12:48 #9
Tak for svar! Jeg fik løst problemet på en lidt anden måde, men jeg vil nu gerne dele pointene imellem jer :)
Avatar billede arne_v Ekspert
05. november 2013 - 01:27 #10
svar fra mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester