Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-11-19, 19:33
  #1
Medlem
Hej,

Jag har följande kod:
Kod:
  var group = [];
    var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    var n = 3;

    for (var i = 0, j = 0; i < data.length; i++) {
    if (i >= n && i % n === 0)
       j++;
       group[j] = group[j] || [];
       group[j].push(data[i])

    const agents = [
      {"id": 1},
      {"id": 2},
      {"id": 3},
      {"id": 4},
      {"id": 5}
    ];

    $(jQuery.parseJSON(JSON.stringify(agents))).each(function() {
             var agent_id = this.id;
             function passAgent(){
               var data = {
                 agentId: agent_id,
                 groupedIds: group[j]
               };
               $.post("insert.php", data);
             }
             passAgent();
    });
  }

Mitt problem är att jag vill att den ska sätta in olika arrays för olika användare.
t.ex. Användare 1 ska ha 1,2 medan användare 2 ska ha 3,5 osv.

Hur löser jag detta och vad har jag gjort för fel?
Tack på förhand!
Citera
2017-11-19, 19:43
  #2
Medlem
Citat:
Ursprungligen postat av kakan14
Hej,

Jag har följande kod:
Kod:
  var group = [];
    var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    var n = 3;

    for (var i = 0, j = 0; i < data.length; i++) {
    if (i >= n && i % n === 0)
       j++;
       group[j] = group[j] || [];
       group[j].push(data[i])

    const agents = [
      {"id": 1},
      {"id": 2},
      {"id": 3},
      {"id": 4},
      {"id": 5}
    ];

    $(jQuery.parseJSON(JSON.stringify(agents))).each(function() {
             var agent_id = this.id;
             function passAgent(){
               var data = {
                 agentId: agent_id,
                 groupedIds: group[j]
               };
               $.post("insert.php", data);
             }
             passAgent();
    });
  }

Mitt problem är att jag vill att den ska sätta in olika arrays för olika användare.
t.ex. Användare 1 ska ha 1,2 medan användare 2 ska ha 3,5 osv.

Hur löser jag detta och vad har jag gjort för fel?
Tack på förhand!

Vart är koden som lägger in informationen i din databas?
Citera
2017-11-19, 19:49
  #3
Medlem
Hej,

Här är den koden i PHP:
Kod:
if($_POST['agentId']){
            
$agentId $_POST['agentId'];
            
$groupedIds $_POST['groupedIds'];
            
$insert_groupedIds implode(","$groupedIds);

            
$getAgents "SELECT * FROM agents WHERE agent_id='$agentId' LIMIT 1";
            if (
$result=mysqli_query($connection,$getAgents)) {
                
$rowcount=mysqli_num_rows($result);

                    if(
$rowcount == 0) {
                        
$insertAgent "INSERT INTO agents (agent_id, application_ids) VALUES ('$agentId', '$insert_groupedIds')";
                        
$query mysqli_query($connection,$insertAgent);
                  }

            }
    } 
Citera
2017-11-19, 20:00
  #4
Medlem
Citat:
Ursprungligen postat av kakan14
Hej,

Här är den koden i PHP:
Kod:
if($_POST['agentId']){
            
$agentId $_POST['agentId'];
            
$groupedIds $_POST['groupedIds'];
            
$insert_groupedIds implode(","$groupedIds);

            
$getAgents "SELECT * FROM agents WHERE agent_id='$agentId' LIMIT 1";
            if (
$result=mysqli_query($connection,$getAgents)) {
                
$rowcount=mysqli_num_rows($result);

                    if(
$rowcount == 0) {
                        
$insertAgent "INSERT INTO agents (agent_id, application_ids) VALUES ('$agentId', '$insert_groupedIds')";
                        
$query mysqli_query($connection,$insertAgent);
                  }

            }
    } 
Kan passa på att nämna att du har ett mycket allvarligt säkerhetshål. Du är sårbar mot SQL-injections
Citera
2017-11-19, 20:07
  #5
Medlem
Tack för upplysningen. Ska åtgärda detta efter att ha fått hjälp med mitt huvudproblem.
Citera
2017-11-19, 20:08
  #6
Medlem
Jag ser inget uppenbart. Din identering rör till det lite. Använd måsvingar även om det bara är en kodrad i din if-sats så man tydligt ser var saker börjar och slutar.

Börja med att kontrollera att du inte har några felmeddelanden från javascript eller från PHP.
Sen kontrollerar du att du skickar iväg rätt data från javascriptet och att din insert i PHP ser korrekt ut.
Citera
2017-11-19, 20:15
  #7
Medlem
Citat:
Ursprungligen postat av e7andy
Jag ser inget uppenbart. Din identering rör till det lite. Använd måsvingar även om det bara är en kodrad i din if-sats så man tydligt ser var saker börjar och slutar.

Börja med att kontrollera att du inte har några felmeddelanden från javascript eller från PHP.
Sen kontrollerar du att du skickar iväg rätt data från javascriptet och att din insert i PHP ser korrekt ut.

Jag har kontrollerat felmeddelanden men får inga fel.
Har även kontrollerat datan som skickas iväg och den är korrekt. Dock så stoppar den in datan fel i databasen. Här kommer en print på hur allt sätts in i databasen:

https://gyazo.com/c4e3d1dd8ec4f59ffe2e1cc7eaa6c2df
Citera
2017-11-19, 20:25
  #8
Medlem
Citat:
Ursprungligen postat av kakan14
Jag har kontrollerat felmeddelanden men får inga fel.
Har även kontrollerat datan som skickas iväg och den är korrekt. Dock så stoppar den in datan fel i databasen. Här kommer en print på hur allt sätts in i databasen:

https://gyazo.com/c4e3d1dd8ec4f59ffe2e1cc7eaa6c2df
En sak som ser konstig ut är att du skickar iväg group[j] varje gång utan att ändra på j för varje agent.

Edit:
Nej, fel av mig. Det var indenteringen som ställde till det igen. Dock loopar du över alla agenter varje gång. Utan att veta vad din kod gör så tycker jag att du loopar för många gånger.
__________________
Senast redigerad av e7andy 2017-11-19 kl. 20:52.
Citera
2017-11-19, 21:04
  #9
Medlem
Citat:
Ursprungligen postat av e7andy
En sak som ser konstig ut är att du skickar iväg group[j] varje gång utan att ändra på j för varje agent.

Edit:
Nej, fel av mig. Det var indenteringen som ställde till det igen. Dock loopar du över alla agenter varje gång. Utan att veta vad din kod gör så tycker jag att du loopar för många gånger.

Det koden ska göra är att stoppa in alla agenter i databasen, sen tilldela applications till varje agent, max 3 applications per agent.

Men när den nu tilldelar applications så verkar den bara tilldela första och andra gruppen av applications på alla agenter.
Citera
2017-11-19, 22:45
  #10
Medlem
Citat:
Ursprungligen postat av kakan14
Det koden ska göra är att stoppa in alla agenter i databasen, sen tilldela applications till varje agent, max 3 applications per agent.

Men när den nu tilldelar applications så verkar den bara tilldela första och andra gruppen av applications på alla agenter.
Ok...

Du loopar över data-arrayen.
Varje varv så gör du följande:
--Du lägger till ett värde i group[j].
--Sen loopar du över alla 5 agenter och postar samma group[j] till insert.php
--Vart 3:e varv ökar du j.

Du postar alltså samma sak till alla agenter om och om igen.
Första varvet får agent 1,2,3,4,5 får alla application 1
Nästa varv får agent 1,2,3,4,5 alla application 1,2
Nästa varv får agent 1,2,3,4,5 alla application 1,2,3
Nästa varv får agent 1,2,3,4,5 alla application 4
Nästa varv får agent 1,2,3,4,5 alla application 4,5
...

Testa att lägga in en console.log på data precis innan du postar så ser du vad du skickar iväg.
Du kan även debugga ditt javascript direkt i webbläsaren för att inspektera vad du tilldelar dina variabler.
__________________
Senast redigerad av e7andy 2017-11-19 kl. 22:54.
Citera
2017-12-17, 02:31
  #11
Medlem
Unisertits avatar
https://www.w3schools.com/PhP/php_my...statements.asp
Lite tips gällande SQL injections.

Lite svårt att veta exakt vad du vill göra. Du verkar jobba med en traditionell relationsmodell.
Och denna array av id du vill koppla till en agent borde egentligen vara sin egna table. Om dessa id kan vara kopplade till flera en än agent skulle jag rekommendera att du inför en relationstable mellan dessa annars kan du i table för id ha agentens id som foreign key som attribut.

Ex:
Skulle ha ett table som heter agent som har endast sitt id som attribut och är dessa primära nyckel.
Skulle ha ett table som heter customers som endast -||-.
-||- agentCustRel och som har två stycken foreignkeys som attribut (de andra tables primära nycklar) som i sin tur i kombination blir denna table primära nyckel.

Om du nu skulle vilja veta vilka customers en agent har kan du köra följande kod:

Kod:
SELECT * FROM customers c WHERE c.custId IN (SELECT r.custId FROM agentCustRel r WHERE ((SELECT a.agentId FROM agent a WHERE a.agentId LIKE agentId) LIKE r.agentId));
Citera
2017-12-30, 15:12
  #12
Medlem
Citat:
Ursprungligen postat av kakan14
Hej,
$(jQuery.parseJSON(JSON.stringify(agents))).each(f unction() {

Du stringifierar agents för att sedan parsea den igen, och loopar med jQuery? Du kan bara köra forEach istället.

agents.forEach(agent, function() {
// agent.id
})

Försök att indentera korrekt och skriva kod lite snyggare i allmänhet. Det finns många array funktioner du kan använda direkt på en array som filter, map, find och reduce för att minska komplexiteten och öka läsbarheten. Det känns som att du krånglar till något som egentligen är väldigt enkelt. Du definierar agents inuti loopen varje steg trots att den ser likadan ut. Varför inte bara göra något i stil med:

const agentData = agents.map((agent) => { ...agent, data: .... });

Det känns som att du gör allting väldigt bakvänt och att du ska utgå från att iterera igenom dina agents och räkna ut datan inom den kontexten istället för tvärt om?
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback