Mensen,

Ik heb de afgelopen tijd heel veel vragen gesteld maar ik kom tot de ontdekking het niet goed te begrijpen. Daarom back to basic. Als mensen mij willen helpen zou ik het leuk vinden anders houd het op.

Ik begin wel met een database.

Ik heb een connectie gemaakt. Daar heb ik mijn eerste vraag dan ook over:

Ik zal de code later hieronder plaatsen. De vraag is waarom krijg ik geen echo als de connectie mislukt en wel als deze lukt?


<?php
$servername = "host";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli("host","username","password","naam");
// Check connection
if (!$conn) {
    echo"connectie mislukt";
}else{
echo "Connected successfully";
}
?>

 

Gisteren kreeg ik van Ariën te horen empty is geen intelligente functie. Kan beter zijn voorbeeld gebruiken.

Om van de errors af te komen hoef ik dus alleen de functie te veranderen in jou voorbeeld?
Klopt, vul maar eens een 0. En kijk dan eens of er true of false wordt geretourneerd ;).
Je kan ook een vergelijking doen met een lege string zonder inhoud, maar daar bereik je mee dat mensen ook een spatie kunnen invoeren op een veld die verplicht is. Dus die trim()'en we dan graag.
Nu heb ik hem zo (aangegeven functie van hier maar dan krijg ik niet gevonden index in plaats van formulier wat gecheked wordt

[code]
<?php

include 'include.php';
$username = '';
$email = '';
function validate($username, $email)
{
if (empty($username)) {
return false;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}

return true;
}

$username = '';
$email = '';

if ($_SERVER['REQUEST_METHOD'] =='POST')
{
$username = $_POST[''];
$email = $_POST[''];

} else


$username = mysqli_real_escape_string($con, $_POST['username']);
$email = mysqli_real_escape_string($con, $_POST['email']);



$sql = "INSERT INTO gebruikers (username,email) VALUES ('$username', '$email')";

if (!mysqli_query($con,$sql))
{
echo "Niet geplaatst";
}
else {
echo "geplaatst";
}



?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>registreren</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="username"> gebruikersnaam<br>
<input type="email" name="email" >
<input type="submit" name="insert" value="Opslaan">
</form>
</body>
</html>
[/code

<?php
$username = $_POST[''];
  $email = $_POST[''];
?>

??? Huh ??
regel 24 tot en met 27 verwijderen.

en dan op regel 44 (in de huidige telling) een } plaatsen

[size=xsmall]Toevoeging op 17/03/2017 14:32:00:[/size]

nb: $username en $email zijn nu alleen geschikt om in de query te gebruiken.

zou je die nog op het scherm willen zetten, dan kan dat niet met $username, maar zul je terug moeten naar $_POST['username']

En dan zou je die met htmlspecialchars() kunnen echo-en.

Dit, omdat je door de mysql-escape functie de data mogelijk vervuild hebt met backslashes.
En de else op lijn 27 mist ook een startende accolade.

Welke editor gebruik je? Want die zou eigenlijk al ergens moeten gaan schreeuwen omdat de code niet goed opgebouwd is.
na een if of en else hoeft niet per se een { te staan.

<?php
$x = 0;
if($x == 1)
echo 'een';
echo 'twee';
?>
dit zal 'twee' op het scherm zetten...
Doe dat dan in zijn geheel of niet, maar half maar het ook niet echt overzichtelijker erop in grote codes.
in dit geval is die hele "} else" verdwaald.

Jemig wat een zootje is die code geworden. :)
Hey maar we zijn zo allemaal begonnen, dus snap het wel.

Om te beginnen doe je een function aanmaken. Die kunnen heel handig zijn.
Maar dan moet je wel weten wat dat dingetje doet.
als je een function foo($metvar) maakt, dan doe je een functie met input.
Dus verwacht de functie ook iets er in, jij wil meteen met twee, kan ook.
Die ($metvar) is alleen om door te geven.
Dus wat je daar instopt is even niet van belang. Hoewel, als je de function gebruikt, wil je daar $_POST variabelen in zetten dus dat doen we pas als we de funtion aanroepen.
Even in code met uitleg:

<?php

include 'include.php';
// validatie
function validate($username, $email)
{
	if(isset($username) && trim($username) == '')
    {
		return false; 
	}
	
	if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return false;
    }

    return true;
}	


if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	// input is gewoon de $_POST variabelen
	if( validate($_POST['username'], $_POST['email']) == false)
	{
		echo 'gebruikersnaam is leeg, of geen geldig email';
	}
	
	// maak de query leesbaar
	$sql = "INSERT INTO gebruikers (username,
									email
								    ) 
									VALUES ('".mysqli_real_escape_string($con, $_POST['username'])."', 
									        '".mysqli_real_escape_string($con, $_POST['email']);."'
											)";
											
	// hier wil ik wel een variabele die leesbaar is..
	$result = mysqli_query($con,$sql)
	if(!$result)
    {
		echo 'Niet geplaatst!';
	}
	else
	{
		echo 'geplaatst!';
	}
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>registreren</title>
  </head>
  <body>
    <form action="" method="post">
      <input type="text" name="username"> gebruikersnaam<br>
      <input type="email" name="email" >
      <input type="submit" name="insert" value="Opslaan">
    </form>
  </body>
</html>

Ik zeg niet dat deze code perfect is, maar om je een idee te geven hoe je dingen doet (denk dat je echt even de weg kwijt bent) is deze opzet al een stuk schoner.
Zoals je ziet probeer ik mijzelf niet telkens te kopiëren. $username, $email is als input een handige naam om door te geven. Maar dat "doorgeven" hoeft niet als je het in je code zet om te posten. Want die waardes zijn al bekend snap je?
Ook een query schrijf je onder elkaar om beter te kunnen lezen.
En het escapen kan ook gewoon rechtstreeks in de sql string.

Reageren