Avatar billede musiki Nybegynder
22. oktober 2009 - 18:00 Der er 10 kommentarer og
1 løsning

Løber helt igennem koden

Hej eksperter,
jeg kunne godt bruge noget hjælp til nedenstående kode.
Problemet er at computeren løber helt igennem koden, så selvom der er fejl, gemmer den på serveren.

---
Outputtet/fejlen ser sådan her ud:
We encountered an error:
Please enter the yearWe encountered an error:
Please enter the price of the wine, or your best estimateWe encountered an error:
Please rate the wine

kjaslkdjaljda has been added!
----

Koden er strikket sammen af lidt af hvert, men har fungeret tidligere i dag (?), og er som følger:


<?php

/* Check all form inputs using check_input function */

$winetype = check_input($_POST['winetype'], "Please select type of wine");
$winename = check_input($_POST['winename'], "Please enter a name of the wine");
$wineyear = check_input($_POST['wineyear'], "Please enter the year");
$wineprice = check_input($_POST['wineprice'], "Please enter the price of the wine, or your best estimate");
$winestars = check_input($_POST['winestars'], "Please rate the wine");


function check_input($data, $problem='')

{

    $data = trim($data);

    $data = stripslashes($data);

    $data = htmlspecialchars($data);

    if ($problem && strlen($data) == 0)

    {

        show_error($problem);

    }

    return $data;

}



function show_error($myError)

{

    echo "<html>";
    echo "<body>";
      echo "<b>We encountered an error:</b><br />";
    echo $myError;
    echo "</body>";
    echo "</html>";

}


$con = mysql_connect("DATABASE","USER","PASSWORD");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$a = uniqid(pro);
mysql_query("SET NAMES utf8");
mysql_select_db("MAINDATABASE", $con);

$sql="INSERT INTO Stellenbosch (winetype, winename, wineyear, wineprice, winestars, reviewer, description, id)
VALUES
('$_POST[winetype]','$_POST[winename]','$_POST[wineyear]','$_POST[wineprice]','$_POST[winestars]','$_POST[reviewer]','$_POST[description]','$a')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }

  echo "<html>";
  echo "<head>";
  echo "<title>" . $_POST[winename] . "</title>";
  echo "</head>";
  echo "<body>";

  echo "<p class='boks'>" . $_POST[winename] . " has been added!</p></div></a>";

  echo "</body>";
  echo "</html>";


mysql_close($con)
?>


På forhånd tak for hjælpen!
Avatar billede michael_stim Ekspert
22. oktober 2009 - 18:05 #1
Prøv at sætte følgende EFTER din funktion:

$winetype = check_input($_POST['winetype'], "Please select type of wine");
$winename = check_input($_POST['winename'], "Please enter a name of the wine");
$wineyear = check_input($_POST['wineyear'], "Please enter the year");
$wineprice = check_input($_POST['wineprice'], "Please enter the price of the wine, or your best estimate");
$winestars = check_input($_POST['winestars'], "Please rate the wine");
Avatar billede musiki Nybegynder
22. oktober 2009 - 18:44 #2
Hej Michael,
tak for det hurtige svar - der var dog ingen ændring:

We encountered an error:
Please enter the yearWe encountered an error:
Please enter the price of the wine, or your best estimateWe encountered an error:
Please rate the wine

Test has been added!
Avatar billede michael_stim Ekspert
22. oktober 2009 - 18:52 #3
Men som du har skrevet det der, vil den løbe alt igennem. Men du siger det er brudstykker af alt koden.
Avatar billede musiki Nybegynder
22. oktober 2009 - 19:03 #4
Ja, ultimativt skal den løbe igennem hele koden.
Men kan jeg sætte det op så den først løber igennem hver af inputtene, om de er fyldt ud, (altså første input for sig, så det andet osv.) og først derefter sender inputtene til serveren?
Avatar billede michael_stim Ekspert
22. oktober 2009 - 19:06 #5
Hvis jeg var dig, ville jeg først checke på klienten via javascript. Derefter ville jeg køre et PHP-script der checkede om felterne var tomme.
Avatar billede musiki Nybegynder
22. oktober 2009 - 20:59 #6
Klienten?

Jeg er ikke særlig skarp på hele programmeringssiden, derfor jeg har hugget med arme og ben fra diverse tutorials, så javascript har jeg overhovedet ikke styr på endnu.

Test på klienten har jeg ingen ide om hvordan jeg laver.

Det der undrer mig er at scriptet virkede fint (tog hvert felt for sig; første først etc.) - indtil jeg tilføjede }-klammen for at lukke den anden funktion. Den fik jeg pludseligt en fejlmeddelse på - derfor rettelsen - men nu plover den som sagt lige igennem koden.

Kunne jeg opnå det jeg vil med en række 'if else's ?
Avatar billede michael_stim Ekspert
22. oktober 2009 - 21:03 #7
Fordelen ved at du først tester på klienten er at du slipper for at siden reloades hele tiden.
Avatar billede michael_stim Ekspert
22. oktober 2009 - 21:16 #8
Du sætter denne i din header:

function validerFelter(iForm){   
        if (iForm.winetype.value==''){     
        alert('Please select type of wine!');
        iForm.winetype.focus();
        return false;     
      }
        if (iForm.winename.value==''){     
        alert('Please enter a name of the wine!');
        iForm.winename.focus();
        return false;     
      }
    if (iForm.wineyear.value==''){     
        alert('Please enter the year!');
        iForm.wineyear.focus();
        return false;     
      }
    if (iForm.wineprice.value==''){     
        alert('Please enter the price of the wine, or your best estimate!');
        iForm.wineprice.focus();
        return false;     
      }
    if (iForm.winestars.value==''){     
        alert('Please rate the wine!');
        iForm.winestars.focus();
        return false;     
      }
  return true;
}

Og så kalder du den i din form:

<form method... action... onsubmit="return validerFelter(this);">

Og så kan du checke via php:
if(isset($_POST['winestars']) && $_POST['winestars'] != "" && isset($_POST['wineprice']) && $_POST['wineprice'] != ""....){
echo "Det gik ikke helt som det skulle";
}
Avatar billede michael_stim Ekspert
22. oktober 2009 - 21:26 #9
Og der skulle stå, at alting gik som det skulle ;o)
Avatar billede repox Seniormester
22. oktober 2009 - 21:54 #10
Problemet ligger i at du blot fortsætter med at løbe din kode igennem, på trods af fejlene.

Det er heller ikke nogen særlig effektiv eller sikker kode; den er vidt åben for sql injections (som er en af de alvorlige sikkerhedstrusler).
Avatar billede musiki Nybegynder
17. december 2010 - 15:16 #11
Lukker tråden.
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