Hallo,

Ik ben nieuw hier, maar ook beginnende php scripter (naja, meer 'slordig').
Ik probeer voor 1 van mijn scripts een 'admin' functie te maken waar ik bepaalde optie kan updaten.

Zodra ik dus op "sumbit" druk, krijg ik een lege pagina. Ook geen mysql errors of 1 van de submit forms errors.
Meestal denk ik gelijk aan de mysql_escape_string(). Weten jullie wellicht een oplossing?

Een deel waar het foutgaat vermoedelijk van het script.
(Aangezien het pas NA Submit is, zal het in de mysql of if's zijn. Dit is ook maar een deel, dus niet alle volledige $vars staan erin)

if(isset($_POST['bullets']))
{
//the user name exists
if(!ctype_digit($_POST['bullets']))
{
$errors[] = 'only digits are allowed.';
}
if(strlen($_POST['bullets']) > 5)
{
$errors[] = 'The bullet amount cant be more then 5 digits.';
}
if($_POST['bullets'] > 60000)
{
$errors[] = 'The bullet amount cant be more then 60,000.';
}
}
else
{
$errors[] = 'The bullet field must not be empty.';
}

if(!empty($errors)) /*dit controleerd voor een lege array, zijn er errors, gaan we verder met de foutmeldingen (er moet een ! operator zijn)*/
{
echo 'Uh-oh.. a couple of fields are not filled in correctly..<br /><br />';
echo '<ul>';
foreach($errors as $key => $value) /* we lopen de array lijst door zodat we een mooie lijst krijgen */
{
echo '<li>' . $value . '</li>'; /* vertoning van de errorlijst */
}
echo '</ul>';
}
else
{
$conn = mysql_connect('localhost','u','p');
$db = mysql_select_db('db',$conn);

$sql = "UPDATE `kills` SET `rank1` = '". mysql_real_escape_string($_POST['rank1']) ."',`rank2` = '". mysql_real_escape_string($_POST['rank2']) ."',`bullets` = '". mysql_real_escape_string($_POST['bullets']) ."',`status` = '". mysql_real_escape_string($_POST['status']) ."' WHERE `id` = '". $id ."'";
$result = mysql_query($sql);
if(!$result)
{

echo 'Something went wrong while updating. Please try again later.<br />' . mysql_error();

}
else
{
echo "Succesfully Updated!
</div>";
}
}
bovenaan: error_reporting(E_ALL); zetten.
Ik heb de error_reporting(-1); staan, maar geeft niks weer. E_ALL is daarin geen verschil qua werking
en een var_dump($_POST)?

Geef eens wat directe echo's met __LINE__ om te zien waar je script wel en niet komt.
Voor hetzelfde geld komt het script niet door de IF-statements heen en doet het dus gewoon (zoals het hoort) niets.

[size=xsmall]Toevoeging op 27/05/2012 14:14:59:[/size]

en een var_dump($_POST)?

Geef eens wat directe echo's met __LINE__ om te zien waar je script wel en niet komt.
Voor hetzelfde geld komt het script niet door de IF-statements heen en doet het dus gewoon (zoals het hoort) niets.

O, en ga eens inspringen.
Wester Base op 27/05/2012 13:44:48

Een deel waar het foutgaat vermoedelijk van het script.

En hier ga je dus echt de fout in. Als er iets niet werkt zoals je denkt dat het zou moeten werken dan ga je debuggen. Debuggen is niet een natte vinger in de lucht steken en dan gokken waar de fout zit. Debuggen betekent dat je gestructureerd door je code gaat en per onderdeel controleert of de input correct is, de code wordt uitgevoerd en de output correct is. Dit doe je per regel als het moet. Er zijn heel simpele manieren voor, bijvoorbeeld op elke regel een echo plaatsen met regelnummer om te zien tot waar de code wordt uitgevoerd en waar dus niet meer. Al gedaan?

Het probleem zit in de if statement.
De $vars geven een correcte echo.

Het bereikt alleen niet de sql om dan naar database te zetten en de message te geven
Ga eerst de code eens goed inspringen en controleer je haakjes.

[edit]
Heb ik even voor je gedaan

<?php

$errors = array();

if(isset($_POST['bullets']))
	{
	//the user name exists
	if(!ctype_digit($_POST['bullets']))
		{
		$errors[] = 'only digits are allowed.';
		}
	if(strlen($_POST['bullets']) > 5)
		{
		$errors[] = 'The bullet amount cant be more then 5 digits.';
		}
	if($_POST['bullets'] > 60000)
		{
		$errors[] = 'The bullet amount cant be more then 60,000.';
		}
	}
else
	{
	$errors[] = 'The bullet field must not be empty.';
	}

if(!empty($errors)) /*dit controleerd voor een lege array, zijn er errors, gaan we verder met de foutmeldingen (er moet een ! operator zijn)*/
	{
	echo 'Uh-oh.. a couple of fields are not filled in correctly..<br /><br />';
	echo '<ul>';
	foreach($errors as $key => $value) /* we lopen de array lijst door zodat we een mooie lijst krijgen */
		{
		echo '<li>' . $value . '</li>'; /* vertoning van de errorlijst */
		}
	echo '</ul>';
	}
else
	{
	$conn = mysql_connect('localhost','u','p');
	$db = mysql_select_db('db',$conn);

	$sql = "UPDATE `kills` SET `rank1` = '". mysql_real_escape_string($_POST['rank1']) ."',`rank2` = '". mysql_real_escape_string($_POST['rank2']) ."',`bullets` = '". mysql_real_escape_string($_POST['bullets']) ."',`status` = '". mysql_real_escape_string($_POST['status']) ."' WHERE `id` = '". $id ."'";
	$result = mysql_query($sql);
	if(!$result)
		{
		echo 'Something went wrong while updating. Please try again later.<br />' . mysql_error();
		}
	else
		{
		echo "Succesfully Updated!";
		}
	}


Wat geeft een echo $sql?
Wat ik nu zeg lijkt op het bericht van Eddy, maar is anders
-----------
Zet dit boven aan je code
error_reporting(E_ALL);
ini_set('display_errors', 1);// 0= uit   1= aan
Waarom test je niet of $_POST['rank1'] en $_POST['rank2'] wel bestaan?
Eddy Erkelens op 28/05/2012 07:09:03

Ga eerst de code eens goed inspringen en controleer je haakjes.

In de if statement reeks kan ik niks vinden. Mocht er een "haakje" vergeten zijn, had ik wel een parse error gekregen.


Koen hollander op 28/05/2012 08:49:56

Wat ik nu zeg lijkt op het bericht van Eddy, maar is anders
-----------
Zet dit boven aan je code
error_reporting(E_ALL);
ini_set('display_errors', 1);// 0= uit   1= aan


Zoals hierboven aan vernoemd. Een error_reporting(-1); had ik al.



Erwin H op 28/05/2012 09:54:37

Waarom test je niet of $_POST['rank1'] en $_POST['rank2'] wel bestaan?

Daar staat nu ook een controle op, maar noch geeft het niks weer.


[size=xsmall]Toevoeging op 28/05/2012 13:25:33:[/size]

Het probleem is opgelost.
Ik had een } voor de if reeks gezet ivm if($_SERVER['REQUEST_METHOD'] != 'POST') {
Deze heb ik nĂ¡ de reeks gezegt en werkt nu wel.
Die } is dus de oorzaak geweest dat het niet verder kon met de if reeks.

een error_reporting heeft dus geen zin gehad als het voor dat "werkt".

Toch bedankt voor de snelle reacties.


@Erwin H
Debugging had dus degelijk zin
Wester Base op 28/05/2012 13:13:06

Debugging had dus degelijk zin


En inspringen ook want dan zie je direct welke { bij welke } hoort.

Reageren