0

I want to sent some data with ajax to a php file. I created a FormData, and then, i append all the data to it, that i want to send. I dont get any error message in the console.

My problem is, that the formdata is always empty, and the php file is not getting any data also.

The form:

<div class="tab-pane show" id="tab5">
                        <form id="AllapotForm" class="form-horizontal" method="post" enctype="multipart/form-data">
                              <table id="products" class="table table-hover">
                                <thead>
                                    <tr class="tr_bold">
                                        <!--width="33.3%"-->
                                        <td class="left" >Létrehozva</td>
                                        <td class="left" >Állapot</td>
                                        <td class="left" >A megrendelő értesítve email-ben</td>
                                        <td class="left" >Megjegyzés</td>
                                    </tr>
                                </thead>
                                <tbody id="allapotok">
                                    <?php
                                    $get_r_allaptok = mysqli_query($kapcs, 
                                    "
                                        SELECT 

                                            rendeles_allapot.*, 
                                            rendeles_allapotok.rendeles_allapotok_nev

                                        FROM rendeles_allapot 
                                        LEFT JOIN rendeles_allapotok ON rendeles_allapot.allapot_allapot_id = rendeles_allapotok.rendeles_allapotok_id

                                        WHERE allapot_rendeles_id = '$id' ORDER BY allapot_id ASC

                                    ")
                                    or die(mysqli_error($kapcs));
                                    if(mysqli_num_rows($get_r_allaptok) > 0 )
                                    {
                                        while($r_allapot = mysqli_fetch_assoc($get_r_allaptok))
                                        {
                                            if($r_allapot['allapot_notify'] == 0 ) { $ertesitve = "Nem"; }
                                            if($r_allapot['allapot_notify'] == 1 ) { $ertesitve = "Igen"; }
                                            echo '<tr>
                                                    <td class="left">'.$r_allapot['allapot_datetime'].'</td>
                                                    <td class="left">'.$r_allapot['rendeles_allapotok_nev'].'</td>
                                                    <td class="left">'.$ertesitve.'</td>
                                                    <td class="left">'.$r_allapot['allapot_comment'].'</td>
                                                </tr>';
                                        }
                                    }
                                    ?>
                                </tbody>
                                </table>
                                <img src="<?php echo $host; ?>/images/assets/preloader.gif" id="preloaderImage2" style="display:none" class="img-responsive" style="margin:10px auto;">

                                  <div class="form-group row">
                                      <label class="control-label col-md-2">Állapot:</label>
                                      <div class="col-md-2">
                                        <select name="allapot" id="allapot" class="input input-select form-control">
                                            <?php
                                            $check_allapot = mysqli_query($kapcs, "SELECT allapot_allapot_id FROM rendeles_allapot WHERE allapot_rendeles_id = '$id' ORDER BY allapot_id DESC LIMIT 1");
                                            if(mysqli_num_rows($check_allapot) > 0 )
                                            {
                                                $allapot_fetch = mysqli_fetch_assoc($check_allapot);
                                                $ertek = $allapot_fetch['allapot_allapot_id'];
                                            }
                                            else
                                            {
                                                $ertek = intval($a['status']);
                                            }
                                            $get_allapotok = mysqli_query($kapcs, "SELECT rendeles_allapotok_id, rendeles_allapotok_nev FROM rendeles_allapotok WHERE rendeles_allapotok_status = 1 ORDER BY rendeles_allapotok_nev ASC");
                                            if(mysqli_num_rows($get_allapotok) > 0 )
                                            {
                                                while($allapot = mysqli_fetch_assoc($get_allapotok))
                                                {
                                                    $selected = $ertek == $allapot['rendeles_allapotok_id'] ? ' selected="selected"':'';
                                                    echo '<option ' . $selected . ' value="' . $allapot['rendeles_allapotok_id'] . '">' . $allapot['rendeles_allapotok_nev'] . '</option>'."\n";
                                                }
                                            }
                                            ?>
                                        </select>
                                      </div>
                                    </div>
                                    <div class="form-group row">
                                      <label class="control-label col-md-2">Megrendelő értesítése email-ben:</label>
                                      <div class="col-md-2">
                                         <input type="checkbox" name="notify" id="notify" class="form-control"  />
                                      </div>
                                    </div>
                                    <div class="form-group row">
                                      <label class="control-label col-md-2">Megjegyzés hozzáadása az email-hez:<span class="help">Amennyiben ezt bepipálja, a megjegyzés az ügyfélnek kiküldött üzenetbe is bele fog kerülni.</span></label>
                                      <div class="col-md-2">
                                         <input type="checkbox" name="add_text" id="add_text" class="form-control" />
                                      </div>
                                    </div>
                                    <div class="form-group row">
                                      <label class="control-label col-md-2">Fájl csatolása az email-hez:</label>
                                      <div class="col-md-2">
                                         <input type="file" name="file" id="file" class="form-control"  />
                                      </div>
                                    </div>
                                    <div class="form-group row">
                                      <label class="control-label col-md-2">Megjegyzés:</label>
                                      <div class="col-md-8">
                                            <textarea name="comment" id="comment" style="width:100%;height:200px;"></textarea>
                                            <div style="margin-top: 10px; text-align: center;">
                                                <a class="saveButton btn btn-primary" style="color:#fff" onclick="allapot_modosit();" id="history_button">Állapot módosítása</a>
                                            </div>
                                      </div>
                                    </div>
                                </form>
                            </div>

I call this function on a button click event.

function send_data()
{   
    var html;
    var RendelesID = <?php echo $id; ?>;
    var RendelesUserEmail = "<?php echo html($a['email']); ?>";
    var RendelesUserName = "<?php echo html($a['nev']); ?>";
    var webshopEmail = "<?php echo $webshopEmail; ?>";
    var webshopName = "<?php echo $webshopName; ?>";
    var Allapot = $( "#allapot option:selected" ).val();
    var Comment = CKEDITOR.instances['comment'].getData();

    if($("#notify").is(':checked')){var Notify = 1;}else{var Notify = 0;}
    if($("#add_text").is(':checked')){var AddToEmail = 1;}else{var AddToEmail = 0;}

    var formData = new FormData($('#AllapotForm')[0]);

    formData.append('fileName', $('#file')[0].files[0]);
    formData.append(RendelesID, RendelesID);
    formData.append(RendelesUserEmail, RendelesUserEmail);
    formData.append(RendelesUserName, RendelesUserName);
    formData.append(webshopEmail, webshopEmail);
    formData.append(webshopName, webshopName);
    formData.append(Allapot, Allapot);
    formData.append(Comment, Comment);
    formData.append(Notify, Notify);
    formData.append(AddToEmail, AddToEmail);

    console.log(formData);

    $.ajax({
         type: 'POST',
         cache: false,
         url: 'files/update_rendeles_allapot.php',
         //dataType: 'html',
         enctype: 'multipart/form-data',
         processData: false, 
         contentType: false,
         data: { formData:formData },
         beforeSend: function(){
            $('#preloaderImage2').show();
         },
         success: function(data)
         {
            alert(data);
         },
         complete: function(){
            $('#preloaderImage2').hide();
         },
         error: function (e) {
            alert(e.responseText);
            console.log(e);
        }
    });
}
Tibi458
  • 91
  • 2
  • 11

2 Answers2

0
         data: { formData:formData },

You need to pass the form data object itself, not a plain object.

data: formData
Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
  • Thanks! And why doesnt the file get the data? Like, the "RendelesID" ? $_POST is empty. – Tibi458 Feb 06 '20 at 08:19
  • @Tibi458 — Because PHP puts files in `$_FILES` not `$_POST`. – Quentin Feb 06 '20 at 08:20
  • Yes, but the other data? Those are numbers and text. – Tibi458 Feb 06 '20 at 08:23
  • @Tibi458 — That will be in `$_POST`. – Quentin Feb 06 '20 at 08:25
  • But the $_POST is empty. If i alert the javascript variables, they have the right content, so i dont understand. – Tibi458 Feb 06 '20 at 08:32
  • @Tibi458 — Is it really empty? Or are you just looking at the wrong key names? See, for example, `formData.append(RendelesID, RendelesID);` where the property name (the first argument) is a variable and not a consistent string. – Quentin Feb 06 '20 at 10:12
0

Have you already seen this?

FormData created from an existing form seems empty when I log it

If yes try to check your network look to the Network then take a look at your request.

You can also try to check your API via Postman if it's working properly.

Mart Macion
  • 96
  • 1
  • 6
  • How should i write the append to the formdata? This is my variable: var RendelesID = ; and now, i give it like this: formData.append(RendelesID, RendelesID); – Tibi458 Feb 06 '20 at 09:25
  • I guess that should work. You only have to assure if $id variable has the value. You can also console.log(RendelesID) to check if it receives your data. Another tip, Before calling your API request check your data via checking it on your console. – Mart Macion Feb 07 '20 at 06:19