Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ongelma

Sivun loppuun

Murkkumies [18.11.2012 19:07:07]

#

Löysin tälläisen pluginin yhteen peliin:
WebWhitelister

Latasin se nnettisivulle ja loin SQL tunnarit ja ne toimii. Mutta tuo joku captcha systeemi ei suostu toimimaan. Keksikö joku keinon miten sen saa pois?

Tässä tämä etusivun koodi (siis vain pluginin netti etusivu)

<?php
//
// COPYRIGHT BY THE AUTHORS OF WEBWHITELISTER
// ALL RIGHTS RESERVED.
//

// CONFIG: PLEASE INSERT YOUR MYSQL INFORMATION
	$sql_host = "osoite";
	$sql_username = "nimi";
	$sql_password = "salis";
	$sql_database = "alusta";
	$server_name = "servunnimi";
	$enable_mc_premium_check = false;

// DONT EDIT ANYTHING BELOW HERE; UNLESS YOU KNOW WHAT YOU ARE DOING
	session_start();
	require_once("./script/captcha/simple-php-captcha.php");

	if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_SESSION['captcha']['code']) && isset($_POST['captcha'])) {
//Check if captcah is correct
		if($_SESSION['captcha']['code'] != $_POST['captcha'])
			die("Captcha is not correct!");

//Check if username is set
		if($_POST['name'] == "")
			die("Please insert a username!");

//Check if the inserted MC username exists
		if($enable_mc_premium_check and !check_user($_POST['name']))
			die("The inserted username is not a Minecraft premium account.");

//Whitelist the player
		mysql_connect($sql_host, $sql_username, $sql_password) or die("ERROR: ".mysql_error());
		mysql_select_db($sql_database) or die("ERROR: ".mysql_error());

		mysql_query("INSERT INTO `WEBWHITELISTER` (`USERNAME`, `WHITELISTED`) VALUES ('" + 			mysql_real_escape_string($_POST['name']) + "', false) ;") or die("ERROR: ".mysql_error());
		die("You have been whitelisted!");
	} else {
		$_SESSION['captcha'] = captcha();
	}

	function check_user($mcUser) {
		$check_mcUser = file_get_contents('http://www.minecraft.net/haspaid.jsp?user='.$mcUser.'');
		if ($check_mcUser == "true")
			return true;
		else
			return false;
	}
?>
<!DOCTYPE html>
<html>
<head>
<LINK href="./css/whitelist.css" rel="stylesheet" type="text/css">
<title>Apply for <?php echo $server_name; ?></title>
</head>
<body>

<div id="stylized" class="myform">
<form id="form" name="form" method="post" action="">
<h1>Whitelist Form for <?php echo $server_name; ?></h1>
<p>Fill out this form, and we will whitelist you.</br><b>Case sensitive</b></p>
<hr />

<label>IGN
<span class="small">Your Minecraft name</span>
</label>
<input type="text" name="name" id="name" />

<label>Captcha
<span class="small"></span>
</label>
<img src="<?php echo $_SESSION['captcha']['image_src']; ?>" alt="CAPTCHA" />

<label>Human Verification
<span class="small">Captcha code</span>
</label>
<input type="text" name="captcha" id="captcha" />

<button type="submit">Whitelist me!</button>
<div class="spacer"></div>
</form>
<br />
<!-- You are not allowed to remove this footer message! This message has to be viewable at all times! -->
<footer><hr />Copyright by the authors of <a href="http://dev.bukkit.org/server-mods/webwhitelister/">WebWhitelister</a></footer>
</div>
</body>
</html>

Voisiko joku auttaa? :D

Metabolix [18.11.2012 19:30:29]

#

Mitä ihmeen keksimistä siinä on? Poistat vain kaikki asiaan liittyvät kohdat koodista. Ne on helppo tunnistaa esimerkiksi siitä, että niissä lukee sana "captcha".

Murkkumies [18.11.2012 19:33:24]

#

Sillo tulee virhe ilmoitus...

Metabolix [18.11.2012 19:34:11]

#

Sitten olet poistanut jotain väärää. Mikä ilmoitus tulee ja millaiselta riviltä?

Näyttää, että tuosta pitäisi poistaa kokonaan 12 riviä (3 alusta, 1 puolivälistä ja 8 lomakkeelta) ja lisäksi ensimmäisestä if-lauseesta molemmat captcha-tarkistukset.

Edellisen lisäksi täytyy kyllä todeta, että SQL-kysely ei varmasti voi koskaan onnistua, koska merkkijonoja yritetään yhdistellä +-merkillä ja SQL-kyselyksi tulee silloin luku 0.

Murkkumies [18.11.2012 19:53:11]

#

En oikein ymmärtänyt....voisko joku laittaa sen tähän viesti ketjuun sellasena et siitä on poistettu nuo captcha jutut, kun syys minkä takia haluun sen siitä pois on se että en ymmärrä mitä se siinä auttaa kun ei saa toimimaan sitä. Valittaa aina vaikka mitä kirjoittas että "Captcha is not correct!". :(

t0ll0 [20.11.2012 18:01:51]

#

Eikö olisi mielekkäämpää selvittää miksei captcha toimi ja korjata se kuin että poistaa se kokonaan? Mutta kuten metabolixin jo kertoi niin se ei ole tuon ainoa ongelma.

Metabolix [20.11.2012 18:19:10]

#

Neuvoin jo, että poista rivit, joilla lukee "captcha", paitsi ensimmäisestä if-lauseesta poista vain jälkimmäiset ehdot eli alkaen &&-operaattorista ja päättyen ennen viimeistä )-merkkiä. If-lauseesta pitäisi tulla tällainen:

if($_SERVER['REQUEST_METHOD'] == "POST") {

Siis muuta ensimmäinen if-lauserivi tuollaiseksi ja poista sen jälkeen loput rivit, joilla lukee "captcha".

Selitän varmuuden vuoksi vielä kerran: korvaa ensimmäinen if-alkuinen rivi edellä antamallani rivillä ja poista sitten kaikki ne rivit, joilla lukee "captcha".

Jos koodi tuottaa vieläkin ilmoituksen "Captcha is not correct!", kukaan ei varmasti usko, että olisit edes yrittänyt noudattaa tätä ohjetta. Jos tämän tekstin ymmärtämisessä on jotain vaikeuksia, pyydä vaikka joku mummo kadulta auttamaan.

Vaihda myös mysql_query-riviltä +-merkit .-merkeiksi, tai koodi ei varmasti toimi.

Murkkumies [21.11.2012 18:00:39]

#

Ok....tein tälläisen koodin lisäykseen, mutta se ei toimi. Ktsoin myös netistä apua, mutta sen kautta en löytänyt virheitä. Tässä koodit:

Etusivu

<!DOCTYPE html>
<html>
<head>
<LINK href="./css/whitelist.css" rel="stylesheet" type="text/css">
<title>Apply for <?php echo $server_name; ?></title>
</head>
<body>

<div id="stylized" class="myform">
<form id="form" method="post" action="lisays.php">
<h1>Whitelist Form for <?php echo $server_name; ?></h1>
<p>Fill out this form, and we will whitelist you.</br><b>Case sensitive</b></p>
<hr />

<label>IGN
<span class="small">Your Minecraft name</span>
</label>
<input type="text" name="name" id="name" />
<button type="submit">Whitelist me!</button>
<div class="spacer"></div>
</form>
<br />
<!-- You are not allowed to remove this footer message! This message has to be viewable at all times! -->
<footer><hr />Copyright by the authors of <a href="http://dev.bukkit.org/server-mods/webwhitelister/">WebWhitelister</a></footer>
</div>
</body>
</html>

lisays.php

<?php
$name = $_POST["name"];
?>
<?php
$con = mysql_connect("palvelin","nimi","salis");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("paikka", $con);

$sql="INSERT INTO `WEBWHITELISTER` (`USERNAME`, `WHITELISTED`)
VALUES
('$_POST[name]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?>

Tässä on viesti mikä tulee error kohtaan:

Error: Column count doesn't match value count at row 1

Mikä on mennyt pieleen ja haluan että se on eri sivulla, koska se on nyt välttämätöntä tulevaisuutta ajatellen.

Metabolix [21.11.2012 21:54:24]

#

Määrittelet SQL-lauseessa lisättäväksi kaksi saraketta mutta annat vain yhden arvon. Toinen ongelma on, että et käytä mysql_real_escape_string-funktiota, jolloin koodissasi on mahdollisuus SQL-injektioon.

Ei voi kuin ihmetellä, että jos muutosten tekeminen on sinulle niin vaikeaa, ettet meinaa osata edes noudattaa yksinkertaisia ohjeita, miksi sitten menet tekemään omin päin vielä ylimääräisiä muutoksia ja rikot koodia entisestään? Voisit nimittäin vain korjata alkuperäisen koodin ja sitten siirtää siitä alkupuoliskon eli lomakkeen käsittelyn eli PHP-koodin toiseen tiedostoon.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta