Jump to content

Php foreach loop with multiple variables


miguelfsf
Go to solution Solved by dalecosp,

Recommended Posts

Hello,

 

This is my form:

<form name="form" action="..."><div style="border:1px solid grey;">
    <b>Song Name'.$i.':</b> <input type="text" name="song[]">
    Link 1: <input type="text" name="link1[]"><br>
    Link2: <input type="text" name="link2[]"><br>
    Link3: <input type="text" name="link3[]"><br>
    </div>
</form>
 
This is my code:
foreach($_POST['song'] as $item1){

   //INSERT CODE for songname,link1,link2 and link3
}
 
My for each loop is only optimized for inserting the song name. I want to get the value of the song,link1,2,3 and insert them at the same time. How can i do it? 
Edited by miguelfsf
Link to comment
Share on other sites

Its hard to tell without your other code.  I assume you're using song[] array because you have multiple songs in the form?  Also, I assume you have $i incrementing?

'<form name="form" action="..."><div style="border:1px solid grey;">
    <b>Song Name'.$i.':</b> <input type="text" name="song['.$i.']">
    Link1: <input type="text" name="link['.$i.'][]"><br>
    Link2: <input type="text" name="link['.$i.'][]"><br>
    Link3: <input type="text" name="link['.$i.'][]"><br>
    </div>
</form>';

Make sure to use prepared statements or sanitize the data before insert:

foreach($_POST['song'] as $i => $song) {
    $data = "'$song','" . implode("','", $_POST['link'][$i]) . "'";
   //INSERT INTO table_name VALUES ($data)
}
Edited by AbraCadaver
Link to comment
Share on other sites

First of all thanks for the help, I appreaciate it. 

That would work if in my db table for songs I had only one field for link but I have 3 fields(link1,link2 and link3).

I have multiple songs in the form and for each song there are 3 different links.

Could you understand what im saying? Sorry my bad english..

 

Can you explain also what implode is meant to do? Thanks.


foreach($_POST['song'] as $i => $song) {
    $data = "'$song','" . implode("','", $_POST['link'][$i]) . "'";
   //INSERT INTO table_name VALUES ($data)
}
Edited by miguelfsf
Link to comment
Share on other sites

  • Solution

When arrays are created without assigned indexes, they are indexed by numbers, starting with zero.

As all your arrays appear to meet this criterion, you should be able to do something like this:

 

$ct = 0; // initialize a counter
 
foreach($_POST['song'] as $item1){

  echo "Song: $item1 <br />Link 1 ".$_POST['link1'][$ct]."<br />Link 2 ".$_POST['link2'][$ct]."<br />Link 3 ".$_POST['link3'][$ct]."<br />";
  $ct++;

}
Obviously, you're probably not planning to just print out the data, but hopefully you get the idea?  
Link to comment
Share on other sites

 

First of all thanks for the help, I appreaciate it. 

That would work if in my db table for songs I had only one field for link but I have 3 fields(link1,link2 and link3).

I have multiple songs in the form and for each song there are 3 different links.

Could you understand what im saying? Sorry my bad english..

 

Can you explain also what implode is meant to do? Thanks.

 

The implode is doing exactly what you are asking about.  $data will be 'song','link1','link2','link3'.  Why don't you try it and echo your query to see what it looks like.

Link to comment
Share on other sites

 

When arrays are created without assigned indexes, they are indexed by numbers, starting with zero.

 

As all your arrays appear to meet this criterion, you should be able to do something like this:

$ct = 0; // initialize a counter
 
foreach($_POST['song'] as $item1){

  echo "Song: $item1 <br />Link 1 ".$_POST['link1'][$ct]."<br />Link 2 ".$_POST['link2'][$ct]."<br />Link 3 ".$_POST['link3'][$ct]."<br />";
  $ct++;

}
Obviously, you're probably not planning to just print out the data, but hopefully you get the idea?  

 

 

This worked! Thank you both for helping me  :happy-04:

Link to comment
Share on other sites

 

$ct = 0; // initialize a counter
 
foreach($_POST['song'] as $item1){

  echo "Song: $item1 <br />Link 1 ".$_POST['link1'][$ct]."<br />Link 2 ".$_POST['link2'][$ct]."<br />Link 3 ".$_POST['link3'][$ct]."<br />";
  $ct++;

}

 

On a small note, the counter as you have it is not really necessary, you can use the index of the song array item to access the other arrays:

foreach ($_POST['song'] as $idx=>$item1){
  echo "Song: $item1 <br />Link 1 ".$_POST['link1'][$idx]."<br />Link 2 ".$_POST['link2'][$idx]."<br />Link 3 ".$_POST['link3'][$idx]."<br />";
}
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.