PHP/MYSQL is vrij onlogisch in het toepassen van quotes, double qoutes en backticks zoals " ' ` .
Als ik CREATE TABLE `$var` doe dan werkt dat, maar bij een andere query zoals INSERT INTO niet.
Ik krijg de volgende foutmelding
Fout:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''.` `.' (linkoms, linkadd) VALUES ( 'aaa', 'http://www.aa.com' )' at line 1
zijn toegevoegd aan de database (regel 2)
Je moet gewoon weten wat je van een functie verwacht, is het een boolean (true/false) of een string of misschien een integer, of zelfs een array.
Om te controleren of iets ingevuld is, gebruik ik dit altijd:
<?php
if(trim($var)=='') {
// leeg
}
?>
Okay dus als ik het goed begrijp verwacht je iets met een if conditie. Kan ik dat indelen in een aantal standaard verwachtingen? Jij noemt boolean, string, integer of array. Bedoel je dat ik voor iedere van deze (en evt. andere) een aparte if conditie moet maken? Op welke manier zou dat moeten dan?
<?php
// boolean = true of false
if($logged_in == true)
{
// string = tekens
if($mode == "delete")
{
// integer = getal, geheel getal zonder komma etc
if(is_int($id))
{
// array = meerdere velden in 1 rij
if(is_array($woorden))
{
// nog een controle, op int (count() telt)
if(count($woorden) == 2)
{
// doe hier iets
}
}
}
}
}
?>
gecombineerd, wel elke voorwaarde nieuwe regel
<?php
if (
($logged_in == true)
AND ($mode == "delete")
AND (is_int($id))
AND (is_array($woorden))
AND (count($woorden) == 2)
)
{
// doe hier iets
}
?>
Of in 1 zin:
<?php
if ( ($logged_in == true) AND ($mode == "delete") AND (is_int($id)) AND (is_array($woorden)) AND (count($woorden) == 2) )
{
// doe hier iets
}
?>
Ik zal nog een keer een stukje code afdrukken waar het vast loopt
If (isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && isset($_POST['linkadd']) && (is_array($_POST['linkadd'])) && ($linkadd = " ") )
{
echo "test"; // word geechoed
var_dump($tab); // wordt afgedrukt
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "test"; // word geechoed
var_dump($tab); // wordt afgedrukt
if (!isset($_POST['kolom2']) && !isset($tab) ) {
echo "test"; // niet geechoed bij isset, wel geechoed bij !isset
$tab = $_POST['kolom2'];
var_dump($tab); // deze dump geeft null zowel bij isset als !isset.
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO $tab (linkoms, linkadd) VALUES ('$oms', '$add')" ; // het ligt niet aan de manier van schrijven. de foutmelding komt doordat $tab geen waarde bevat.
Ik krijg dus de melding undefined index.
$tab is leeg. Eerder in het script is het wel te echoen of printen. Maar hier niet. Ik heb 2 formulieren in 2 verschillende files om het in te lezen. Je kunt toch met $_POST iets uit een formulier halen zo vaak je wilt indien je action in de html tag heb?
Toevoeging op 14/07/2015 13:40:36:
Het probleem is dat als ik isset gebruik, de variabele niet is ingesteld zodat de code na de { niet wordt uitgevoerd.
Dus gebruik ik !Isset, dan wordt het uitgevoerd, maar helaas is de variabele dan niet ingesteld.
Ik kan me niet voorstellen dat het aan de formulier input ligt.
of als je bijvoorbeeld wilt controleren dat $tab een integer, of een email adres wordt:
<?php
$tab = filter_input(INPUT_POST, 'kolom2', FILTER_VALIDATE_INT);
$tab = filter_input(INPUT_POST, 'kolom2', FILTER_VALIDATE_EMAIL);
?>
Bestaat $_POST['kolom2'] niet of kom je niet door de test, dan is $tab FALSE
Nog een variant: probeer er een invoer van te maken die wel voldoet. Bijvoorbeeld van 123abc kun je het getal 123 maken en van [email protected]%&* kun je [email protected] maken
<?php
$tab = filter_input(INPUT_POST, 'kolom2', FILTER_SANITIZE_NUMBER_INT);
$tab = filter_input(INPUT_POST, 'kolom2', FILTER_SANITIZE_EMAIL);
?>