2016-09-16 10 views
0

Hallo mit dem Code einreichen unten i eine Tabelle mit einer Taste für jedenphp Wiederholung Tasten verschiedene Werte

Reihe einreichen erzeugen
function GetPlayer($link){ 
    if (isset($_SESSION['username'])) { 
    $x = 0; 
     $sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; "; 
     $result = mysqli_query($link,$sql); 

     while($row = mysqli_fetch_assoc($result)){ 
      if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates 
       echo ("<tr>"); 
       echo ("<th>".$row['username']." </th>"); 
       echo ("<th>Level: ".$row['Level']." </th>"); 
       echo ("<th>Player Stats:".$row['Attack']."/".$row['Defence']." </th>"); 
       echo ("<th>Win Chance: "); 
       echo CalculateWinChance($link,$row['Defence']); 
       echo ("<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>"); 
       echo ("</tr>"); 
      } 
     } 
    } 
} 

jetzt ich diese Taste müssen zwei Funktionen aufrufen und in bestimmte Werte dieser Funktionen vorbei

ein Beispiel für eine Schaltfläche, die nicht auf diese Weise erzeugt wird, aber die gleichen Funktionen nicht verwendet unter

if(isset($_POST['Dummy_Btn'])){ 
    $winChance = CalculateWinChance($link,5); 
    Train($link,1,1,$winChance); 
} 

zwei Funktionen ruft in 5 Führen eines di zurückzukehren verschiedener Wert, der dann in eine andere Funktion übergeben wird

Wie kann ich die Daten wie $ row ['Attack'] abrufen und sie unterscheiden sich von den anderen generierten Sendeschaltflächen.

Wenn ich schon einmal über Ajax gelesen habe, könnte dies in dieser Situation verwendet werden?

+1

Sie könnten jede Zeile ihre eigene Form machen und verfügt über einen versteckten Eingabewert für jedes Formular. Du könntest einen Button benutzen, der submit und den Wert anders als den Text macht (denke ich) ''. Ajax wäre nur nützlich, wenn Sie Daten laden/verarbeiten wollen, ohne die gesamte Seite neu laden zu müssen. – Leeish

Antwort

2

Der beste Weg, dies zu tun, ist, wie Leeish sagt.

Erstellen Sie ein verstecktes Feld im Formular. Sie können auch die Anzahl der Echos reduzieren, indem Sie sie einer Variablen zuweisen und diese Variable wiederholen.

function GetPlayer($link){ 
    if (isset($_SESSION['username'])) { 
    $x = 0; 
     $sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; "; 
     $result = mysqli_query($link,$sql); 

     while($row = mysqli_fetch_assoc($result)){ 
      if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates 
       $toEcho = "<tr>"; 
       $toEcho .= "<th>".$row['username']." </th>"; 
       $toEcho .= "<th>Level: ".$row['Level']." </th>"; 
       $toEcho .= "<th>Player Stats:".$row['Attack']."/".$row['Defence']." </th>"; 
       $toEcho .= "<th>Win Chance: "; 
       $toEcho .= CalculateWinChance($link,$row['Defence']; 
       $toEcho .= "<input type='hidden' name='Hiiden1' value='YOUR NUMBER' />"; 
       $toEcho .= "<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>"; 
       $toEcho .= "</tr>"; 

       echo $$toEcho; 
      } 
     } 
    } 
} 

Dann können Sie den Wert der verborgenen Variablen um zu bekommen ..

if(isset($_POST['Dummy_Btn'])){ 

    $hidden = $_POST["hidden1"]; 

    $winChance = CalculateWinChance($link,5); 
    Train($link,1,1,$winChance); 
} 

Und jetzt können Sie es verwenden, wie Sie wollen.

+0

Die Dummy-Schaltfläche wird bereits verwendet. Ich versuche, die attack_btn die Werte zu verwenden, die $ row ['Defense'] sind, aber weil es 5 Schaltflächen alle mit dem gleichen Namen erzeugt, macht es schwierig, und die Werte werden jedes Mal anders – GregHBushnell

+0

Ich werde dies für Sie bearbeiten. –

+0

ive probierte es aus, aber weil es versteckt 1 dosent existiert, bis es erzeugt wird, bekomme ich den Undefinierten Index: hidden1 error – GregHBushnell

0

Sie könnten jede Zeile zu einem eigenen Formular machen und auf jedem Formular einen versteckten Eingabewert einfügen. Du könntest einen Button verwenden, der submit und den Wert anders als den Text (ich denke) Attack. Ajax wäre nur nützlich, wenn Sie Daten laden/verarbeiten wollen, ohne die gesamte Seite neu laden zu müssen. - Leish vor 2 Minuten

Dies.

Sie müssen Ihren Ansatz überdenken. In Ihrem Beispiel verwenden Sie nicht einmal den Wert von "Dummy_Btn", also bin ich mir nicht sicher, was genau Sie erreichen möchten ...

Wenn Sie eine ausführlichere Erklärung der Daten geben können, die Sie versuchen Um über das Formular und die Handhabung, die Sie an diesen Daten durchführen möchten, weiter zu gehen, würde ich mich freuen, Ihnen dabei helfen zu können.

+0

die Dummy-Taste war nur ein Beispiel für die Variablen, die ich übergeben muss. Ich muss die gleichen Funktionen verwenden, aber anstatt 5 zu übergeben, übergehe ich $ row ['defense'] – GregHBushnell

0

Die Lösung ist,

  • Erste kapseln Ihre einreichen Eingabeelement innerhalb eines <form> und $row['Attack'] Wert auf die action Attribut des Formularelement anhängen, wie folgt aus:

    function GetPlayer($link){ 
        if (isset($_SESSION['username'])) { 
        $x = 0; 
         $sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; "; 
         $result = mysqli_query($link,$sql); 
    
         while($row = mysqli_fetch_assoc($result)){ 
          if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates 
           ?> 
           <tr> 
            <th><?php echo $row['username']; ?></th> 
            <th>Level: <?php echo $row['Level']; ?></th> 
            <th>Player Stats:<?php echo $row['Attack'] . "/" . $row['Defence']; ?></th> 
            <th>Win Chance:</th> 
            <?php echo CalculateWinChance($link,$row['Defence']); ?> 
            <form method="post" action="your_page.php?attack=<?php echo $row['Attack']; ?>"> 
             <th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th> 
            </form> 
           </tr> 
           <?php 
          } 
         } 
        } 
    } 
    

NOTE: Vergessen Sie nicht, your_page.php in dem action Attribut Ihres Formulars zu ändern.

  • Und dann verarbeiten, um die Form in der folgenden Art und Weise,

    if(isset($_POST['Attack_Btn'])){ 
        $attack = $_GET['attack']; 
    
        // call those two functions 
        $winChance = CalculateWinChance($link, $attack); 
        Train($link,1,1,$winChance); 
    }