Avatar billede turbodk Nybegynder
31. oktober 2007 - 17:16 Der er 20 kommentarer og
1 løsning

Plusse et felt med en værdi i PHP/MySQL

Hej :)
Jeg er ved at kode en hjemmeside, og den skal have et pointsystem, kaldet HOF(Hall of Fame)..

Jeg er igang med at lave siden hvor admin's kan give de forskellige brugere deres points, men...

...jeg kan bare ikke finde ud af at få den til at tage mit input og PLUSSE det med det der i forvejen står i feltet i databasen..

Jeg har nok rodet mig ud i noget bøvl i koden, men vil i ikke lige se om i kan rede mig? :P

<-- Kode start -->
<html>
    <head>
        <title>HOF-Admin</title>
    </head>
    <body>
        <?php
            include("../mysqldata.php");

            if($password == "pcp" AND $username <> ""){
                echo "Pointene er nu givet. <a href='http://www.trackmanianations.dk/admin/add_hof.php'>Tilbage</a>.";
                $db = mysql_connect($db_host, $db_user, $db_password);
                mysql_select_db($db_name, $db);
                $user_hof = $hofpts + $hoffor;
                    mysql_query("UPDATE phpbb_users SET user_hof='$user_hof' WHERE user_id='$username'");
            }
            else {

                $db = mysql_connect($db_host, $db_user, $db_password);
                mysql_select_db($db_name, $db);
                $foresp = mysql_query("SELECT user_id, username, user_hof FROM phpbb_users ORDER BY username ASC");
                   
        ?>
        <form method='post' action='<?php echo $PHP_SELF; ?>'>
                    <table>
                        <tr>
                            <td align='right' valign='center'>Bruger:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><select size='1' name='username'>
                                <option value='' selected='selected'></option>
                                <?php
                                while($data = mysql_fetch_array($foresp)){
                                ?>
                                <option value='<?php echo $data[0] ?>'> <?php echo $data[1].'('.$data[2] ?>)</option>
                                <?php
                                }
                                ?>
                            </select></td>
                        </tr><tr>
                            <td align='right' valign='center'>Points:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><input type='text' name='hofpts'></td>
                        </tr><tr>
                            <td align='right' valign='center'>Points:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><input type='hidden' name='hoffor' value='<?php echo $data[2] ?>'></td>
                        </tr><tr>
                            <td align='right' valign='center'>Kodeord:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><input type='password' name='password'></td>
                        </tr><tr>
                            <td align='right' valign='center'></td>
                            <td align='left' valign='center'><input type='submit' value='Send'></td>
                        </tr>
                    </table>
                </form>
        <?php
            }
        ?>
        </select>
    </body>
</html>
<-- Kode slut -->

Skriv hvis i skal bruge mere info :)
På forhånd tak..
Avatar billede nielle Nybegynder
31. oktober 2007 - 17:48 #1
Du kan gøre det nogenlunde sådan her:

$id = 42;
$value = 13;

$sql = "UPDATE dinTabel SET ditFelt = ditFelt + $value WHERE $id = $id";
mysql_query($sql) or die(mysql_error());  // Lægger 13 til værdien i feltet
Avatar billede turbodk Nybegynder
31. oktober 2007 - 17:58 #2
Okay, kan det også lade sig gøre når at man skal skrive $value ind i et felt, det vil jo være forskelligt fra gang til gang...

$value skal jo så skrive ind i det felt der hedder hotpts nu...
Avatar billede nielle Nybegynder
31. oktober 2007 - 18:14 #3
Ja da, det fungere på akkurat samme måde som dine andre input-felter hvor at du skriver en eller anden værdi:

$user_id = $_POST['user_id'];  // Denne her skal du have med i din form...
$hofpts = $_POST['hofpts'];

$sql = "UPDATE phpbb_users SET hofpts = hofpts + $hofpts WHERE user_id = $user_id";
mysql_query($sql) or die(mysql_error());
Avatar billede turbodk Nybegynder
31. oktober 2007 - 19:01 #4
Og så skal jeg droppe mit hidde-input?
Avatar billede turbodk Nybegynder
31. oktober 2007 - 19:07 #5
Og hvilken del af $user_id = $_POST['user_id'] skal være hvor i formen?
Avatar billede nielle Nybegynder
31. oktober 2007 - 19:15 #6
Dit hidden input går på feltet 'hoffor' - jeg er ikke lige klar over hvad relationen er mellem det og så dit 'hofpts' felt?
Avatar billede nielle Nybegynder
31. oktober 2007 - 19:17 #7
I stedet for at bruge numre i dine  $data[0] så brug hellere felternes navne:

$data['username']

Det gør rigtigt meget for læsbarheden.
Avatar billede turbodk Nybegynder
31. oktober 2007 - 19:32 #8
Okay, vidste jeg slet ikk man kunne :P

Jeg har sat det ind du skulle, men nu giver den mig følgende når jeg trykker på knappen "Send":

Pointene er nu givet. Tilbage.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Hvorfor?

Vil du have en opdatering på hvordan koden ser ud?
Avatar billede nielle Nybegynder
31. oktober 2007 - 19:44 #9
Ja tak.
Avatar billede turbodk Nybegynder
31. oktober 2007 - 19:46 #10
<html>
    <head>
        <title>HOF-Admin</title>
    </head>
    <body>
        <?php
            include("../mysqldata.php");

            if($password == "pcp" AND $username <> ""){
                echo "Pointene er nu givet. <a href='http://www.trackmanianations.dk/admin/add_hof.php'>Tilbage</a>.";
                $db = mysql_connect($db_host, $db_user, $db_password);
                mysql_select_db($db_name, $db);

                $user_id = $_POST['user_id'];
                $hofpts = $_POST['hofpts'];

                $sql = "UPDATE phpbb_users SET hofpts = hofpts + $hofpts WHERE user_id = $user_id";
                    mysql_query($sql) or die(mysql_error());
            }
            else {

                $db = mysql_connect($db_host, $db_user, $db_password);
                mysql_select_db($db_name, $db);
                $foresp = mysql_query("SELECT user_id, username, user_hof FROM phpbb_users ORDER BY username ASC");
                   
        ?>
        <form method='post' action='<?php echo $PHP_SELF; ?>'>
                    <table>
                        <tr>
                            <td align='right' valign='center'>Bruger:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><select size='1' name='username'>
                                <option value='' selected='selected'></option>
                                <?php
                                    while($data = mysql_fetch_array($foresp)){
                                ?>
                                <option value='<?php echo $data[user_id] ?>'> <?php echo $data[username].'('.$data[user_hof] ?>)</option>
                                <?php
                                    }
                                ?>
                            </select></td>
                        </tr><tr>
                            <td align='right' valign='center'>Points:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><input type='text' name='hofpts'></td>
                        </tr><tr>
                            <td align='right' valign='center'>Kodeord:&nbsp;&nbsp;&nbsp;</td>
                            <td align='left' valign='center'><input type='password' name='password'></td>
                        </tr><tr>
                            <td align='right' valign='center'></td>
                            <td align='left' valign='center'><input type='submit' value='Send'></td>
                        </tr>
                    </table>
                </form>
        <?php
            }
        ?>
        </select>
    </body>
</html>
Avatar billede nielle Nybegynder
31. oktober 2007 - 19:56 #11
Du bør skrive $data['user_id'] i stedet for  $data[user_id].

Bortset fra det så er den god ide at lige tjekke SQL koden - måske indeholder den noget andet end du forventer:

$sql = "UPDATE phpbb_users SET hofpts = hofpts + $hofpts WHERE user_id = $user_id";
echo "DEBUG: $sql<br>";
mysql_query($sql) or die(mysql_error());
Avatar billede turbodk Nybegynder
31. oktober 2007 - 19:58 #12
Så skriver den:

Pointene er nu givet. Tilbage.DEBUG: UPDATE phpbb_users SET hofpts = hofpts + 3 WHERE user_id =
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Så det er vel der efter user_id = der er noget galt?
Avatar billede nielle Nybegynder
31. oktober 2007 - 20:00 #13
Det ser ikke ud til at $user_id har fået en værdi.
Avatar billede turbodk Nybegynder
31. oktober 2007 - 20:22 #14
Det var sgu da underligt :S

Hvad kan man gøre ved det?
Avatar billede nielle Nybegynder
31. oktober 2007 - 20:44 #15
Problemet er simplethen at du ikke har noget input-felt i din form som har name='user_id'
Avatar billede turbodk Nybegynder
31. oktober 2007 - 21:32 #16
Hahah :D
Så fik jeg sgu lortet til at virke...

Jeg takker mange gange for hjælpen :)
Avatar billede nielle Nybegynder
31. oktober 2007 - 21:32 #17
Svar :^)
Avatar billede turbodk Nybegynder
31. oktober 2007 - 21:36 #18
Hmm, jeg synes ikk rigtigt der sker noget :S

Jeg bliver ved at trykke accepter, men der sker som nævnt ingenting :S
Avatar billede nielle Nybegynder
31. oktober 2007 - 21:56 #19
Du skal markere mit nick nede i den lille boks til venstre for Accepter knappen.
Avatar billede turbodk Nybegynder
31. oktober 2007 - 22:01 #20
Hahah :P
Jeg er ny her xD

Takker igen for hjælpen :)
Avatar billede nielle Nybegynder
31. oktober 2007 - 22:08 #21
Velkommen til :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester