Geen output van SQL-database bij bepaalde tabel in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Axel Neve

Axel Neve

03/04/2013 18:33:52
Quote Anchor link
Hallo,

Op dit moment ben ik bezig met een script wat nieuwsartikelen moet verwerken in een databse,
echter loop ik tegen het probleem aan dat op de edit-pagina het script geen output geeft. Als ik in de SQL-query een andere tabelnaam invoer, komt er echter wel volledige output.

De tabelnaam is `artikelen` en bevat de volgende rijen:
- id
- catid
- state
- created
- created_by
- modified
- modified_by
- title
- articletext
- image
- media

Het script om de artikelen te bewerken is als volgt:

<div class="pagetitle">
Nieuws / Artikel bewerken
</div>
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
31
32
33
34
35
36
37
<?php
$id
=$_GET["id"];
function
safe($input) {return mysql_real_escape_string($input); }
function
output($str) {return htmlspecialchars($str); }
if ($_SERVER['REQUEST_METHOD'] == 'POST')  {
    $title = safe($_POST['title']);
    $articletext = safe($_POST['articletext']);
    $state  = safe($_POST['state']);
  $catid = safe($_POST['catid']);
    $created = safe($_POST['created']);
    $image = safe($_POST['image']);
    $media = safe($_POST['media']);  
    
        if((trim($title) == '') || (trim($articletext) == '')  || (trim($state) == '')  || (trim($catid) == '')  || (trim($created) == ''))
    {

        echo "Er zijn één of meerdere verplichte velden leeg.";
    }

    else
    {
        $sql = "UPDATE `artikelen` SET title='".$title."', articletext='".$articletext."', state=".$state.", catid=".$catid.", created='".$created."', created_by='".$created_by."', image='".$image."', media='".$media."' WHERE id=".$id."";  
        $result = mysql_query($sql);
                echo "Artikel succesvol toegevoegd!";
        
    }
}

else
{
  $id=$_GET["id"];
    $sql="SELECT `title`, `articletext`, `state`, `catid`, `modified`, `modified_by`, `created`, `created_by`, `image`, `media` FROM `artikelen` WHERE `id`=".$id."";
    $result = mysql_query($sql);
  while($row = mysql_fetch_array($result))
  {

    // hier edit-formulier
[code]<?php
 }
 }

?>
Gewijzigd op 03/04/2013 18:37:32 door Axel Neve
 
PHP hulp

PHP hulp

17/11/2024 23:03:25
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 18:51:06
Quote Anchor link
Beste Axel,

Je code heb ik even iets 'netter' gemaakt:

echter zie ik geen oorzaak waarom je result leeg blijft.
Kun je eens een echo op $sql doen?

Zo kun je even controlerne of er daad werkelijk een ID word meegestuurd.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
$id
= $_GET["id"];
function
safe($input){
    return mysql_real_escape_string($input);
}

function
output($str){
    return htmlspecialchars($str);
}


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    $title = safe($_POST['title']);
    $articletext = safe($_POST['articletext']);
    $state = safe($_POST['state']);
    $catid = safe($_POST['catid']);
    $created = safe($_POST['created']);
    $image = safe($_POST['image']);
    $media = safe($_POST['media']);

    if ((trim($title) == '') || (trim($articletext) == '') || (trim($state) == '') || (trim($catid) == '') || (trim($created) == '')) {
        echo "Er zijn één of meerdere verplichte velden leeg.";
    }
else {
        $sql = "
            UPDATE artikelen
                SET title='"
. $title . "',
                articletext='"
. $articletext . "',
                state="
. $state . ",
                catid="
. $catid . ",
                created='"
. $created . "',
                created_by='"
. $created_by . "',
                image='"
. $image . "',
                media='"
. $media . "'
            WHERE id="
. $id . "
        "
;
        
        mysql_query($sql);
        
        echo "Artikel succesvol toegevoegd!";

    }
}
else {
    
    $id = $_GET["id"];
    $sql = "
        SELECT
            title,
            articletext,
            state,
            catid,
            modified,
            modified_by,
            created,
            created_by,
            image,
            media
        FROM artikelen
        WHERE id="
. $id . "
    "
;
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {

    }
    
}

?>




Toevoeging op 03/04/2013 18:52:20:

Overigns zit ik te kijken, je geeft de melding 'Artikel succesvol toegevoegd' na een wijzig query.
Heb je uberhaupt wel records in je tabel staan?
 
- Ariën  -
Beheerder

- Ariën -

03/04/2013 18:54:04
Quote Anchor link
Ik raad ook aan om goede foutafhandeling toe te passen op je mysql_query().
Nu ga je er gewoon zelf vanuit dat alles goed zal gaan, maar dat zal niet tijd zo zijn. Met het onderdrukken van foutmeldingen wordt het debuggen/onderzoeken al helemaal lastiger.

Lees daarom ook eens:
http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/
 
Axel Neve

Axel Neve

03/04/2013 18:56:43
Quote Anchor link
Beste Robert,

Ja, er staan records in de tabel, het toevoegen in de database loopt ook als een zonnetje.

een echo van $sql levert het volgende op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php SELECT title, articletext, state, catid, modified, modified_by, created, created_by, image, media FROM artikelen WHERE id=9 ?>

bij een test id van 9

een echo van $result levert op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php #resource id 14 ?>
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 18:59:08
Quote Anchor link
verander deze regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$result = mysql_query($sql);

eens door dit bij je select query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$result = mysql_query($sql) or die(mysql_error());


en misschien evne kijken of de database iets teruggeeft met deze regel onder de $result = regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
print_r( mysql_fetch_array($result) );
 
- SanThe -

- SanThe -

03/04/2013 19:02:45
Quote Anchor link
Waarom de UPDATE wel beveiligen en de SELECT niet. Die is namelijk lek->SQL-injection.
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 19:06:48
Quote Anchor link
Even offtopic:

Ik snap dat iedereen zijn kritiek goed bedoelt, maar op dit moment is de TS daar denk ik niet mee geholpen?
Waarschijnlijk is de TS zich er wel van bewust dat dit niet 'veilig' is en dat dingen 'beter' kunnen en heeft hij het nog niet doorgevoerd omdat hij binnen een 'ontwikkeling' zit waarbij dit pas wanneer iets werkt word doorgevoerd?

Of ben ik nu heel cru? ;)
 
Axel Neve

Axel Neve

03/04/2013 19:07:45
Quote Anchor link
@Robert na het wijzigen van de code blijft het venster leeg, er komt geen data terug uit de database.

@SanThe Ik zal de SELECT ook gaan beveiligen, eventjes niet aan gedacht
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 19:09:25
Quote Anchor link
zet helemaal boven aan de regel dit eens neer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
error_reporting(E_ALL);


Krijg je dan een melding?
 
Axel Neve

Axel Neve

03/04/2013 19:12:19
Quote Anchor link
@Robert, het geheel heeft al volledige error-reporting,
bij het toevoegen van de error-reporting op de pagina zelf blijft ook een foutmelding uit.
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 19:13:06
Quote Anchor link
Wat vreemd!
Kan ik misschien ergens meekijken op een FTP of iets dergelijks?

Ik kan mij namelijk niet voorstellen dat dit een ingewikkeld probleem is haha!
 
Axel Neve

Axel Neve

03/04/2013 19:13:57
Quote Anchor link
@Robert, dat kan. Ik zal je de gegevens sturen.
 
- SanThe -

- SanThe -

03/04/2013 19:24:20
Quote Anchor link
Is de GET wel gevuld?
 
Axel Neve

Axel Neve

03/04/2013 19:30:16
Quote Anchor link
@ SanThe, Ja, de query ontvangt ook de waarde van de GET (id).
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 19:32:12
Quote Anchor link
Axel, zie je PM, ik heb het probleem voor je opgelost!:)
 
Axel Neve

Axel Neve

03/04/2013 19:37:19
Quote Anchor link
@Robert, ik zag het. Super bedankt! :)
 
- Ariën  -
Beheerder

- Ariën -

03/04/2013 19:38:37
Quote Anchor link
En wat was de oorzaak? Wel zo handig om erbij te vermelden.
 
Robert Wazzaa

Robert Wazzaa

03/04/2013 19:40:23
Quote Anchor link
- Aar - op 03/04/2013 19:38:37:
En wat was de oorzaak? Wel zo handig om erbij te vermelden.


Oorzaak zat hem in een ander bestand.
Kort samengevat: er werden id's gebruikt van een andere tabel die doormiddel van een join en het niet benamen van velden door elkaar heen gingen.
 



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.