/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Foreach i MySQL INSERT
Fra : The87Boy


Dato : 20-11-08 14:15

Er det ikke muligt at indsætte flere værdier i en MySQL-database vha.
Foreach?

Altså noget ligende dette:
foreach ($ids AS $id) {
$deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
`skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
$mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
}


Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
testet, at $ids er et array, og at den udskriver alle id som $id

 
 
Dan Storm (20-11-2008)
Kommentar
Fra : Dan Storm


Dato : 20-11-08 22:33

The87Boy skrev:
> Altså noget ligende dette:
> foreach ($ids AS $id) {
> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> }
>
>
> Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
> testet, at $ids er et array, og at den udskriver alle id som $id

Du må komme med nogle flere oplysninger.

Hvad forventer du der skal ske?
Hvad sker der i stedet for det forventede?

Umiddelbart vil jeg tro at du får flere linier i som bare er ens?


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Johan Holst Nielsen (21-11-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-11-08 09:37

The87Boy wrote:
> Er det ikke muligt at indsætte flere værdier i en MySQL-database vha.
> Foreach?
>
> Altså noget ligende dette:
> foreach ($ids AS $id) {
> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> }
>
>
> Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
> testet, at $ids er et array, og at den udskriver alle id som $id

$ids = array();
$ids[27] =
array('from'=>'abc','mpid'=>'123','skrv'=>'a','svr1'=>'1','svr2'=>'2');
$ids[128] =
array('from'=>'dfg','mpid'=>'567','skrv'=>'b','svr1'=>'10','svr2'=>'20');

foreach($ids as $id=>$info) {
$deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$info['from']."',
'".$info['mpid']."', '".$info['skrv']."', '".$info['svr1']."',
'".$info['svr2']."')");
}

Ved ikke om det er noget ala det du forestiller dig?

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

The87Boy (21-11-2008)
Kommentar
Fra : The87Boy


Dato : 21-11-08 02:20

On 20 Nov., 22:33, Dan Storm <shadyz_REMOVETH...@err0r.dk> wrote:
> The87Boy skrev:
>
> > Altså noget ligende dette:
> > foreach ($ids AS $id) {
> > $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> > `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> > $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> > }
>
> > Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
> > testet, at $ids er et array, og at den udskriver alle id som $id
>
> Du må komme med nogle flere oplysninger.
>
> Hvad forventer du der skal ske?
> Hvad sker der i stedet for det forventede?
>
> Umiddelbart vil jeg tro at du får flere linier i som bare er ens?

Jeg forventer, at den indsætter alle ids fra $ids med de samme
informationer ved hvert id, men den indsætter kun det første id, og så
indsætter den ikke mere
Den indsætter ikke samme id flere gange, da denne er unik

Dan Storm (21-11-2008)
Kommentar
Fra : Dan Storm


Dato : 21-11-08 10:37

The87Boy skrev:
> Jeg forventer, at den indsætter alle ids fra $ids med de samme
> informationer ved hvert id, men den indsætter kun det første id, og så
> indsætter den ikke mere
> Den indsætter ikke samme id flere gange, da denne er unik

Prøv at gøre således:
foreach( $ids AS $id )
{
   $sql = "
   INSERT INTO
      Id
         (
            id,
            fraid,
            mappeid,
            skrevet,
            svar1,
            svar2
         )
   VALUES
         (
            '".$id."',
            '".$from."',
            '".$mpid."',
            '".$skrv."',
            '".$svr1."',
            '".$svr2."'
         )
   ";
   if( !mysql_query($sql) )
      echo "Fejl ved id ".$id.": ".mysql_error()."<br />";
   else
      echo "Indsat id ".$id." korrekt.<br />";
}

og så se om den ikke skriver noget ud til dig.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

The87Boy (21-11-2008)
Kommentar
Fra : The87Boy


Dato : 21-11-08 02:21

On 21 Nov., 09:37, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> The87Boy wrote:
> > Er det ikke muligt at indsætte flere værdier i en MySQL-database vha.
> > Foreach?
>
> > Altså noget ligende dette:
> > foreach ($ids AS $id) {
> > $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> > `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> > $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> > }
>
> > Ovenstående er testen, men det virker ikke efter hensigten, og jeg har
> > testet, at $ids er et array, og at den udskriver alle id som $id
>
> $ids = array();
> $ids[27] =
> array('from'=>'abc','mpid'=>'123','skrv'=>'a','svr1'=>'1','svr2'=>'2');
> $ids[128] =
> array('from'=>'dfg','mpid'=>'567','skrv'=>'b','svr1'=>'10','svr2'=>'20');
>
> foreach($ids as $id=>$info) {
>    $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$info['from']."',
> '".$info['mpid']."', '".$info['skrv']."', '".$info['svr1']."',
> '".$info['svr2']."')");
>
> }
>
> Ved ikke om det er noget ala det du forestiller dig?

Det er det ikke, da det kun er idét, der forandres ikke de andre
variabler

Johan Holst Nielsen (21-11-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-11-08 10:24

The87Boy wrote:
>> foreach($ids as $id=>$info) {
>> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
>> skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$info['from']."',
>> '".$info['mpid']."', '".$info['skrv']."', '".$info['svr1']."',
>> '".$info['svr2']."')");
>>
>> }
>>
>> Ved ikke om det er noget ala det du forestiller dig?
>
> Det er det ikke, da det kun er idét, der forandres ikke de andre
> variabler

$skrv = 'foo';
$svr1 = 'bar';
$svr2 = 'bar2';
$mpid = '123';

$ids = array(1,2,3,4,5,6,7);
foreach($ids as $id) {
mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`, `skrevet`,
`svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".$mpid."',
'".$skrv."', '".$svr1."', '".$svr2."')");
}

Virker - med mindre du har en fejl i din SQL.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 10:38



N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 10:24



The87Boy (21-11-2008)
Kommentar
Fra : The87Boy


Dato : 21-11-08 02:28

On 21 Nov., 10:24, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> The87Boy wrote:
> >> foreach($ids as $id=>$info) {
> >>    $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> >> skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$info['from']."',
> >> '".$info['mpid']."', '".$info['skrv']."', '".$info['svr1']."',
> >> '".$info['svr2']."')");
>
> >> }
>
> >> Ved ikke om det er noget ala det du forestiller dig?
>
> > Det er det ikke, da det kun er idét, der forandres ikke de andre
> > variabler
>
> $skrv = 'foo';
> $svr1 = 'bar';
> $svr2 = 'bar2';
> $mpid = '123';
>
> $ids = array(1,2,3,4,5,6,7);
> foreach($ids as $id) {
>    mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`, `skrevet`,
> `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".$mpid."',
> '".$skrv."', '".$svr1."', '".$svr2."')");
>
> }
>
> Virker - med mindre du har en fejl i din SQL.

Jeg har testet på alle mulige måder, om der skulle være en fejl, men
det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
Er der ellers andre måder, jeg kan gøre det på?

Johan Holst Nielsen (21-11-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-11-08 10:38

The87Boy wrote:
>>
>> Virker - med mindre du har en fejl i din SQL.
>
> Jeg har testet på alle mulige måder, om der skulle være en fejl, men
> det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
> Er der ellers andre måder, jeg kan gøre det på?

Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.

Upload evt. en .phps til din server og send et link - husk at fjerne
evt. passwords fra sourcen.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 10:58



N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 10:37



The87Boy (21-11-2008)
Kommentar
Fra : The87Boy


Dato : 21-11-08 02:42

On 21 Nov., 10:37, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> The87Boy wrote:
>
> >> Virker - med mindre du har en fejl i din SQL.
>
> > Jeg har testet på alle mulige måder, om der skulle være en fejl, men
> > det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
> > Er der ellers andre måder, jeg kan gøre det på?
>
> Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
> ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.
>
> Upload evt. en .phps til din server og send et link - husk at fjerne
> evt. passwords fra sourcen.

Det var alligevel MySQL'en, der var fejl
Det var det andet id, jeg havde glemt en auto_increment på

Johan Holst Nielsen (21-11-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-11-08 10:58

The87Boy wrote:
> On 21 Nov., 10:37, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
>> The87Boy wrote:
>>
>>>> Virker - med mindre du har en fejl i din SQL.
>>> Jeg har testet på alle mulige måder, om der skulle være en fejl, men
>>> det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
>>> Er der ellers andre måder, jeg kan gøre det på?
>> Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
>> ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.
>>
>> Upload evt. en .phps til din server og send et link - husk at fjerne
>> evt. passwords fra sourcen.
>
> Det var alligevel MySQL'en, der var fejl
> Det var det andet id, jeg havde glemt en auto_increment på

Hehe fair nok. Som Dan også skriver - så kan et output af mysql_error()
typisk hjælpe dig med den slags fejl...

evt blot

mysql_query($sql) or die(mysql_error());

Så er jeg sikker på du havde fanget fejlen betydeligt hurtigere.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

N/A (21-11-2008)
Kommentar
Fra : N/A


Dato : 21-11-08 11:22



The87Boy (21-11-2008)
Kommentar
Fra : The87Boy


Dato : 21-11-08 03:17

On 21 Nov., 10:58, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> The87Boy wrote:
> > On 21 Nov., 10:37, Johan Holst Nielsen <s...@phpgeek.dk> wrote:
> >> The87Boy wrote:
>
> >>>> Virker - med mindre du har en fejl i din SQL.
> >>> Jeg har testet på alle mulige måder, om der skulle være en fejl, men
> >>> det er der ikke :( Ellers kan jeg ihvertfald ikke finde den
> >>> Er der ellers andre måder, jeg kan gøre det på?
> >> Du bliver nødt til at vise mig hele sourcen så... der er i hvert fald
> >> ikke en fejl i de cirka 10 linjer jeg skrev - med mindre det er i SQL'en.
>
> >> Upload evt. en .phps til din server og send et link - husk at fjerne
> >> evt. passwords fra sourcen.
>
> > Det var alligevel MySQL'en, der var fejl
> > Det var det andet id, jeg havde glemt en auto_increment på
>
> Hehe fair nok. Som Dan også skriver - så kan et output af mysql_error()
> typisk hjælpe dig med den slags fejl...
>
> evt blot
>
> mysql_query($sql) or die(mysql_error());
>
> Så er jeg sikker på du havde fanget fejlen betydeligt hurtigere.

Okay, kan den oplyse det?

Johan Holst Nielsen (21-11-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-11-08 11:22

The87Boy wrote:
>> mysql_query($sql) or die(mysql_error());
>>
>> Så er jeg sikker på du havde fanget fejlen betydeligt hurtigere.
>
> Okay, kan den oplyse det?

Den vil i hvert fald komme med en fejl som vil lede sig rigtigt.

1. Du ved det er i SQL'en der er fejl
2. Den vil formentlig fortælle at din ID ikke er unikt selvom du har sat
det til primary key.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Leif Neland (21-11-2008)
Kommentar
Fra : Leif Neland


Dato : 21-11-08 12:49


"The87Boy" <the87boy@gmail.com> skrev i en meddelelse
news:cf8e77d4-ea8b-4933-affa-0452f6b2a984@x14g2000yqk.googlegroups.com...
> Er det ikke muligt at indsætte flere værdier i en MySQL-database vha.
> Foreach?

> Altså noget ligende dette:
> foreach ($ids AS $id) {
> $deb = mysql_query("INSERT INTO `Id` (`id`, `fraid`, `mappeid`,
> `skrevet`, `svar1`, `svar2`) VALUES ('".$id."', '".$from."', '".
> $mpid."', '".$skrv."', '".$svr1."', '".$svr2."')");
> }

Den SQL-inject-sikrede metode, der bruger mysqli og prepared statements

$db = new mysqli("localhost", "db_username", "db_password", "db_name");
if (mysqli_connect_errno())
{
die("Connect failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO `Id` (`id`, `fraid`, `mappeid`,`skrevet`, `svar1`,
`svar2`) values (?,?,?,?,?,?)
if ($stmt = $db->prepare($sql))
{
$stmt->bind_param("iiisss", $id, $from, $mpid, $skrv,$svr1,$svr2);
foreach($ids as $id) {
$stmt->execute();
}
$stmt->close();
}
else
{
die("Could not prepare SQL statement: $sql");
}
$mysqli->close();

Leif



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste