0

データベースからのオートコンプリートを含むフォームがあり、ユーザーが送信すると、結果がpdfに送信され、電子メールに送信されます..しかし、1行でテストすると成功しますが、さらに行を追加すると、pdfで単語が表示されます「配列」はコードです。

index.php

<?php require("login3.php"); ?>
 <?php
 if (!empty($_POST)) {

// Used for later to determine result
$success = $error = false;

// Object syntax looks better and is easier to use than arrays to me
$post = new stdClass;

// Usually there would be much more validation and filtering, but this
// will work for now.
foreach ($_POST as $key => $val)
    $post->$key = trim(strip_tags($_POST[$key]));

// Check for blank fields
if (empty($post->itemCode) OR empty($post->itemDesc) OR empty($post->itemQty) OR             empty($post->itemPrice) OR empty($post->itemAgent))
    $error = true;

else {

    // Get this directory, to include other files from
    $dir = dirname(__FILE__);

    // Get the contents of the pdf into a variable for later
    ob_start();
    require_once($dir.'/pdf.php');
    $pdf_html = ob_get_contents();
    ob_end_clean();

    // Load the dompdf files
    require_once($dir.'/dompdf/dompdf_config.inc.php');

    $dompdf = new DOMPDF(); // Create new instance of dompdf
    $dompdf->load_html($pdf_html); // Load the html
    $dompdf->render(); // Parse the html, convert to PDF
    $pdf_content = $dompdf->output(); // Put contents of pdf into variable for later  

    // Get the contents of the HTML email into a variable for later
    ob_start();
    require_once($dir.'/html.php');
    $html_message = ob_get_contents();
    ob_end_clean();

    // Load the SwiftMailer files
    require_once($dir.'/swift/swift_required.php');

    $mailer = new Swift_Mailer(new Swift_MailTransport()); // Create new instance of SwiftMailer

    $message = Swift_Message::newInstance()
                   ->setSubject('New Order') // Message subject
                   ->setTo(array('hussammoz@aol.com',  'hussammoz@gmail.com' => 'Orange Pharmacy Store')) // Array of people to send to
                   ->setFrom(array('no-reply@net.tutsplus.com' => 'Orange Pharmacy Order System')) // From:
                   ->setBody($html_message, 'text/html') // Attach that HTML message from earlier
                   - >attach(Swift_Attachment::newInstance($pdf_content, 'nettuts.pdf', 'application/pdf')); // Attach the generated PDF from earlier

    // Send the email, and show user message
    if ($mailer->send($message))
        $success = true;
    else
        $error = true;

}

   }
   ?>
       <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
   <title>Orange Pharmacy Order System</title>
   <style type="text/css" title="currentStyle">
            @import "css/layout-styles.css";
            @import "css/themes/smoothness/jquery-ui-1.8.4.custom.css";
</style>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

<!-- jQuery libs -->
<script  type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
<script  type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>

<!-- Our jQuery Script to make everything work -->
<script  type="text/javascript" src="js/jq-ac-script.js"></script>

</head>
<body>
<h1 align="center"><img src=418694_259331167468533_385322251_n.jpg></h1>
<div id="container">

    <div class="panel">
        <div class="title-large">
            <div class="theme"></div>
        </div>
 <p>
 <h1 align="center"><b>Branch : <FONT COLOR="ORANGE"><?php echo($_SESSION["username"]);   ?>   <h5 align="left"><font color="black">Date : </font></b><script type="text/javascript">
function GetClock(){
d = new Date();
nday   = d.getDay();
nmonth = d.getMonth();
ndate  = d.getDate();
nyear = d.getYear();
nhour  = d.getHours();
nmin   = d.getMinutes();
nsec   = d.getSeconds();

if(nyear<1000) nyear=nyear+1900;

 if(nhour ==  0) {ap = " AM";nhour = 12;} 
 else if(nhour <= 11) {ap = " AM";} 
 else if(nhour == 12) {ap = " PM";} 
 else if(nhour >= 13) {ap = " PM";nhour -= 12;}

 if(nmin <= 9) {nmin = "0" +nmin;}
 if(nsec <= 9) {nsec = "0" +nsec;}


 document.getElementById('clockbox').innerHTML=""+(nmonth+1)+"/"+ndate+"/"+nyear+"     "+nhour+":"+nmin+":"+nsec+ap+"";
setTimeout("GetClock()", 1000);
}
window.onload=GetClock;
</script>
<?php if ($success) { ?>
        <div class="message success">
            <h4>Congratulations! It worked! Now check your email.</h4>
        </div>
    <?php } elseif ($error) { ?>
        <div class="message error">
            <h4>Sorry, an error occurred. Try again!</h4>
        </div>
    <?php } ?>
  <div id="clockbox"></div></font></h5></h1>
            <div class="content inpad">

                   <div id="messageBox" style="margin-left:15px; padding-left:20px;   padding-bottom:5px; border:1px #ccc solid; display:none;"></div>

                        <form method="post" action="#" id="itemsForm">

                            <table id="itemsTable" class="general-table">
                                <thead>
                                <tr>
                                    <th></th>
                                    <th>Item Code</th>
                                    <th>Item Description</th>
                                    <th>Item Qty</th>
                                    <th>Item Price</th>
                                    <th>Item Agent</th>
                                </tr>
                                </thead>
                                <tbody>
                                    <tr class="item-row">
                                        <td></td>
                                        <td><input name="itemCode" value=""     class="tInput" id="itemCode" readonly="readonly" /> </td>
                                        <td><input name="itemDesc" value="" class="tInput" id="itemDesc"  tabindex="1"/></td>
                                        <td><input name="itemQty" value="" class="tInput" id="itemQty" tabindex="2"/></td>
                                        <td><input name="itemPrice" value="" class="tInput" id="itemPrice" readonly="readonly" /> </td>
                                        <td><input name="itemAgent" value="" class="tInput" id="itemAgent" readonly="readonly" /></td>
                                    </tr>
                                </tbody>
                            </table>



                        <a href="#" id="addRow" class="button-clean large"><span> <img   src="images/icon-plus.png" alt="Add" title="Add Row" /> Add Item</span></a>

                    </div>
                  <input type="submit" value="submit">
                </form>

            </div>
    </div>

  </body>
  </html>

そして出力htmlコードは

<html>
<head>
<br><br>
<h1 align="center"><img   src=http://orangepharmacy.hostzi.com/418694_259331167468533_385322251_n.jpg></h1>
<style type="text/css" title="currentStyle">
            @import "http://orangepharmacy.hostzi.com/css/layout-styles.css";
            @import "http://orangepharmacy.hostzi.com/css/themes/smoothness/jquery-ui-   1.8.4.custom.css";
  </style>
  </head>
  <body>
  <br><br>
   <h1 align="center"><b>Items Order <br> Branch : <FONT COLOR="ORANGE">
  <?php      echo($_SESSION["username"]); ?></h1>
<br><br>
<table id="itemsTable" class="general-table">
                                <thead>
                                <tr>
                                    <th></th>
                                    <th>Item Code</th>
                                    <th>Item Description</th>
                                    <th>Item Qty</th>
                                    <th>Item Price</th>
                                    <th>Item Agent</th>
                                </tr>
                                </thead>
                                <tbody>
                                    <tr class="item-row">
                                        <td></td>
                                        <td><?php echo $post->itemCode; ?></td>
                                        <td><?php echo $post->itemDesc; ?></td>
                                        <td><?php echo $post->itemQty; ?></td>
                                        <td><?php echo $post->itemPrice; ?></td>
                                        <td><?php echo $post->itemAgent; ?></td>
                                    </tr>

                                </tbody>

                            </table>

<br><br><l><p><b><i><h2 align="left">Prepared by : ............................                </h2><h2 align="right"> Signeture : .................................<h2></b></i></p>

</body>
</html>

新しい行を追加するための js コード:

$(document).ready(function(){

// Use the .autocomplete() method to compile the list based on input from user
$('#itemDesc').autocomplete({
    source: 'data/item-data.php',
    minLength: 1,
    select: function(event, ui) {
        var $itemrow = $(this).closest('tr');
                // Populate the input fields from the returned values
                $itemrow.find('#itemCode').val(ui.item.itemCode);
                $itemrow.find('#itemDesc').val(ui.item.itemDesc);
                $itemrow.find('#itemPrice').val(ui.item.itemPrice);
                $itemrow.find('#itemAgent').val(ui.item.itemAgent);

                // Give focus to the next input field to recieve input from user
                $('#itemQty').focus();

        return false;
    }
// Format the list menu output of the autocomplete
}).data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>" + item.itemDesc + "</a>" )
        .appendTo( ul );
};

// Get the table object to use for adding a row at the end of the table
var $itemsTable = $('#itemsTable');

// Create an Array to for the table row. ** Just to make things a bit easier to read.
var rowTemp = [
    '<tr class="item-row">',
        '<td><a id="deleteRow"><img src="images/icon-minus.png" alt="Remove Item" title="Remove Item"></a></td>',
        '<td><input name="itemCode" class="tInput" value="" id="itemCode" readonly="readonly" /> </td>',
        '<td><input name="itemDesc" class="tInput" value="" id="itemDesc" /></td>',
        '<td><input name="itemQty" class="tInput" value="" id="itemQty" /></td>',
        '<td><input name="itemPrice" class="tInput" value="" id="itemPrice" readonly="readonly" /></td>',
        '<td><input name="itemAgent" class="tInput" value="" id="itemAgent" readonly="readonly" /></td>',
    '</tr>'
].join('');

// Add row to list and allow user to use autocomplete to find items.
$("#addRow").bind('click',function(){

    var $row = $(rowTemp);

    // save reference to inputs within row
    var $itemCode           = $row.find('#itemCode');
    var $itemDesc           = $row.find('#itemDesc');
    var $itemPrice          = $row.find('#itemPrice');
    var $itemQty            = $row.find('#itemQty');
    var $itemAgent          = $row.find('#itemAgent');

    if ( $('#itemDesc:last').val() !== '' ) {

        // apply autocomplete widget to newly created row
        $row.find('#itemDesc').autocomplete({
            source: 'data/item-data.php',
            minLength: 1,
            select: function(event, ui) {
                $itemCode.val(ui.item.itemCode);
                $itemDesc.val(ui.item.itemDesc);
                $itemPrice.val(ui.item.itemPrice);
                $itemAgent.val(ui.item.itemAgent);

                // Give focus to the next input field to recieve input from user
                $itemQty.focus();

                return false;
            }
        }).data( "autocomplete" )._renderItem = function( ul, item ) {
            return $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a>"  + item.itemDesc + "</a>" )
                .appendTo( ul );
        };
        // Add row after the first row in table
        $('.item-row:last', $itemsTable).after($row);
        $($itemDesc).focus();

    } // End if last itemCode input is empty
    return false;
});

$('#itemDesc').focus(function(){
    window.onbeforeunload = function(){ return "You haven't saved your Order.  Are you    sure you want to leave this page without saving first?"; };
   });

  }); // End DOM

// Remove row when clicked
$("#deleteRow").live('click',function(){
    $(this).parents('.item-row').remove();
    // Hide delete Icon if we only have one row in the list.
    if ($(".item-row").length < 2) $("#deleteRow").hide();
});

問題は

                                        <td><?php echo $post->itemCode; ?></td>
                                        <td><?php echo $post->itemDesc; ?></td>
                                        <td><?php echo $post->itemQty; ?></td>
                                        <td><?php echo $post->itemPrice; ?></td>
                                        <td><?php echo $post->itemAgent; ?></td>

1行を渡すとデータが読み取られますが、複数の行を渡すと「配列」という名前が返されます!

私はこれをやろうとしましたが、それは私に与えます:foreach()に無効な引数が提供されました

     <td><?php foreach ($post->itemCode as $code) {
                                             echo $code;
                                                                                      } 
                                            ?>
                                        </td>
                                        <td><?php foreach ($post->itemDesc as $desc) {
                                             echo $desc;
                                                                                      } 
                                            ?></td>
                                        <td><?php foreach ($post->itemQty as $qty) {
                                             echo $qty;
                                                                                      } 
                                            ?></td>
                                        <td><?php foreach ($post->itemPrice as $price) {
                                             echo $price;
                                                                                      } 
                                            ?></td>
                                        <td><?php foreach ($post->itemAgent as $agent) {
                                             echo $agent;
                                                                                      } 
                                            ?></td>
4

1 に答える 1

3

配列はできません-配列と各値echoを反復処理する必要があります。echo

foreach ($post->itemCode as $thing) {
    echo $thing;
}

配列の構造がよくわからない場合は、いつでもそのようにすることができます。これにより、配列print_r($post->itemCode)の内容が表示されます。

配列の最初のメンバーにアクセスしたい場合は、試してください

$itemCode = $post->itemCode; echo $itemCode[0];
于 2013-01-02T18:24:19.630 に答える