2016-10-14 3 views
0

Ich versuche, die Werte von 7 jquery Checkboxen zu php über Ajax zu senden. Ich versuche, die Werte in ein Array zu setzen und das Array in Ajax zu serialisieren. Letztendlich möchte ich die Werte der Checkboxen als Bedingungen in einer MySQL WHERE-Klausel verwenden. Mein Ajax wird erfolgreich abgeschlossen, aber der Wert des Arrays ist immer null, unabhängig davon, welche Methode ich verwende.senden Checkbox-Werte zu PHP durch Ajax Ergebnisse in Null

CODE: Hinweis: Ich habe den Code hier aktualisiert, um die vorgeschlagenen Änderungen in den Antworten zu reflektieren.

Mein HTML-Code:

<label for="prestage_select">Prestage</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="prestage_select" class="revenuechbxs" value="Prestage"> 


<label for="validation_select">Validation</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="validation_select" class="revenuechbxs" value="Validation"> 


<label for="scheduling_select">Scheduling</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="scheduling_select" class="revenuechbxs" value="Scheduling"> 


<label for="production_select">Production</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="production_select" class="revenuechbxs" value="Production"> 


<label for="needsBOL_select">Needs BOL</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="needsBOL_select" class="revenuechbxs" value="Needs BOL"> 


<label for="shpAcct2Close_select">Shipped: Account to Close</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="shpAcct2Close_select" class="revenuechbxs" value="Shipped: Acctg. To Close Out"> 


<label for="movedToComplete_select">Moved to Complete for Selected Period</label> 
<input type="checkbox" name="revenue_checkboxes[]" id="movedToComplete_select" class="revenuechbxs" value="Complete"> 

Meine Ajax-Code:

j("#create_submit").click(function(){ 

    //send Revenue Data values to php using ajax. 
        var revenuechbxarray = j('.revenuechbxs:checked').val(); 
        var revenuefrom = j('#revenuefrom').val(); 
        var revenueto = j('#revenueto').val(); 

        j.ajax ({ 
         method: 'POST', 
         url: "revenue_report.php", 
         data: { revenuefromtext: revenuefrom, revenuetotext: revenueto, revenuechbx: revenuechbxarray }, 
         success: function(response) { 
          j('#fieldset_ReportDiv').html(response); 
          } 
        }); 

      console.log(revenuechbxarray); 

Mein PHP-Code:

<?php 

include('inc.php'); 


//Get date range. 

$revenuefromajax=$_POST['revenuefromtext']; 
$revenuetoajax=$_POST['revenuetotext']; 

$revenuefromstring = strtotime($revenuefromajax); 
$revenuetostring = strtotime($revenuetoajax); 

$revenuefrom=date("Y-m-d", $revenuefromstring); 
$revenueto=date("Y-m-d", $revenuetostring); 


//Get selected Status Values. 

$revenue_check = $_POST['revenuechbx']; // 
print_r($revenue_check); //displays result of one checkbox (the first selected on) but not more than one... 


//connect to the database 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if(mysqli_connect_errno()) { 
    printf('Could not connect: ' . mysqli_connect_error()); 
    exit(); 
} 

//echo 'MySQL Connected successfully.'."<BR>"; 


$conn->select_db("some database name"); /////Database name has been changed for security reasons///////// 

if(! $conn->select_db("some database name")) { 
    echo 'Could not select database. '."<BR>"; 
} 

// echo 'Successfully selected database. '."<BR>"; 

//Select Data and Display it in a table. 


$sql = "SELECT invoices.id, invoices.orderdate, invoices.stagestatus, FORMAT(TRIM(LEADING '$' FROM invoices.totalprice), 2) AS totalprice, clients.company, lineitems.invoiceid, FORMAT((lineitems.width * lineitems.height) /144, 2) AS sqft, lineitems.quantity AS qty, FORMAT((invoices.totalprice/((lineitems.width * lineitems.height) /144)), 2) as avgsqftrevenue, FORMAT((TRIM(LEADING '$' FROM invoices.totalprice)/lineitems.quantity), 2) AS avgunitrevenue 
    FROM clients 
    INNER JOIN invoices ON clients.id = invoices.clientid 
    INNER JOIN lineitems ON invoices.id = lineitems.invoiceid 
    WHERE invoices.orderdate BETWEEN '".$revenuefrom."' AND '".$revenueto."' 
    ORDER BY invoices.id DESC"; 


$result = $conn->query($sql); 


echo "<table id='revenueReportA' align='center' class='report_DT'> 
<tr> 

<th>Customer</th> 
<th>SG</th> 
<th>Revenue</th> 
<th>SQ FT</th> 
<th>AVG Revenue Per SQ FT</th> 
<th>Number of Units</th> 
<th>AVG Revenue Per Unit</th> 
</tr>"; 


if ($result = $conn->query($sql)) { 

    // fetch associative array 
    while ($row = $result->fetch_assoc()) { 

    echo "<tr>"; 
    echo "<td>" . $row['company'] . "</td>"; 
    echo "<td>" . $row['id'] . "</td>"; 
    echo "<td>" ."$". $row['totalprice'] . "</td>"; 
    echo "<td>" . $row['sqft'] ."&nbsp;&nbsp;". "ft<sup>2</sup>". "</td>"; 
    echo "<td>" ."$". $row['avgsqftrevenue'] . "</td>"; 
    echo "<td>" . $row['qty'] . "</td>"; 
    echo "<td>" ."$". $row['avgunitrevenue'] . "</td>"; 
    echo "</tr>"; 
    } 

    echo "</table>"; 

     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    //Free the result variable. 
    $result->free(); 
} 

//Close the Database connection. 
$conn->close(); 


?> 

ich verschiedene Vorschläge für das Senden der Werte versucht haben, php aber der Wert ist immer null.

Hinweis: Ich habe den anderen Ajax-Aufruf für Umsatz und Umsatz von Datum enthalten. Dieser Aufruf ist erfolgreich und meine Tabelle wird korrekt basierend auf diesen Daten angezeigt. Ich kann einfach nicht die tatsächlichen Werte für meine ausgewählten Checkboxen von der gleichen Seite wie die Daten erhalten.

+0

Können Sie serialisierten String 'revenuechbxarray' anmelden? – xpuc7o

+0

Ich sehe 2 Ajax Anrufe, die erste, wo Sie Ihre Checkboxes Daten senden haben keine Erfolgsfunktion – Dranes

Antwort

2

Sie verwenden eine Klassenauswahl, während der Kontrollkästchen nicht über Klasse

0

einige Änderungen im Code Schritt Attribute für Schritt

HTML-Code

<input class="revenue" type="checkbox" name="revenue_checkboxes[]" id="production_select" value="Production"> 

Set Checkbox Name Array und fügen Sie allgemeine Klasse Umsatz hinzufügen und Benutzer durch JavaScript-Code

Ajax Code

var revenuechbxarray = $('.revenue:checked').val(); 

PHP-Code:

$revenue_check = $_POST['revenuechbx']; // this is array 

Sie können Benutzer dieses Array json_encode JSON-String und setzen Datenbank zu konvertieren.

+0

danke! Ich kann jetzt den Wert meines ersten Kontrollkästchens in console.log() sehen. Ich kann jedoch keine anderen Kontrollkästchen sehen. Nur einer. Wird json_encode mir erlauben, die Werte jedes Kontrollkästchens meines MySQL-Codes zu verwenden? Wenn ja, können Sie ein Beispiel für json_encode geben? – rdimouro

0

Um die Kontrollkästchen mit Namen wählen:

j('[name=revenue_checkboxes]:checked').serialize() 
+1

Bitte fügen Sie eine Erklärung hinzu, warum dieser Code dem OP hilft. Dies wird helfen, eine Antwort zu liefern, von der zukünftige Zuschauer lernen können. Weitere Informationen finden Sie unter [Antwort]. –