Avatar billede Slettet bruger
10. januar 2011 - 13:28 Der er 18 kommentarer og
1 løsning

Kan ikke få til at sende til databasen

Jeg har fået lidt hjælp fra en person. Der desværre ikke har mulighed for at hjælpe mig det næste stykke tid.
Derfor spørger jeg jer til råds.
Min hjælp havde ikke tid til at teste systemet.
Jeg har fundet og rettet et par fejl.
Men men nu kan jeg så ikke finde mere selv.

Har ikke selv lavet koden og har derfor svært ved lige at se hvordan jeg kan fejl finde og hvor fejlen evt er.


Jeg har denne side med en udtræk der trækker brugerens 16 spiller ud og en form til at sende dem til en ny database:

test2.php

<?
include('config.php');
$bruger = bruger1;

echo "<form name='form1' method='post' action='test.php'>";
echo "<center><table border='1' class='sample'><tr bgcolor='#000000'><td colspan='5'><center>";
echo "<font color='#FC9801' face='Verdana, Arial, Helvetica, sans-serif'>Dine spillere</font></center></td></tr>";
echo "<tr bgcolor='#222222'><td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Ude</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Inde</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Spiller</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Klub</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Placering</font></center></td></tr>";


$result = mysql_query("SELECT * from players WHERE bruger = '$bruger' ORDER BY find_in_set(plads, 'GK,F,M,A,T'), navn");
while($row=mysql_fetch_array($result))
{
echo "<tr><td><input type='radio' name='io" .$row['id']. "' value='o' checked='checked'></td><td><input type='radio' name='io" .$row['id']. "' value='i'></td><td>" .$row['navn']. "</td><td>" .$row['klub']. "</td><td>" .$row['plads']. "</td></tr>";
}


echo "</table>";
echo "<center><input type='submit' name='submit' value='Send dit hold'></center></form>";
?>



Så har jeg denne side som skal sende data fra en database til en anden.
Men kun hvis der via radio inputfeltet med value="i", er valgt en af følgende kombinationer i spillernes pladser:
1xGK, 2xF, 4xM, 1xA og 1xT eller
1xGK, 3xF, 3xM, 1xA og 1xT.
Hvis en af de 2 kombinationer er valgt skal alle 16 spiller sendes til databasen, både de 9 med value="i" og de sidste 7 med value="o" i radio felterne.

test.php

<?php
include("config.php");
session_start();
$bruger = Wagner;
$runde = 1;

//Modtag picks:
$selection = array("GK"=>0,"F"=>0,"M"=>0,"A"=>0,"T"=>0);
$players = array();
$result = mysql_query("SELECT * from players WHERE bruger = '$bruger' ORDER BY navn");
while($row=mysql_fetch_array($result)) {
if (!isset($_REQUEST['io'.$row['id']])) exit("Invalid input.");
if ($_REQUEST['io'.$row['id']] == "i") {
$selection[$row['plads']]++;
$players[$row['id']] = $row['id'];
}



//Tests picks::
$ok = false;
$validSelections = array();
$validSelections[] = array("GK"=>1,"F"=>2,"M"=>4,"A"=>1,"T"=>1);
$validSelections[] = array("GK"=>1,"F"=>3,"M"=>3,"A"=>1,"T"=>1);
foreach ($validSelections as $sel) {
$valid = true;
foreach ($sel as $plads => $num) {
if ( $selection[$plads] != $num) $valid = false;
}
if ($valid==true) $ok = true;
}


//Gem
if (!$ok) exit("Ugyldigt valg..");
if ($ok) {
$result = mysql_query("SELECT * from players WHERE bruger = '$bruger'");
while($row=mysql_fetch_array($result)) {
mysql_query("INSERT INTO valg (id, navn, klub, plads, bruger, io, runde) VALUES('".$row['id']."', '".$row['navn']."', '".$row['klub']."', '".$row['plads']."', '".$row['bruger']."', '".(array_key_exist($players, $row['id']) ? 'i' : 'o')."', '$runde')");
}
}
}
echo "Dine valg er gemt";
?>



Mit problem er at selvom jeg vælger den rigtige kombination af spiller skriver den bare "Ugyldigt valg".

Hvis i har spørgsmål så bare spørg. Jeg er MEGA ringe til at forklar ting så det er helt ok.
Avatar billede discotk Nybegynder
10. januar 2011 - 17:50 #1
Hvad siger den hvis du fjerner:

if (!$ok) exit("Ugyldigt valg..");
Avatar billede Slettet bruger
10. januar 2011 - 17:54 #2
Fatal error: Call to undefined function array_key_exist() in test.php on line 42

Det er så denne linje:
mysql_query("INSERT INTO valg (id, navn, klub, plads, bruger, io, runde) VALUES('".$row['id']."', '".$row['navn']."', '".$row['klub']."', '".$row['plads']."', '".$row['bruger']."', '".(array_key_exist($players, $row['id']) ? 'i' : 'o')."', '$runde')");
Avatar billede Slettet bruger
10. januar 2011 - 21:42 #3
Slet ikke nogen der kan hjælpe?
11. januar 2011 - 09:49 #4
Problemet synes at opstaa foer koden forsoeger at sende til databasen, nemlig ved testen om $ok der er true.  $ok forbliver false selv om du foretager et korrekt valg. 

Jeg noterer mig at din selection i test2.php er baseret paa $bruger = 'bruger1' men i test.php paa $bruger = 'Wagner.'  Maaske er det problemet.  Jeg har testet din kode med $bruger = 'bruger1' gennem hele koden, og jeg faar en $ok der er true ved en korrekt selection.  (Jeg har ikke undersoegt om med $ok == true valget saa bliver indsat korrekt i databasen.
Avatar billede discotk Nybegynder
11. januar 2011 - 12:01 #5
Hvordan ser din database ud?
Avatar billede Slettet bruger
11. januar 2011 - 13:42 #6
--> Discotk
Det har jeg krydstjekket mange gange.

Min database valg ser sådan ud:
[id][navn][bruger][klub][plads][io][runde]

Christian -> Det er godt set. Jeg lavede nemlig en test side og database for at tjekke det. Desværre havde jeg brugt en af mine brugers brugernavn, jeg har lige testet det igen, og jeg får desværre samme fejl.

Jeg får stadig ikke ok true. Heller ikke selvom jeg tilføjer et mere = altså "$ok == true"

Jeg undre mig bare lidt over denne del:

foreach ($sel as $plads => $num) {
if ( $selection[$plads] != $num) $valid = false;
}
if ($valid==true) $ok = true;
}


Delen er i test delen og bruger $plads...
Hvor ved den fra at $plads = $row['plads']??
11. januar 2011 - 14:05 #7
I http://christianjorgensen.be/ddd.php har jeg lavet en mini-applikation der virker ved at bruge din kode med de foelgende undtagelser:

1.  Jeg bruger en tabel der hedder ddd_players.
2.  Jeg bruger $bruger = 'bruger1' i begge tilfaelde hvor $bruger anvendes.
3.  Jeg holder, for oversigten, det hele paa en side, saa i formularen er action='' i stedet for action='test.php'
4.  Jeg har skippet den sidste del af koden hvor det valgte hold gemmes i databasen fordi mit indlaeg koncentrere sig om at loese det foerste problem, det at fjerne 'ugyldigt valg' og faa $ok til at vaere true.  I stedet har jeg indsat en besked der, hvis $ok == true, skriver "SELECTION ER VALID."

Proev at aabne linket og lave et par valid og et par ikke-valid selections og konstater at koden er god nok, hvem der saa har lavet den.  (Du er sikker paa at du i kodelinie 2 i test2.php og i kodelinie 4 i test.php anvender det samme brugernavn?)

Her er koden:

<?
....connect til databasen....

$bruger = bruger1;

echo "<form name='form1' method='post' action=''>";
echo "<center><table border='1' class='sample'><tr bgcolor='#000000'><td colspan='5'><center>";
echo "<font color='#FC9801' face='Verdana, Arial, Helvetica, sans-serif'>Dine spillere</font></center></td></tr>";
echo "<tr bgcolor='#222222'><td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Ude</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Inde</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Spiller</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Klub</font></center></td>";
echo "<td><center><font color='#FC9801' size='2' face='Verdana, Arial, Helvetica, sans-serif'>Placering</font></center></td></tr>";

$result = mysql_query("SELECT * from ddd_player WHERE bruger = '$bruger' ORDER BY find_in_set(plads, 'GK,F,M,A,T'), navn") or die(mysql_error());

while($row=mysql_fetch_array($result))
{
echo "<tr><td><input type='radio' name='io" .$row['id']. "' value='o' checked='checked'></td><td><input type='radio' name='io" .$row['id']. "' value='i'></td><td>" .$row['navn']. "</td><td>" .$row['klub']. "</td><td>" .$row['plads']. "</td></tr>";
$idarray[] = $row['id'];
}

echo "</table>";
echo "<center><input type='submit' name='submit' value='Send dit hold'></center></form>";

//Behandle resultatet af formen
if($_POST['submit'])

{
  //Modtag picks:
  $selection = array("GK"=>0,"F"=>0,"M"=>0,"A"=>0,"T"=>0);
  $players = array();

  $result = mysql_query("SELECT * from ddd_player WHERE bruger = '$bruger' ORDER BY navn");
  while($row=mysql_fetch_array($result))
  {
    if (!isset($_REQUEST['io'.$row['id']])) exit("Invalid input.");
    if ($_REQUEST['io'.$row['id']] == "i")
    {
      $selection[$row['plads']]++;
      $players[$row['id']] = $row['id'];
    }
  }

  //Tests picks::
  $ok = false;
  //$validSelections = array();
  $validSelections[] = array("GK"=>1,"F"=>2,"M"=>4,"A"=>1,"T"=>1);
  $validSelections[] = array("GK"=>1,"F"=>3,"M"=>3,"A"=>1,"T"=>1);
  foreach ($validSelections as $sel)
  {
    $valid = true;
    foreach ($sel as $plads => $num)
    {
      if ( $selection[$plads] != $num) $valid = false;
    }
    if ($valid==true) $ok = true;
  }

  if (!$ok) exit("Ugyldigt valg..");
  if ($ok) echo "SELECTION IS VALID! <br>";
}

mysql_close($link); 

?>
Avatar billede Slettet bruger
11. januar 2011 - 15:39 #8
Se det virker jo næsten perfekt ved mig.

Men jeg får en fejl når jeg prøver at

Når jeg skal indsætte i min database, skal så jeg sætter det ind sådan her:


  if (!$ok) exit("Ugyldigt valg..");
//  if ($ok) echo "SELECTION IS VALID! <br>";
  if ($ok) {
$result = mysql_query("SELECT * players WHERE bruger = '$bruger'");
while($row=mysql_fetch_array($result)) {
mysql_query("INSERT INTO valg (id, navn, klub, plads, bruger, io, runde) VALUES('".$row['id']."', '".$row['navn']."', '".$row['klub']."', '".$row['plads']."', '".$row['bruger']."', '".(array_key_exist($players, $row['id']) ? 'i' : 'o')."', '$runde')");
}
}


Der får jeg nemlig denne fejl:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in test3.php on line 63
11. januar 2011 - 15:49 #9
Med andre ord, hvis du konstaterer at http://christianjorgensen.be/ddd.php virker, saa proev i foerste omgang det samme paa dit system, det vil sige:

1.  Faa paa din kode $ok til at virke.  Du retter midlertidigt dette:

//Gem
if (!$ok) exit("Ugyldigt valg..");
if ($ok) {
$result = mysql_query("SELECT * from players WHERE bruger = '$bruger'");
o.s.v.

til:
//Gem
  if (!$ok) exit("Ugyldigt valg..");
  if ($ok) echo "SELECTION IS VALID! <br>";

2.  Naar du saa kan faa "SELECTION IS VALID" saa har du fast grund under foedderne ved at du ved at din kode kan det hele til og med at afgoere om et kald er korrekt.

3.  Hvis du saa, naar du putter din kode tilbage, har problemer ved du at det maa ligge i koden der skal gemme valget i databasen.  Jeg foreslaar at du midlertidigt lader SELECTION IS VALID staa og tilfoejer ..or die(mysql_error()) saaledes at mysql fortaeller hvis der er problemer.  Altsaa:

//Gem
if (!$ok) exit("Ugyldigt valg..");
if ($ok) {
echo "SELECTION IS VALID" <br>;
$result = mysql_query("SELECT * from players WHERE bruger = '$bruger'")or die(mysql_error());
while($row=mysql_fetch_array($result)).....
o.s.v.

Proev det ud og fortael hvad der sker.
11. januar 2011 - 18:16 #10
Vores indlaeg krydsede hinanden og jeg skulle skynde mig vaek.  Jeg kikker paa hvad du siger og kommer tilbage.
11. januar 2011 - 22:03 #11
Det tog lidt tid, men nu er jeg med igen og har kikket paa det.

Saa du fik loest problemet at $ok ikke ville genkende et korrekt valg.  Saa nu er vejen aabnet for at danne den query der skal sendes til databasen.  Men nu gaar dette galt.  Saa der er problemer med queryen. 

Queryen du opgiver er denne:

mysql_query("INSERT INTO valg (id, navn, klub, plads, bruger, io, runde) VALUES('".$row['id']."', '".$row['navn']."', '".$row['klub']."', '".$row['plads']."', '".$row['bruger']."', '".(array_key_exist($players, $row['id']) ? 'i' : 'o')."', '$runde')")

Jeg tror problemet ligger i denne kode-stump:

'".(array_key_exist($players, $row['id']) ? 'i' : 'o')."',

hvor jeg har fundet to problemer:

(1)  Funktionen array_key_exists undersoeger om der er en bestemt key i en bestemt array.  $row['id'] er key'en og $players er arrayen.  I syntaksen for array_key_exists() skal key komme foerst og saa arrayen, saa koden skal vaere:

'".(array_key_exist($row['id'], $players) ? 'i' : 'o')."',

(2)  Men det ser ud til at udtrykket er for komplekst til at en mysql query-streng kan beregne den.  En loesning er at beregne udtrykket foerst og putte den beregnede vaerdi i en variabel og derefter bruge denne variabel i query-strengen, altsaa saaledes:

$io = (array_key_exists($row["id"], $players)) ? "i" : "o" ;
mysql_query("INSERT INTO .......  $io ....");

Denne kode virker paa min test-site (samme link som ovenfor,) og naar jeg saa kikker i databasen (min tabel hedder ddd_valg) saa sidder de 16 spillere der med korrekte 'i' og 'o'.

Kik paa det og proev at indsaette det i din egen kode og se om det ikke virker for dig ogsaa.

Puha, den var ikke nem.
11. januar 2011 - 22:05 #12
Hovsa, jeg fik ikke vist koden der virker i min test-site.  Her er den:

  if (!$ok) exit("Ugyldigt valg..");
  if ($ok)
  {
    $result = mysql_query("SELECT * FROM ddd_player WHERE bruger = '$bruger'")or die(mysql_error());
    while($row=mysql_fetch_array($result))
    {
      $io = (array_key_exists($row["id"], $players)) ? "i" : "o" ;
      mysql_query("INSERT INTO ddd_valg (id, navn, klub, plads, bruger, io, runde) VALUES('".$row['id']."', '".$row['navn']."', '".$row['klub']."', '".$row['plads']."', '".$row['bruger']."', '$io', '$runde')")or die(mysql_error());
    }
  }
Avatar billede Slettet bruger
11. januar 2011 - 22:14 #13
Okay..

Jeg har nu flettet den første del ind i mit system.
Det virker fint.

Så prøvede jeg at sætte databasen til min test side.
Det er med blandet fornøjelse.

Den sender ingen ting til databasen. Men den skriver:

SELECTION IS VALID
Fatal error: Call to undefined function array_key_exist() in test3.php on line 65



På min egen side skriver den ingen fejl, men bare "SELECTION IS VALID" og så sender den intet.
Avatar billede Slettet bruger
11. januar 2011 - 22:18 #14
Jeg var lige for hurtigt.
Var ved at skrive men ville så prøve noget.
Imens skrev du så de nye indlæg.

Dem prøver jeg lige..
Avatar billede Slettet bruger
11. januar 2011 - 22:42 #15
Jeg har ikke et øje tørt.
Det køre bare som det skal... Det var da helt vildt.
Så lang tids kamp er endelig overstået.

100000000 tak...

Du må gerne poste et svar.
Avatar billede Slettet bruger
12. januar 2011 - 00:53 #16
Uha... Nu da det virker. Og det virker på en anden måde end lige først antaget (det med det hele er i en fil). Så sker der jo det at når man trykker send, så sendes der til databasen og giver besked tilbage om dette. Men den side man så (stadig) er på viser jo igen alle spillerne med de 2 radio input. Alle inputfelterne står så igen i ude inputet.

Det gav mig en ekstra ide jeg ikke havde overvejet før.
(skal nok skrive et nyt spørgsmål om dette hvis det ønskes)

Er det muligt at lave sådan, at når en bruger ser sine spiller efter han/hun har sendt sit hold ind. Så vil prikkerne i input feltet passe med om spilleren er valgt til at være inde og ude?

Og evt så knappen nu kan bruges til at sende evt rettelser.
Rettelserne skal jo også kun gemmes i databasen hvis de overholder de krav som man har når man sætter holdet.

Jeg skal nok oprette et nyt spørgsmål til dette.
Men vil lige høre om det er noget der er nemt at smide ind?
Eller om der er en nemmere måde?
12. januar 2011 - 05:51 #17
1.  Det var godt det virker.

2.  Det at kunne 'redigere' sine spillere vil uden tvivl vaere muligt.  Som du selv siger boer det nok vaere emnet for et nyt spoergsmaal.  Saa faar det nye spoergsmaal frisk opmaerksomhed fra hele Ekspertens medlemsskare, ikke kun de der er i gang med denne traad.

I den nye traad boer du saa nok forklare hvor indholdet i $runde kommer fra, det drejer sig nok om, i pseudokode,

if(tabellen allerede indeholder spillere for $runde) $mode = 'rediger'

if(mode = 'rediger')
{
  mysql_query("select spillerne og deres prikker fra valg...

else mysql_query(..select spillerne fra players

if($_POST['submit'])
  if($mode == 'rediger') mysql_query(update valg set....)
  else mysql_query(insert into valg ....)
Avatar billede Slettet bruger
12. januar 2011 - 10:25 #18
Super. Det prøver jeg lige.
Avatar billede discotk Nybegynder
13. januar 2011 - 11:38 #19
Hvad var den færdige løsning?
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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