PHP melding terug posten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daan Vee

Daan Vee

01/07/2016 14:12:21
Quote Anchor link
Ik POST op de volgende manier informatie door naar SaveItem.php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
//<![CDATA[
// als je document klaar is met laden...
$().ready(function() {
    // als het formulier #theForm wordt gesubmit...
    $('form#theForm').submit(function(e) {
        // vang het submit event af, jQuery/AJAX handelt dit immers af
        e.preventDefault(); // het default gedrag is dat het formulier gePOST wordt, en dat willen we niet
        $('#postResult').hide();
        $.post(
            'shared/saveItem.php?itemID=<?php echo $itemID; ?>', // het script waar je naartoe POST
            $('#theForm').serialize(), // verzamel alle form data in 1x (naam, content)
    .done(function( data ) {
        $('#postResult').html('Gelukt!');
    }
    .fail(function() {
        $('#postResult').html('Er is een fout opgetreden!');
    }
    .always(function( data ) {
        $('#postResult').show();
        setTimeout(function(){ $('#postResult').hide(); }, 3000);
    }
            'json' // geef een "hint" over het type van de terug te ontvangen data
        );
    });
});
//]]>
</script>


Ik merk dat informatie via SaveItem.php in de database terecht komt.
Maar SaveItem.php controleert ook of alle velden zijn ingevuld.
Indien dat niet het geval is volgt een melding.
Hoe kan ik in #postResult weergeven of er een veld niet is ingevuld, en het script op SaveItem.php niet helemaal is uitgevoerd daardoor?
Gewijzigd op 01/07/2016 14:18:04 door Daan Vee
 
PHP hulp

PHP hulp

20/04/2024 11:09:11
 
- Ariën  -
Beheerder

- Ariën -

01/07/2016 14:24:26
Quote Anchor link
Wat geeft je PHP-bestand terug? Ik neem aan dat dit JSON of hapklare data is? Deze kan je in je AJAX-request terugvinden in de data-variabele.

Dan kan je in je .done event een vergelijking maken waarin je op de juiste waarde controleert.
Bijv. 'OK'.
Gewijzigd op 01/07/2016 14:24:53 door - Ariën -
 
Daan Vee

Daan Vee

01/07/2016 14:28:29
Quote Anchor link
Los van de connectie doet m'n php-bestand dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
header('Content-Type: application/json; charset=UTF-8');

$success = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    if(empty($_GET['itemID']) || empty($_GET['user_from']) || empty($_GET['user_to'])){
    $success = false;
    }

    else{
    $subjectID = mysql_real_escape_string($_GET['itemID']);
            if(empty($_POST['comment'])){
            $success = false;
            }

            else{
            
            $comment = mysql_real_escape_string($_POST['comment']);
            $user_from = mysql_real_escape_string($_GET['user_from']);
            $user_to = mysql_real_escape_string($_GET['user_to']);
            $time = time();

            $insert_comment = mysql_query("INSERT INTO notifications (noteID, subjectID, user_from, user_to, content, time, read_note, del_note) VALUES ('', '".$subjectID."', '".$user_from."', '".$user_to."', '".$comment."','".$time."', '0', '0')") or die (mysql_error());

            $success = true;
            }
    }
}

echo json_encode($success);
?>
 
- Ariën  -
Beheerder

- Ariën -

01/07/2016 14:41:21
Quote Anchor link
Een JSON-string dus. Hoe ziet deze eruit bij uitvoer?

En verder raad ik gebruik van de MySQL-functies af. Op termijn zal deze verdwijnen waarbij MySQLi of PDO een goede vervanger is.
 
Daan Vee

Daan Vee

01/07/2016 14:43:49
Quote Anchor link
Hoe bedoel je hoe die eruit ziet bij uitvoer?
 
- Ariën  -
Beheerder

- Ariën -

01/07/2016 14:47:22
Quote Anchor link
Een JSON-string is een speciaal geformuleerde string die er bijvoorbeeld zo uitziet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
{ "error": "No connection" }

Dus wat geeft jouw PHP-script terug? Je kan het ook in de console (CTRL+SHIFT+J) bekijken.
 
Daan Vee

Daan Vee

01/07/2016 14:51:23
Quote Anchor link
Die geeft niks terug als ik het zo zie... Behalve een succes = true or false... toch?
 
- Ariën  -
Beheerder

- Ariën -

01/07/2016 14:56:08
Quote Anchor link
Een true of false zegt niet wat er fout gaat.

Ik zou het zo doen, en voor de duidelijkheid de variabele hernoemen naar $status.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$status = "FIELDS_EMPTY";

En als het gelukt is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$status = "SUCCESS";


Dan kan je $status in json_encode gooien. En dan zie je de juiste waardes.
 
Daan Vee

Daan Vee

01/07/2016 15:00:56
Quote Anchor link
Ik heb de SaveItem.php aangepast naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
include("includes/globals.php");

header('Content-Type: application/json; charset=UTF-8');

$status = "FIELDS_EMPTY";
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    if(empty($_GET['itemID']) || empty($_GET['user_from']) || empty($_GET['user_to'])){
    $success = false;
    }

    else{
    $subjectID = mysql_real_escape_string($_GET['itemID']);
            if(empty($_POST['comment'])){
            $status = "FIELDS_EMPTY";
            }

            else{
            
            $comment = mysql_real_escape_string($_POST['comment']);
            $user_from = mysql_real_escape_string($_GET['user_from']);
            $user_to = mysql_real_escape_string($_GET['user_to']);
            $time = time();

            $insert_comment = mysql_query("INSERT INTO notifications (noteID, subjectID, user_from, user_to, content, time, read_note, del_note) VALUES ('', '".$subjectID."', '".$user_from."', '".$user_to."', '".$comment."','".$time."', '0', '0')") or die (mysql_error());
            $status = "SUCCESS";
            }
    }
}

echo json_encode($status);
?>


Hoe pas ik nu onderstaande code aan, zodat er een melding zichtbaar wordt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
//<![CDATA[
// als je document klaar is met laden...
$().ready(function() {
    // als het formulier #theForm wordt gesubmit...
    $('form#theForm').submit(function(e) {
        // vang het submit event af, jQuery/AJAX handelt dit immers af
        e.preventDefault(); // het default gedrag is dat het formulier gePOST wordt, en dat willen we niet
        $('#postResult').hide();
        $.post(
            'shared/saveItem.php?itemID=<?php echo $itemID; ?>', // het script waar je naartoe POST
            $('#theForm').serialize(), // verzamel alle form data in 1x (naam, content)
    .done(function( data ) {
        $('#postResult').html('Gelukt!');
    }
    .fail(function() {
        $('#postResult').html('Er is een fout opgetreden!');
    }
    .always(function( data ) {
        $('#postResult').show();
        setTimeout(function(){ $('#postResult').hide(); }, 3000);
    }
            'json' // geef een "hint" over het type van de terug te ontvangen data
        );
    });
});
//]]>
</script>
 
Thomas van den Heuvel

Thomas van den Heuvel

01/07/2016 15:04:53
Quote Anchor link
Of een array met:
success: true of false
message: die iets over de status zegt
(optioneel) errors: array met veldnamen/boodschappen wat er aan scheelt

De index "success" omvat dan de status als "goed" of "fout" als een boolse waarde zonder een custom code waar je expliciet op moet controleren om af te leiden of het "goed" of "fout" is gegaan. Wat mij nogal omslachtig lijkt
 
Daan Vee

Daan Vee

01/07/2016 15:14:55
Quote Anchor link
Maar hoe maak ik nu $status zichtbaar? De boodschap kan ik altijd nog veranderen...
 
- Ariën  -
Beheerder

- Ariën -

01/07/2016 15:16:26
Quote Anchor link
verder lijn 15 eens in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
alert(data);
$('#postResult').html('Gelukt!');


Wat meldt deze dan in een alert?
Gewijzigd op 01/07/2016 15:16:42 door - Ariën -
 
Daan Vee

Daan Vee

01/07/2016 15:28:32
Quote Anchor link
Ik heb het iets aangepast:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
.done(function( data ) {
    $('#postFeed').show();
})
.fail(function() {
    $('#postFeed').show();
})
.always(function( data ) {
    $('#postFeed').show();
    setTimeout(function(){ $('#postFeed').hide(); }, 3000);
});


Het laat een DIV zien... Hoe kan ik de boodschap (data) in de div krijgen?
 
- Ariën  -
Beheerder

- Ariën -

01/07/2016 16:07:44
Quote Anchor link
Zoals je al eerder met je .html() functie deed. Je kan dan data erin gebruiken. Maar als je simpele teksten hebt als melding, zoals OK, dan zegt dat weinig naar een gebruiker.

Ikzelf spuug in mijn eigen applicatie simpele codes uit, zoals NO_CONNECT, FIELD_ARE_EMPTY etc.. en met een switch vertaal ik dit naar wat leesbaarders. Zo kan je ook prima vertalingen regelen als je site meerdere talen ondersteunt.
 
Daan Vee

Daan Vee

01/07/2016 18:27:28
Quote Anchor link
Dank, gelukt!
 
Daan Vee

Daan Vee

06/07/2016 16:10:47
Quote Anchor link
Dank!
Gewijzigd op 06/07/2016 19:54:58 door Daan Vee
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.