Door
Cowboy Base
op 27-05-2012 13:44
gewijzigd op 27-05-2012 13:51
849 views
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);
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.
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?
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!";
}
}
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".