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)


als gevolg van deze code


$sql = "INSERT INTO '.`$col`.' (linkoms, linkadd) VALUES (  '". $conn->real_escape_string($_POST['linkoms'][$key]) ."', 
  '". $conn->real_escape_string($_POST['linkadd'][$key]) ."' )";




Iemand enig idee hoe $col in een INSERT INTO query zou moeten?
- Aar - op 12/07/2015 19:50:48

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?
Ja, kijk hier eens naar:

<?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
}
?>
Mag je met 1 x


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


gegevens uit 2 verschillende formulieren halen?
Een submit-knop triggert alleen de data uit zijn eigen formulierveld, voor zover ik weet.

Anders kan je ook een tweede conditie in je if gebruiken, waarbij je ook (AND) controleert op de [/i]name[/i] van de submitknop.
- Aar - op 13/07/2015 12:33:38

Een submit-knop triggert alleen de data uit zijn eigen formulierveld, voor zover ik weet.


Tenzij je het met javascript oplost

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.



if (!isset($_POST['kolom2']) && !isset($tab) ) {

Dus als die beiden niet bestaan ga jij er mee verder.
Zeer vreemd.
Johan West op 13/07/2015 22:44:15

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.


Dus als je !isset gebruikt, kijk je of deze nog niet bestaat.
En als hij niet bestaat, ga je verder... maar vind je het gek dat hij niet bestaat?

Hij moet wel bestaan. En zo niet: maak hem aan?




En je gaat dus hier de fout in:

<?php
if (!isset($_POST['kolom2']) &&  !isset($tab)     ) { 
$tab = $_POST['kolom2'];

/// }
?>


Je zegt dat het aan $tab ligt, maar bestaat $_POST['kolom2'] ? Zo ja, dan gaat dit dus niet.
Wellicht bedoel je dit:

<?php
if (isset($_POST['kolom2'])) {
$tab = $_POST['kolom2'];
?>


Als ik echter isset gebruik ipv !isset dan wordt de code tussen de { } niet uitgevoerd.

Welke opties heb ik nog over voor if?

<?php
if (isset($_POST['kolom2'])) {
$tab = $_POST['kolom2'];
?>

alternatief:

<?php
$tab = filter_input(INPUT_POST, 'kolom2');
?>


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);
?>


http://php.net/filter-input
http://php.net/manual/en/filter.filters.validate.php
http://php.net/manual/en/filter.filters.sanitize.php

Reageren