fout in php function, kom er niet uit

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter Lopsen

Peter Lopsen

10/06/2010 10:46:01
Quote Anchor link
Beste lezers,

Allereerst mijn excuses voor het plaatsen van waarschijnlijk een domme fout.. Maar ik zit er al een paar dagen in vast, en kom niet tot een oplossing..

Voor een website waar ik mee bezig ben moeten er artikelen die geschreven worden in een que geplaatst worden, hier editen de admins het artikel naar wens, en voten dan
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
    function articlequevote1() {
                $target          = $_GET['id'];
                $votes           = "SELECT votes FROM articleque WHERE id='$target'";
            if ($votes==0){
                $sql = "UPDATE articleque SET votes=1 WHERE id='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }elseif ($votes==1){
                $sql = "UPDATE articleque SET votes=2 WHERE id='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }elseif($votes==2){
                $sql = "UPDATE articleque SET votes=3 WHERE id='$target'";
                $res = mysql_query($sql) or die(mysql_error());  
            }elseif ($votes==3){
                $sql = "UPDATE articleque SET votes=4 WHERE id='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }else{
                    $title           = "SELECT title FROM articleque WHERE id='$target'";
                    $catagory        = "SELECT catagory FROM articleque WHERE id='$target'";
                    $text            = "SELECT text FROM articleque WHERE id='$target'";
                    $enterposter     = "SELECT enterposter FROM articleque WHERE id='$target'";
                    $about           = "SELECT about FROM articleque WHERE id='$target'";
                    $dag             = "SELECT dag FROM articleque WHERE id='$target'";
                    $maand           = "SELECT maand FROM articleque WHERE id='$target'";
                $sql = "UPDATE: INSERT INTO article VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand',  '$text', '$about')";
                $res = mysql_query($sql) or die(mysql_error());
                $sql = "DELETE FROM articleque WHERE id='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }
    }


Kan iemand me helpen hiermee?

Alvast bedankt voor de reactie(s)

M.V.G.
Peter

EDIT: Ik kom er niet achter hoe ik iets als script plaats in een bericht, sorry :$
Gewijzigd op 10/06/2010 10:59:44 door Peter Lopsen
 
PHP hulp

PHP hulp

16/04/2024 13:17:24
 

10/06/2010 10:56:11
Quote Anchor link
Gebruik [code] en [/code] tags om hier code te plaatsen.
Verder zie ik dat je zomaar een $_GET waarde in een query hebt zitten. Gebruik altijd mysql_real_escape_string, of type caste, of prepared statements.
Die eerste if kan nooit gelijk aan nul zijn.
Gewijzigd op 10/06/2010 10:56:47 door
 
Peter Lopsen

Peter Lopsen

10/06/2010 11:00:43
Quote Anchor link
Shit, ben idd die realescape string vergeten, ga ik even toevoegen :)

EDIT: die 'id' van target word gepost in de url, i.e.:

http://website.com/articlefullque.php?id=48

dus met die $_GET haal je die id op uit de url?

En hoezo kan de eerste if geen 0 zijn? Want het artikel heeft 0 votes als het net geplaatst is?

Bedankt voor de reactie
Gewijzigd op 10/06/2010 11:02:31 door Peter Lopsen
 

10/06/2010 11:04:32
Quote Anchor link
Ja, dat die waarde via de url gaat betekend dus dat het een $_GET waarde is en dus hartstikke gevaarlijk is om zo in je query te stoppen.
Die eerste if is nooit gelijk aan nul omdat je een string, namelijk de string: "SELECT votes FROM articleque WHERE id='$target'" vergelijkt met nul. Het betekend dus ook dat de rest van de elseifs ook niet worden voldaan en dat je dus altijd in de else terecht komt. Verder zou het ook nog wel net zijn om je variabelen buiten quotes te halen.
Gewijzigd op 10/06/2010 11:05:38 door
 
Peter Lopsen

Peter Lopsen

10/06/2010 11:08:43
Quote Anchor link
Ja dus, in de tabel heb je votes staan, in eerste instantie 0
je haalt voor var. $votes het aantal votes op uit de db. dus 0
dan vergelijk je 0==0 dan SET votes=1

Of is mijn logica onjuist? :$

EDIT:

Na wat korte aanpassingen werkt het nu tot de eerste if, dus als het aantal votes 0 is maakt hij er inderdaad 1 van, maar de formule gaat niet verder (dus hij update vervolgens niet naar 2,3, en 4..) WHY?? :(:


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
    function articlequevote1() {
                $target          = $_GET['id'];
                $votes           = "SELECT votes FROM `lifesenzcms`.`articleque WHERE `articleque`.`id`='$target'";
            if ($votes==0){
                $sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }elseif ($votes==1){
                $sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }elseif($votes==2){
                $sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
                $res = mysql_query($sql) or die(mysql_error());  
            }elseif ($votes==3){
                $sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '1' WHERE `articleque`.`id`='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }else{
                    $title           = "SELECT title FROM articleque WHERE id='$target'";
                    $catagory        = "SELECT catagory FROM articleque WHERE id='$target'";
                    $text            = "SELECT text FROM articleque WHERE id='$target'";
                    $enterposter     = "SELECT enterposter FROM articleque WHERE id='$target'";
                    $about           = "SELECT about FROM articleque WHERE id='$target'";
                    $dag             = "SELECT dag FROM articleque WHERE id='$target'";
                    $maand           = "SELECT maand FROM articleque WHERE id='$target'";
                $sql = "UPDATE: INSERT INTO article VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand',  '$text', '$about')";
                $res = mysql_query($sql) or die(mysql_error());
                $sql = "DELETE FROM articleque WHERE id='$target'";
                $res = mysql_query($sql) or die(mysql_error());
            }
    }


any help?
Gewijzigd op 10/06/2010 11:21:19 door Peter Lopsen
 

10/06/2010 11:34:23
Quote Anchor link
Lees eens wat ik schrijf. Je vergelijkt de string 'Select blablanbal' met 0. Je voert nergens de query uit.
 
Jan geen

Jan geen

10/06/2010 11:40:02
Quote Anchor link
Wat Karl bedoelt is dat je de eerste query niet uitvoert waardoor $votes niet de 0 tm 3 bevat maar de string: "SELECT votes FROM `lifesenzcms`.`articleque WHERE `articleque`.`id`='$target'";
Onder regel 3 moet je dus mysql_query doen en je moet de kolom fetchen. Overigens, je voert 4 keer precies dezelfde query uit alleen je votes= is anders. Als je nou in de query de $votes gebruikt heb je al die if elses niet nodig.

edit: Je else kan ook een stuk eenvoudiger door in 1 query alle kolommen op te halen en vervolgens in een array te fetchen ($row = mysql_fetch_array($r)) De kolommen spreek je dan aan met $row['kolom']

succes
Gewijzigd op 10/06/2010 11:42:05 door Jan geen
 
Peter Lopsen

Peter Lopsen

10/06/2010 12:17:48
Quote Anchor link
ja dus wat je zegt is

je moet die $votes ophalen

dan zeggen:
if ($votes<4){
$sql = "UPDATE `lifesenzcms`.`articleque` SET `$votes+1` WHERE `articleque`.`id`='$target'";
$res = mysql_query($sql) or die(mysql_error());
}
else {
row van ene tabel naar andere kopieren en dan verwijderen uit de eerste tabel
}

??

en dan
 
Jan geen

Jan geen

10/06/2010 12:24:17
Quote Anchor link
Pas je code eerst maar even aan
 
Peter Lopsen

Peter Lopsen

10/06/2010 14:26:36
Quote Anchor link
Dankzij de tips die hier gegeven zijn heb ik eindelijk wat kunnen fixen:

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
    function articlequevote1() {
        $target = $_GET['id'];
        mysql_real_escape_string($target);
        $sql = "SELECT * FROM articleque WHERE id='$target'";
        $res = mysql_query($sql) or die(mysql_error());
        while($row = mysql_fetch_assoc($res)) {
        $votes = $row['votes'];
        $votecount = $votes+1;
        $title           = $row['title'];
        $text            = $row['text'];
        $enterposter     = $row['enterposter'];
        $about           = $row['about'];
        $dag             = $row['dag'];
        $maand           = $row['maand'];
        }
        if ($votes==4) {
            $sql = "INSERT INTO `lifesenzcms`.`article` VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand',  '$text', '$about')";
            $res = mysql_query($sql) or die(mysql_error());
            $sql = "DELETE FROM articleque WHERE id='$target'";
            $res = mysql_query($sql) or die(mysql_error());
        }else {
            $sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '$votecount' WHERE id='$target'";
            $res = mysql_query($sql) or die(mysql_error());
        }
    }


Bedankt iedereen voor de reacties, mochten er nog fouten inzitten naar jullie insziens, please let me know :)

Gr.
Peter
 
Svenn trolilo

svenn trolilo

10/06/2010 14:39:15
Quote Anchor link
Enkele tips om je code meer leesbaar te maken :
- gebruik duidelijke variabelen namen; $sql en $res zie ik meerdere malen = om problemen vragen
- je INSERT is altijd eenvoudiger als je ook zegt wat je gaat invoeren, dan ontwijk je om 'null' te moeten invoeren (wat vrijwel altijd een slecht idee is, btw) INSERT INTO tabel (id, naam, ...) VALUES (id, naam, ...);
- in de laatste if/else staat 2 keer "$res = mysql_query($sql) or die(mysql_error());", een functie maak je om minder typwerk te moeten doen, die kan dus perfect uit de if/else.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
        if ($votes==4) {
            $sql = "INSERT INTO `lifesenzcms`.`article` VALUES (null, '$catagory', '$title', '$enterposter', null, '$dag', '$maand',  '$text', '$about')";
            $res = mysql_query($sql) or die(mysql_error());
            $sql = "DELETE FROM articleque WHERE id='$target'";
        }else {
            $sql = "UPDATE `lifesenzcms`.`articleque` SET `votes` = '$votecount' WHERE id='$target'";
        }
$res = mysql_query($sql) or die(mysql_error());
 



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.