waarde optellen in mysql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Luc Gomes

Luc Gomes

14/08/2014 16:08:56
Quote Anchor link
Hallo ik heb een database met twee waarden punten en totpunten
nu probeer ik met deze code
mysql_query("UPDATE klaverjassen SET totpunten = '".$row['totpunten']." + $punten WHERE speler = $speler");

met een query haal ik de laatst bekende totpunten op en wil daar de in een formulier op gegeven punten bij optellen. Maar de waarde blijft in het nieuwe record op 0 nul staan
Alvast bedankt voor de hulp.

Luc Gomes
 
PHP hulp

PHP hulp

28/03/2024 17:38:02
 
Obelix Idefix

Obelix Idefix

14/08/2014 16:19:51
Quote Anchor link
Echo voor de query eens wat er zit in:
$row['totpunten'], $punten en $speler.
Echo eventueel eens de volledige query.
Heb je foutafhandeling ingebouwd?
 
Peter  Flos

Peter Flos

14/08/2014 16:21:41
Quote Anchor link
Opmerkingen:

1) Geen foutenafhandeling zover ik zie
2) Tenzij $punten een escape heeft is er geen beveiliging en is je script gevoelig voor SQL-Injection
3) Mysql is verouderd, gebruik liever mysqli, of indien je wenst PDO
4) Waarom heb je wel quotes om $row['totpunten'] maar niet om $punten?
5) Wat ik denk is dat je dit zoekt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql_query("UPDATE klaverjassen SET totpunten = 'totpunten + $punten' WHERE speler = '".$speler."'");


Beter in mysqli:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_query($con,"UPDATE klaverjassen SET totpunten = 'totpunten + $punten' WHERE speler = '".$speler."'");
 
Erwin H

Erwin H

14/08/2014 16:34:40
Quote Anchor link
Dat laatste kan natuurlijk noooooit werken. Nu heb je een quote voor een veldnaam in SQL en na een waarde uit php. Dat is echt aan alle kanten verkeerd.

En in elk geval, als je wilt optellen betekent het dat het getallen moeten zijn (integers of floats) en dus moet je gewoon helemaal geen quotes gebruiken.
 
Luc Gomes

Luc Gomes

14/08/2014 17:20:52
Quote Anchor link
Ben ik niet afhankelijk van mijn provider of kan ik zomaar mysqli gaan gebruiken?
overigens werkt de code van Peter Flos niet helaas

Luc
 
Erwin H

Erwin H

14/08/2014 17:47:01
Quote Anchor link
Theoretisch ja, in de praktijk: nee.
mysqli is geen andere database, het is alleen een andere functie bibliotheek. Standaard is die tegenwoordig wel geinstalleerd, dus die kan je zonder problemen gebruiken.

Dat de code van Peter niet zou werken was al duidelijk overigens. Maar wat nog steeds wel de vraag is, is wat er in je variabelen zit, zoals Obelix al vroeg. En ook hoe het zit met de foutafhandeling.
 
Luc Gomes

Luc Gomes

15/08/2014 16:29:26
Quote Anchor link
Nog geen fout afhandeling en de variable tot punten zijn niks meer dan de wekelijkse resultaten optellen bij het totaal aantal punten:

$row['totpunten'] geeft het aantal punten van het vorige record van de betreffende speler en $punten zou in de afhandeling van het formulier daarbij moeten worden opgeteld zodat er volgende week een andere waarde hangt aan $row['totpunten']
 
Erwin H

Erwin H

15/08/2014 17:01:08
Quote Anchor link
Luc Gomes op 15/08/2014 16:29:26:
Nog geen fout afhandeling

Je begrijpt natuurlijk dat dat geen handige actie is dan. Hoe wil je nu gaan ontdekken wat er fout gaat als je fouten gewoon laat lopen?
 
Ivo P

Ivo P

15/08/2014 17:11:04
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$sql
= "UPDATE klaverjassen
        SET totpunten = totpunten + "
. (int)$punten ."
        WHERE speler = '"
. $speler ."'" ;

?>


waarbij je dan alleen nog moet zorgen dat $speler geen gekkigheid bevat (mysqli_real_escape_string op loslaten, of zeker weten dat het een getal is.)
 
Ward van der Put
Moderator

Ward van der Put

15/08/2014 17:15:22
Quote Anchor link
Aansluitend voor de zekerheid wel een paar keer op F5 drukken om ervan verzekerd te zijn dat het totaal echt klopt.
 
Jan R

Jan R

15/08/2014 19:49:45
Quote Anchor link
off topic
Laat eens de link zien als je wilt.
Ik ben wel geïnteresseerd. Vooral in de reglementen :)

Jan
 
Obelix Idefix

Obelix Idefix

15/08/2014 19:54:23
Quote Anchor link
Luc Gomes op 15/08/2014 16:29:26:
$row['totpunten'] geeft het aantal punten van het vorige record van de betreffende speler en $punten zou in de afhandeling van het formulier daarbij moeten worden opgeteld zodat er volgende week een andere waarde hangt aan $row['totpunten']

Is dit wat er met echo ook daadwerkelijk getoond wordt of is dit wat er volgens jou in zou moeten zitten?
 
Luc Gomes

Luc Gomes

17/08/2014 11:39:01
Quote Anchor link
allereerst heb ik geprobeerd om een verbinding te maken met mysqli dat werkt helaas (nog) niet bij mijn provider (hosting pakketje).
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$con
= mysqli_connect("localhost","xxxxxx","xxxxx","xxxxx");

// Check connection
if (mysqli_connect_errno())
  {

  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  echo "verbonden met MySQL: "
?>

geen verbinding.

het optellen van de waarden gaat nog steeds niet de echo geeft wel de goede waarde.
hier onder mijn script

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
<?
$result
= mysql_query("SELECT totpunten,totmarsen FROM klaverjassen WHERE speler=speler");
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}

$row = mysql_fetch_row($result);
 

$speler = $_GET['speler'];
$punten = $_GET['punten'];


$sql = 'UPDATE klaverjassen
        SET totpunten=$row[0]+$punten
        WHERE speler=".$speler."'
;
$retval = mysql_query( $sql );
if(! $retval )
{

  die('Could not update data: ' . mysql_error());
}

echo "Updated data successfully\n";
?>

wat doe ik fout
 
Erwin H

Erwin H

17/08/2014 12:16:38
Quote Anchor link
Bij de quotes ga je de mist in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sql
= 'UPDATE klaverjassen
        SET totpunten=$row[0]+$punten
        WHERE speler=".$speler."'
;
?>

zie de kleurtjes en besef dat die puntjes concatenate operators van php zijn, maar omdat je de string in php niet afsluit (geen enkele quote achter de dubbele) komen ze nu terecht in je query string. En dat betekent dat je zoekt op een speler wiens naam begint en eindigt met een punt. Ik durf te stellen dat die niet gevonden wordt (maar de query klopt verder dus je krijgt geen foutmelding).

Hoe het wel moet weet je zelf ook wel, dus dat hoef ik niet voor te doen.
 
Obelix Idefix

Obelix Idefix

17/08/2014 12:34:27
Quote Anchor link
Bij het maken van je databaseverbinding, zou je een foutmelding moeten krijgen. Welke is dat?
Waarom gebruik je bij de databaseverbinding myqli en in de andere code mysql?

Debuggen: echo de query ($sql) en zie wat er dan staat. Is dat wat er staat wat je verwacht? Of, zoals Erwin H aangeeft, wat anders?

Waarom regel 10 en 11?
Je query is onveilig, omdat je nergens controleert of $_GET['punten'] wel een getal is en $_GET['speler'] gebruik je onbeveiligd (--> mysql_real_escape_string).

Wees consequent in het gebruik van " en '
Op regel 4 echo je met ' op andere plaatsen met "
Op regel 2 gebruik je bij mysql " en op regel 14 ineens '

Verder is het nu vermoedelijk voor iedereen erg makkelijk om in een url een naam en punten te zetten, waarna de database wordt geupdate. Pietje of Carla kan dan zijn/haar naam in de url zetten en 100 punten.
Gewijzigd op 17/08/2014 12:36:48 door Obelix Idefix
 
Luc Gomes

Luc Gomes

17/08/2014 12:54:07
Quote Anchor link
obelix,

eerder werd mij aangeraden om mysqli te gebruiken maar mijn hosting provider kan dat volgens mij (nog) niet aan.
Probeerde met mysqli een verbinding te maken en kreeg een fout melding dat de syntax niet werd herkend ofzo.

ik ben een complete beginneling in php dus het ziet er inderdaad best wel rommelig uit. daar moet ik aan werken. dat laatste van pietje of carla is voor mij abacadabra jezal ongetwijfeld gelijk hebben maar hoe beveilig ik dat dan?

Luc

Toevoeging op 17/08/2014 13:09:31:

even off topic of misschien ook wel helemaal niet in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sql
= 'UPDATE klaverjassen
        SET totpunten=$row[0]+$punten
        WHERE speler=".$speler."'
;
?>

is $spelen een string volgens mij gaat het daarom fout.
Nu heb ik het volgende:

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
  
 <script language="javascript" type="text/javascript">
            function populateData(id)
            {
                alert('in populateData');
                y = document.getElementById("spelerid");
                document.getElementById("speler").value = speler[y.selectedIndex];
            }
    </script>
    <body>
        <?php
            mysql_connect("localhost", "xxxx", "xxxx") or die("Connection Failed");
            mysql_select_db("xxxxx")or die("Connection Failed");
            $query = "SELECT * FROM speler";
            $result = mysql_query($query);
        ?>
              
        <select id="spelerid" class="dropdown" onchange="populateData(this.value)">


            <?php
                while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
            ?>
  
            <option value="<?php echo $line['speler'];?>"> <?php echo $line['speler'];?>
            <?php
                $id
= $line['spelerid'];          
                $source_name = $line['speler'];
                }

            ?>

        </select>              
        <P><INPUT ID="spelerid" TYPE="TEXT" NAME="spelerid" SIZE="25"></P>    
    
    </body>
 

hierbij is het de bedoeling dat ik uit de speler tabel de speler selecteer en dat ik daar automatisch de bijbehorende ID in de input box krijg tot nu toe krijg ik alleen de alert "in populateData"
Heeft iemand een idee wat hier fout gaat?
Gewijzigd op 17/08/2014 13:52:07 door Luc Gomes
 
Obelix Idefix

Obelix Idefix

17/08/2014 13:19:12
Quote Anchor link
Luc Gomes op 17/08/2014 12:54:07:
eerder werd mij aangeraden om mysqli te gebruiken maar mijn hosting provider kan dat volgens mij (nog) niet aan.
Probeerde met mysqli een verbinding te maken en kreeg een fout melding dat de syntax niet werd herkend ofzo.

de kans dat je hostingprovider geen mysqli ondersteunt lijkt me klein. Anders zou ik op zoek gaan naar een ander.
Vermoedelijk heb je ergens een fout in je code zitten.
Maar als je hulp nodig hebt, zul je die moeten geven (of zelf moeten zoeken op internet).

Luc Gomes op 17/08/2014 12:54:07:
dat laatste van pietje of carla is voor mij abacadabra jezal ongetwijfeld gelijk hebben maar hoe beveilig ik dat dan?

Vraag 1 is waarom je met GET werkt en niet met POST in je formulier.
Als je straks een url krijgt als
http://www.mijnwebsite/update.php?naam=pietje&punten=100 is dat door iedereen heel eenvoudig te wijzigen. Ik verander pietje in obelix en 100 en 1000.
Zit die update.php (ik weet niet hoe het bij jou heet) achter een inlogpagina / zit er een beveiliging op? Dan wordt het al wat lastiger. Verder zou ik in ieder geval gaan werken met POST.


Plaats je code aub tussen code-tags ( [.code.] / [/.code.] zonder punten).
Zo is het niet echt leesbaar.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$id = $line['spelerid'];          
$source_name = $line['speler'];

Wat is hier de reden voor?

Heb je nou de andere problemen al opgelost? Of ga je verder met iets, terwijl het vorige nog niet (goed) werkt?
Gewijzigd op 17/08/2014 13:20:35 door Obelix Idefix
 
Luc Gomes

Luc Gomes

17/08/2014 13:33:46
Quote Anchor link
Zoals ik al vertelde ben ik een beginneling en ik dacht begrepen te hebben dat het WHERE met een integer erin het beste werkt.
Nu bevat de WHERE de speler(naam), in mij formulier selecteer ik de spelers met een dropdown uit de tabel spelers.
Nu wil ik ook het spelerid opnemen in de tabel klaverjassen zodat de getallen op de juiste plaats worden opgeteld als dat al werkt :).

En ja zowel het formulier als "procces.php" zitten achter een inlog beveiliging.
Gewijzigd op 17/08/2014 13:56:34 door Luc Gomes
 
Obelix Idefix

Obelix Idefix

17/08/2014 13:40:53
Quote Anchor link
Is het heel veel (extra) moeite om een punt (.) en/of komma (,) in je tekst te zetten. En hier en daar een Hoofdletter aan het begin van een zin. Bovenstaande is voor mij compleet onleesbaar.

En pas je vorige post even aan met die code-tags aub.
Gewijzigd op 17/08/2014 13:41:24 door Obelix Idefix
 
Luc Gomes

Luc Gomes

17/08/2014 14:07:20
Quote Anchor link
Geregeld beide aangepast sorry voor de onhandigheid.

Toevoeging op 17/08/2014 14:23:34:

We komen dichterbij maar het is het nog steeds net niet:

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
<?
$result
= mysql_query("SELECT totpunten,totmarsen FROM klaverjassen WHERE speler=speler");
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}

$row = mysql_fetch_row($result);

echo $row[0];
echo $punten;
 
$sql = mysql_query("UPDATE klaverjassen SET totpunten = '".$row[0]."' + '".$_GET['punten']."' WHERE speler = '".$_GET['speler']."'");

$retval = mysql_query( $sql );
if(! $retval )
{

  die('Could not update data: ' . mysql_error());
}

echo "Updated data successfully\n";
?>


geeft de volgende foutmelding maar ik kan nergens de '1' vinden in de query.

3546 (totpunten vorige week)
3647 (punten deze week beide met de echo)


Could not update data: 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 '1' at line 1

Ik ben zo vrij geweest om de line leesbaarder te maken.
 
Erwin H

Erwin H

17/08/2014 15:00:05
Quote Anchor link
Slordig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$result
= mysql_query("SELECT totpunten,totmarsen
                       FROM klaverjassen
                       WHERE speler=speler"
);
?>

En dan doel ik op dat 'WHERE speler=speler'. Dan haal je namelijk alle spelers op.... dat is neem ik aan toch ook weer niet de bedoeling.

En die '1' in je query komt ongetwijfeld voort uit de data die je in de string plakt. Dus als je gewoon naar je code blijft staren kom je die nooit tegen. Wat je (altijd!) moet doen bij een fout in je sql, is de query string echo'en zoals mysql die voor zijn kiezen krijgt. Dus in jouw geval op regel 12 zet je even om te testen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
//$sql = mysql_query("UPDATE klaverjassen SET totpunten = '".$row[0]."' + '".$_GET['punten']."' WHERE speler = '".$_GET['speler']."'");
echo "UPDATE klaverjassen
      SET totpunten = '"
.$row[0]."' + '".$_GET['punten']."'
      WHERE speler = '"
.$_GET['speler']."'";
exit;
?>

En leer svp ook af om die hele query om 1 regel te proppen, maakt het zo verschrikkelijk onleesbaar. Een php script schrijf je ook niet op 1 regel, hoewel het voor de parser niets uitmaakt.
Gewijzigd op 17/08/2014 15:00:22 door Erwin H
 

Pagina: 1 2 volgende »



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.