bij uitslag 0-0 wordt database niet geupdate

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Folko Huizinga

Folko Huizinga

19/01/2012 22:26:09
Quote Anchor link
Via een formulier wordt een uitslagen tabel geupdate.
Op zich fuctioneert dat goed... echter wanneer een 0-0 uitslag genoteerd wordt, dan wordt deze specifieke wedstrijd niet geupdate.
Zal een fout in het script zijn, maar ik kan hem niet vinden.
Iemand die even mee wil kijken?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
if    ($dp_thuis > $dp_uit ){$wp_thuis=3; $wp_uit=0;}
             elseif($dp_thuis == $dp_uit){$wp_thuis=1; $wp_uit=1;}
             else                        {$wp_thuis=0; $wp_uit=3;}
             if    (empty($aftr_thuis) ) {$aftr_thuis = 'null';}
             if    (empty($aftr_uit)   ) {$aftr_uit   = 'null';}
             $q="UPDATE wedstrijden
                 SET    dp_thuis   = ".$dp_thuis."
                 ,      dp_uit     = ".$dp_uit."
                 ,      aftr_thuis = ".$aftr_thuis."
                 ,      aftr_uit   = ".$aftr_uit."
                 ,      wp_thuis   = ".$wp_thuis."
                 ,      wp_uit     = ".$wp_uit."
                 WHERE  id         = ".$wed_id;
 
PHP hulp

PHP hulp

18/11/2024 06:38:32
 
Erwin H

Erwin H

19/01/2012 22:29:08
Quote Anchor link
Dat krijg je als je empty gebruikt. Kijk maar eens wat empty allemaal als "leeg" aanmerkt: http://php.net/manual/en/function.empty.php
 
Folko Huizinga

Folko Huizinga

19/01/2012 22:50:43
Quote Anchor link
Hartelijk dank voor je reactie, Erwin.
Geen empty gebruiken dus.
Nu moet ik bekennen, dat ik maar weinig php/sql kennis heb en de scripts destijds door iemand anders gemaakt zijn.
In mijn naiviteit heb ik de twee regels uit het script verwijderd waar de ampty in voorkomt, maar als het formulier dan gebruikt wordt, dan treden er allemaal foutmeldingen op.
Misschien dat je zo vriendelijk wilt zijn aan te geven welke code wel gebruikt kan worden?
 
Erwin H

Erwin H

19/01/2012 22:53:00
Quote Anchor link
Kijk naar isset(). Die functie kijkt of de betreffende variabele bestaat. Vooral ook bruikbaar als je $_POST of $_GET waardes wilt uitlezen. Als het dan nog niet werkt is het misschien goed om je hele (relevante) code te plaatsen, dus speciaal het deel waar je de variabelen uitleest.
 
Folko Huizinga

Folko Huizinga

19/01/2012 23:01:35
Quote Anchor link
Gebruik ik isset op de plaats van empty, dan volgen er geen foutmeldingen, maar de 0-0 uitslag wordt niet in de database geschreven.
Jammer genoeg weet ik niet welke 'rest' van de code je bedoeld, dus ik plaats nu een hele lap (weet dat jullie daar een hekel aan hebben) en hoop dat het goede stuk erbij zit.


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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<br />
<br />
<div><input id="submitbutton" type="submit" name="submit" value="opslaan" /></div>
</form>

<?php
//---------------------------------------------------------------
//-- De form is gesubmit om de ingevulde uitslagen op te slaan --
//---------------------------------------------------------------

}elseif(isset($_POST['submit']) and $_POST['submit']=='opslaan'){
//print_r($_POST);
    //Loop door alle 'geposte' wedstrijden

   foreach($_POST['id'] as $key => $wed_id){

     //  echo "<p>".$wed_id."</p>";
      $dp_thuis   = $_POST['dp_thuis'][$key];
      $dp_uit     = $_POST['dp_uit'][$key];
     // $aftr_thuis = abs($_POST['aftr_thuis'][$key]);  abs maakt 0 van letters! niet gebruiken dus
     // $aftr_uit   = abs($_POST['aftr_uit'][$key]);

      $aftr_thuis = $_POST['aftr_thuis'][$key];
      $aftr_uit   = $_POST['aftr_uit'][$key];
      //toon($dp_thuis.','.$dp_uit.','.$aftr_thuis.','.$aftr_uit);
      //Sla de wedstrijd over als geen van de vier velden is ingevuld, ga he anders behandelen

      if(empty($dp_thuis) and empty($dp_uit) and empty($aftr_thuis) and empty($aftr_uit)){$aantal_overslaan =+1;} else{

         //Controleer of zowel de doelpunten voor het thuis- als het uitspelende team zijn ingevuld
         if (voldoet($dp_thuis  , 'verplicht') and
             voldoet($dp_uit    , 'verplicht') and
             voldoet($aftr_thuis, 'optioneel') and
             voldoet($aftr_uit  , 'optioneel') ){

             //Bepaal de wedstrijdpunten
             if     ($dp_thuis > $dp_uit ){$wp_thuis=3; $wp_uit=0;}
             elseif($dp_thuis == $dp_uit){$wp_thuis=1; $wp_uit=1;}
             else                        {$wp_thuis=0; $wp_uit=3;}
             if    (isset($aftr_thuis) ) {$aftr_thuis = 'null';}
             if    (isset($aftr_uit)   ) {$aftr_uit   = 'null';}
             $q="UPDATE wedstrijden
                 SET    dp_thuis   = "
.$dp_thuis."
                 ,      dp_uit     = "
.$dp_uit."
                 ,      aftr_thuis = "
.$aftr_thuis."
                 ,      aftr_uit   = "
.$aftr_uit."
                 ,      wp_thuis   = "
.$wp_thuis."
                 ,      wp_uit     = "
.$wp_uit."
                 WHERE  id         = "
.$wed_id;
             //echo "<p>".$q."</p>";
             $r = mysql_query($q);
             //echo "<p>TEST: eventuele sql-fout: </p>".mysql_error();
             if (mysql_affected_rows()!= 1){
                $error = mysql_error();
                if (!empty($error)){echo "<p>Er is een technische fout opgetreden in de volgende query:</p>
                                          <p>$q</p>
                                          <p>Meld volgende fout aan de beheerde van deze site: "
.mysql_error()."</p>";}
             }
// End if mysql_affected_rows is ongelijk aan 1
             $aantal_verwerkt =$aantal_verwerkt + mysql_affected_rows();
             //echo "<p>$aantal_verwerkt</p>";
         }else{
            $fouten[]=  $_POST['teamt'][$key].' -  '.$_POST['teamu'][$key];
         }
      }
   }
//End loop door alle 'geposte' wedstrijden
   mysql_query('commit');
   $aantal_fouten = count($fouten); //echo "<p>aantal fouten = ".$aantal_fouten."</p>";
   if ($aantal_fouten > 0 ){
      echo "<h1>Fouten!</h1>";
      echo "<p>Bij $aantal_fouten wedstrijden zijn de uitslagen (of eventueel aftrekpunten) onjuist ingevuld</p>"; ?>

      <p>Controleer de volgende zaken:</p>
      <ul><li>De velden doelpunten thuis en uit zijn verplicht</li>
          <li>Er mogen alleen hele en positieve getallen worden ingevuld (ook bij de aftrekpunten)</li>
          <li>Uitslagen groter dan 99 lijken ons hoogst onwaarschijnlijk en worden dan ook niet geaccepteerd</li>
      </ul>
      <p>De fouten zijn gemaakt bij de volgende wedstrijden:</p>
      <ul>

     <?php
      foreach($fouten as $key => $wedstrijd){
        echo"<li>$wedstrijd</li>" ;
      }

      echo "</ul> ";
      echo"<br />  <input id=\"submitbutton\" type=\"button\" name=\"Terug\" value=\"Terug naar wedstrijden\" onClick=\"Javascript:history.go(-1);\" />";


   }
elseif(!empty($aantal_verwerkt) and ($aantal_verwerkt > 0)){
      echo "<p>De gegevens zijn opgeslagen.</p>";
      echo "<p>Er zijn $aantal_verwerkt wedstrijden verwerkt.</p>";
      echo "<br /><br /><br />";
      echo "<button id=\"submitbutton\" onclick=\"Javascript:location.href='uitslagen_verwerken.php';\" >Terug naar beginpagina</button>" ;
   }
else{
      echo "Er zijn geen gegevens verwerkt";
      echo "<br /><br /><br />";
      echo "<button id=\"submitbutton\" onclick=\"Javascript:location.href='uitslagen_verwerken.php';\" >Terug naar beginpagina</button>" ;
   }
[
/code]
 
Erwin Goossen

Erwin Goossen

19/01/2012 23:23:36
Quote Anchor link
Regel 24: empty veranderen in isset
Eigenlijk overal even doen
Gewijzigd op 19/01/2012 23:24:11 door Erwin Goossen
 
Erwin H

Erwin H

19/01/2012 23:27:13
Quote Anchor link
Lijkt mij dat het in elk geval om dit stuk gaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
//  echo "<p>".$wed_id."</p>";
      $dp_thuis   = $_POST['dp_thuis'][$key];
      $dp_uit     = $_POST['dp_uit'][$key];
     // $aftr_thuis = abs($_POST['aftr_thuis'][$key]);  abs maakt 0 van letters! niet gebruiken dus
     // $aftr_uit   = abs($_POST['aftr_uit'][$key]);

      $aftr_thuis = $_POST['aftr_thuis'][$key];
      $aftr_uit   = $_POST['aftr_uit'][$key];
      //toon($dp_thuis.','.$dp_uit.','.$aftr_thuis.','.$aftr_uit);
      //Sla de wedstrijd over als geen van de vier velden is ingevuld, ga he anders behandelen

      if(empty($dp_thuis) and empty($dp_uit) and empty($aftr_thuis) and empty($aftr_uit)){$aantal_overslaan =+1;} else{
?>

In de eerste plaats gebruik je de waardes van de $_POST array al zonder eerste te controleren of ze wel bestaan. Dus voor je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$dp_thuis
   = $_POST['dp_thuis'][$key];
?>

doet, zou je al moeten controleren of die waarde wel bestaat in de $_POST array. Bijvoorbeeld met isset(). Daarnaast zou je daar kunnen controleren wat de waarde is, zodat als je verder gaat je weet dat de waarde die je krijgt bestaat en valide is (bijvoorbeeld geen negatieve score).
Als je alle waardes hebt uitgelezen zou je misschien even een echo kunnen doen van die waardes, zodat je kan controleren of de 0-0 meegenomen wordt of niet.
 
Folko Huizinga

Folko Huizinga

19/01/2012 23:31:56
Quote Anchor link
Overal empty gewijzigd in isset.
Nog steeds wordt de wedstrijdtabel niet geupdate

Toevoeging op 19/01/2012 23:38:00:

Dank voor jullie reactie, Erwin en Erwin.
Ik vrees dat het me nu al ver boven de pet gaat.
Zoals gezegd heb ik weinig tot geen php/mysql kennis.
Ik had gehoopt dat jullie zouden kunnen aangeven: "verander dit in dat" en dat het daarmee geregeld zou zijn. Helaas lijkt het erop dat dat te simpel gedacht is...
Ik dank jullie hartelijk voor de moeite die jullie genomen hebben!
 
Erwin H

Erwin H

19/01/2012 23:38:07
Quote Anchor link
Dan wordt het dus netjes debuggen en dan kan je beginnen met, zoals ik al zei:
Erwin H op 19/01/2012 23:27:13:
Als je alle waardes hebt uitgelezen zou je misschien even een echo kunnen doen van die waardes, zodat je kan controleren of de 0-0 meegenomen wordt of niet.
 
Folko Huizinga

Folko Huizinga

19/01/2012 23:47:54
Quote Anchor link
ik weet dat debuggen het opsporen van niet werkende code is en dat echo'en een resultaat van een query op het scherm tonen is. Maar hòe... ik heb geen idee.
Het lijkt me dat 0-0 niet meegenomen is... want als ik in de database kijk, dan staat bij betreffende wedstrijd niets ingevuld.
 
Jurgen B

Jurgen B

20/01/2012 00:38:08
Quote Anchor link
Iedereen zegt wel zo mooi empty veranderen in isset maar zegt daar niet bij dat dit het tegenovergestelde doet...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if (empty($var)) { // wanneer de var empty is 'doe iets'
   //doe iets

}

if (isset($var)) { // wanneer de var 'geset' is 'doe iets'
   //doe iets

}

if (!isset($var)) { // wanneer de var NIET 'geset' is 'doe iets'
   //doe iets

}
?>

Als je de if statements niet aanpast gebeurd er nu dus het tegenovergestelde! Als je dus empty door isset vervangt zonder de constructie aan te passen moet je !isset() gebruiken om hetzelfde effect te krijgen.
Gewijzigd op 20/01/2012 00:40:23 door Jurgen B
 
Reshad F

Reshad F

20/01/2012 15:22:50
Quote Anchor link
als je niks in je tabel krijgt kan het dan niet liggen aan het feit dat het vinkje met NULL niet aangevinkt is in je DB table waar het heengeschreven moet worden?
 
Bas  van de Steeg

Bas van de Steeg

20/01/2012 15:31:03
Quote Anchor link
Je kan wel gewoon empty gebruiken maar dan maken dat wanneer er niks is ingevuld de standaard waarde 0 is.
 
Erwin H

Erwin H

20/01/2012 15:45:02
Quote Anchor link
Grappig, dat dit zo ongeveer het duidelijkste voorbeeld is van wanneer je NIET empty moet gebruiken, en toch blijven sommigen nog wegen proberen te vinden om het wel te gebruiken....

@Bas, het gaat om een UPDATE. Hoe kan je nu nog onderscheid maken tussen leeg (=niet ingevuld, geen update) en 0 (=wel ingevuld, wedstrijd was 0-0).

Folko Huizinga op 19/01/2012 23:47:54:
ik weet dat debuggen het opsporen van niet werkende code is en dat echo'en een resultaat van een query op het scherm tonen is. Maar hòe... ik heb geen idee.

echoen is gewoon echo gebruiken: http://php.net/manual/en/function.echo.php
Maar als dat nieuw voor je is, dan is het misschien beter om eerst de tutorials hier door te gaan nemen over php.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/01/2012 16:21:36
Quote Anchor link
Wellicht muggezifterij maar waarom de wedstrijdpunten opslaan in de uitslagen tabel?
 
Jurgen B

Jurgen B

20/01/2012 16:46:37
Quote Anchor link
Dan kan je nog verder gaan en je afvragen waarom wedstrijdpunten uberhaupt in de database staan ;) De theorie is dat 'berekenbare resultaten' niet worden opgeslagen om precies die reden dat ze uit te rekenen zijn wanneer je ze nodig hebt.
 
Folko Huizinga

Folko Huizinga

20/01/2012 16:51:15
Quote Anchor link
Bedankt voor al jullie reacties.
Ik heb empty vervangen door !isset, maar dit leverde queryfouten op.

Het gekke is, vind ik, dat bij uitslagen 0-1 en 1-0 geen problemen optreden, ook niet bij andere gelijke spelen dan 0-0.
Het is alleen die vermaledijde 0-0 uitslag.

De empty staat trouwens voor de aftrekpunten, en deze zijn natuurlijk niet 0.
Meestal zijn deze velden leeg en leveren geen problemen op (ook niet als er wel aftrekpunten (positief getal zijn ingegeven).
 
Jurgen B

Jurgen B

20/01/2012 16:52:33
Quote Anchor link
Laat eens zien wat je dan nu exact hebt, na de veranderingen.
 
Folko Huizinga

Folko Huizinga

20/01/2012 16:58:50
Quote Anchor link
Het enige wat ik geprobeerd heb, is in het onderstaande code

in de if statements empty vervangen door isset (geeft geen verandering)
en in de if statements empty vervangen door !isset (geeft queryfouten)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
if    ($dp_thuis > $dp_uit ){$wp_thuis=3; $wp_uit=0;}
             elseif($dp_thuis == $dp_uit){$wp_thuis=1; $wp_uit=1;}
             else                        {$wp_thuis=0; $wp_uit=3;}
             if    (empty($aftr_thuis) ) {$aftr_thuis = 'null';}
             if    (empty($aftr_uit)   ) {$aftr_uit   = 'null';}
             $q="UPDATE wedstrijden
                 SET    dp_thuis   = ".$dp_thuis."
                 ,      dp_uit     = ".$dp_uit."
                 ,      aftr_thuis = ".$aftr_thuis."
                 ,      aftr_uit   = ".$aftr_uit."
                 ,      wp_thuis   = ".$wp_thuis."
                 ,      wp_uit     = ".$wp_uit."
                 WHERE  id         = ".$wed_id;
 
Jurgen B

Jurgen B

20/01/2012 17:07:26
Quote Anchor link
Als je in dat stukje code de empty's vervangt door !isset dan ben ik wel benieuwd waarom er ineens een queryfout zou moeten komen. Daarnaast heb je ook bij je controle of 'geen van de 4 velden zijn ingevuld' van empty gebruik gemaakt waar isset een betere oplossing is (om precies dezelfde reden).

Vervang empty door !isset en print de query die dan uitgevoerd wordt en laat die eens zien aub.
 
Folko Huizinga

Folko Huizinga

20/01/2012 17:12:19
Quote Anchor link
Gedaan.
na het doen van een update met een 0-0 uitslag...
krijg ik de volgende fout:

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
Er is een technische fout opgetreden in de volgende query:

UPDATE wedstrijden SET dp_thuis = 2 , dp_uit = 13 , aftr_thuis = , aftr_uit = , wp_thuis = 0 , wp_uit = 3 WHERE id = 231

Meld volgende fout aan de beheerde van deze site: 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 ' aftr_uit = , wp_thuis = 0 , ' at line 5

Er is een technische fout opgetreden in de volgende query:

UPDATE wedstrijden SET dp_thuis = 6 , dp_uit = 4 , aftr_thuis = , aftr_uit = , wp_thuis = 3 , wp_uit = 0 WHERE id = 241

Meld volgende fout aan de beheerde van deze site: 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 ' aftr_uit = , wp_thuis = 3 , ' at line 5

Er is een technische fout opgetreden in de volgende query:

UPDATE wedstrijden SET dp_thuis = 6 , dp_uit = 5 , aftr_thuis = , aftr_uit = , wp_thuis = 3 , wp_uit = 0 WHERE id = 236

Meld volgende fout aan de beheerde van deze site: 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 ' aftr_uit = , wp_thuis = 3 , ' at line 5

Er is een technische fout opgetreden in de volgende query:

UPDATE wedstrijden SET dp_thuis = 3 , dp_uit = 3 , aftr_thuis = , aftr_uit = , wp_thuis = 1 , wp_uit = 1 WHERE id = 246

Meld volgende fout aan de beheerde van deze site: 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 ' aftr_uit = , wp_thuis = 1 , ' at line 5


Op de pagina waarvan ik de update doen, staan 20 wedstrijden, allen ingevuld (eentje met 0-0) aan de wedstrijd Id's kan ik zien dat de wedstrijd die in 0-0 geeindigd is, niet in de foutmelding is meegenomen.
Gewijzigd op 20/01/2012 17:16:31 door Folko Huizinga
 

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.