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?
Waarom verschillende tabellen voor dezelfde informatie?

Deze hele discussie is nogal zinloos als de database-opzet verkeerd is / veranderd moet worden.

Het heeft geen zin een situatie te bestuderen waarvan je weet / vermoedt dat deze niet klopt wanneer iets zijn ding niet doet. Haal eerst de fout(en) eruit en kijk dan of het probleem nog speelt.

Iedereen is nu druk bezig met het paard achter de wagen te spannen als je het mij vraagt.



OK ik heb nu dit:


<?php

// maak connectie met dbase
// ophalen variabelen

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
 echo '<pre>' . print_r($_POST, 1) . '</pre>';


If (isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && isset($_POST['linkadd']) 
			&& (is_array($_POST['linkadd'])) && ($linkadd = " ")  ) {

	
	if (($_POST['kolom2'] == TRUE) && ($tab == TRUE ) ) {
	$tab = $_POST['kolom2'];
	var_dump($tab);
	
	echo gettype($_POST['linkoms']); 
      echo gettype($_POST['linkadd']); 
		
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')" ; 
  
if ($conn->query($sql) === TRUE)
                                { echo  "De links zijn toegevoegd aan de database.  ";
							echo "<br>";
							echo $tab;
                                    
                            } else {
            echo "Fout: ";
				echo " $sql ";
				echo " <br>";
			 $conn->error;
            }
            echo "<br>" . "tekst;
            } 

		}
	else {  echo "<center>";
			echo "we wachten op uw invoer"; 
			echo "</center>";
			}
} 
}

?>


Na het invullen van het forumulier krijg ik
de print_r output als volgt:


Array
(
    [linkoms] => Array
        (
            [0] => groene thee
            [1] => 
            [2] => 
            [3] => 
            [4] => 
        )

    [linkadd] => Array
        (
            [0] => http://www.groenethee.nl
            [1] => http://
            [2] => http://
            [3] => http://
            [4] => http://
        )

)



Daarna een Undefined Index melding voor de volgende regel:



if (($_POST['kolom2'] == TRUE) && ($tab == TRUE ) ) {



Het toevoegen van dit:

echo gettype($_POST['linkoms']) // waarschijnlijk een string of integer.
      echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.


levert dus twee extra undefined index foutmeldingen op.


Nogmaals: waarom sla je deze informatie op in verschillende tabellen?

Er zijn andere (en betere) manieren om je data te categoriseren.

EDIT: Daarnaast geef je ons maar de halve puzzel. In geen enkel bericht van jou staat het formulier waar de data vandaan komt. Hoe verwacht je van ons dat we dit fatsoenlijk kunnen analyseren (laat staan oplossen)?
Kijk eens naar de kleuren in bovenstaande code. Klopt niet. De echo op regel 27 is groen op regel 41 rood. Dan moet er al een lampje gaan branden.

Waarom gebruik je op regel 7 ' en op regel 28 " bij je echo?

Waar komen op regel 10/11 $linkoms / $linkadd vandaan? en $tab op regel 14 (die maak je pas op regel 15 aan)?

Waarom zet je de ene keer een variabele binnen quotes (regel 33) en dan weer niet (regel 29)?
Thomas van den Heuvel op 02/07/2015 19:58:08

Nogmaals: waarom sla je deze informatie op in verschillende tabellen?

Er zijn andere (en betere) manieren om je data te categoriseren.

EDIT: Daarnaast geef je ons maar de halve puzzel. In geen enkel bericht van jou staat het formulier waar de data vandaan komt. Hoe verwacht je van ons dat we dit fatsoenlijk kunnen analyseren (laat staan oplossen)?


Het invoer formulier voor linkoms en linkadd is als volgt:



<form action="pagina5.php" method="post" accept-charset="UTF-8"><?php
for ($i=0; $i < 5; $i++) {
    ?><p>
        
		<label for="linkoms_<?php echo $i ?>">
		Link Naam: <?php echo ($i + 1) ?>
		</label>
		
        <input type="text" name="linkoms[]" 
		id="linkoms_<?php echo $i ?>" 
		value="" /> <br> <br>
		
		
		<label for="linkadd_<?php echo $i ?>">
		Link Adres: <?php echo ($i + 1) ?>
		</label>
		 <input type="text" name="linkadd[]" 
		id="linkadd_<?php echo $i ?>" 
		value="http://" /><br><br>
    
	</p><?php
}

?><p>
    <button type="submit">Opslaan</button>
</p>
</form>







Toevoeging op 02/07/2015 23:19:49:

Ik wist niet dat het zo belangrijk was. De tabel is zoals je weet variabel. Deze kun je kiezen mbv een checkbox. Dit is een apart script en een aparte pagina.


<?php
while($row = $result->fetch_assoc()){
		echo "<center>";
 	$reeks = implode(" " , $row);
	echo $reeks;
	
	echo "<br>";
	echo "</center>";
    
?>
	  
       <form action="pagina5.php"" method="post" > 
    
	
	
	<input type="checkbox"  name="kolom2" value="<?php echo $reeks ?>" 
	
	
</center>	
<?php 

}

mysqli_close($conn);

?>   
<center>
	<br><br><br>
       
    <input type="submit" method="post" value="Kies Rubriek" />
    </form>
?>


Ik ben verder totaal onbekend met programmeren en php maar het lukt dus wel om met $_POST['kolom2'] de inhoud te echoen of met var_dump op te halen.

Even verderop in het script werkt het niet meer.

Is dit een soort mechanisme van php? Of is het onlogisch om dingen dubbel te doen? Ik gebruik exact dezelfde code maar het resultaat is niet hetzelfde.
- SanThe - op 02/07/2015 11:11:22

Op diverse plaatsen gebruik je = in een if().
Een = is een toekenning en geen vergelijking.
Een vergelijking is == of ===.


Heb je dit al gecontroleerd?
Ik zie nog staads = in de if().
- SanThe - op 02/07/2015 23:26:53

[quote="- SanThe - op 02/07/2015 11:11:22"]
Op diverse plaatsen gebruik je = in een if().
Een = is een toekenning en geen vergelijking.
Een vergelijking is == of ===.


Heb je dit al gecontroleerd?
Ik zie nog staads = in de if().
[/quote]

Voor een beginnende onervaren programmeur is het niet gelijk makkelijk te begrijpen wat nu het verschil is tussen == en === en vooral; met welke reden wordt het toegepast. Ik zoek er het eea over maar een goede manual over het gebruik van deze operatoren icm if vind ik niet.

Is er zo'n manual online en waar kan ik die vinden?



Hmm ok ik heb al wat meer tuts gevonden. Het lijkt er op dat == en === gewoon iets strenger zijn.

De if beslissing is niet altijd eenvoudig vooral als er meerdere vergelijkingen worden gemaakt.

Ik kan wel == of === gebruiken, maar de if beslissing werkt eerst wel, echter na een extr if niet. Gebruik ik deze afzonderlijk in een apart script dan werkt deze if beslissing wel.

stel ik heb een if beslissing zoals:

 if (isset($_POST['kolom2'] )


hoe zeg ik dat in gewone taal zeg maar.

Of dit

  if (($_POST['kolom2'] == TRUE)


en dan hebben we het over een select deel van de mogelijkheden. Voor beginnende onervaren programmeurs is dat noodzakelijke kennis en vooral Wat, Wanneer en Waar het toegepast moet worden.
if( .... )

Op de plek van de .... moet iets (een expressie) komen die -met wat goede wil- tot TRUE of FALSE leidt.

Voorbeeld:
if( 1 > 2)

Als 1 groter is dan 2. Dat is niet het geval, dus 1 > 2 levert FALSE.
PHP voert dus niet uit wat er na if komt.

if( 'a' == 'b')
ook dat is niet het geval, dus false.


behalve getallen of strings mag een expressie ook een functie zijn.

isset() is zo'n functie.
vertaald: bestaat()

dus if( isset($a) )

Als $a bestaat, dan levert isset() true op.

Gezien vanuit de if() staat er dan if( TRUE )


en je kunt een hele ketting van al dan niet geneste functies plaatsen tussen de haakjes van if(), maar uiteindelijk moet het iets worden dat voor PHP is terug te leiden tot

if(true) of if(false).

<?php if($_POST['kolom2'] == TRUE) ?>


dat is een slecht voorbeeld
Omdatt $_POST van buiten komt, is het niet zeker dat deze bestaat. En waarschijnlijk wil je dat controleren.

Hier vraag je of $_POST['kolom2'] gelijk is aan TRUE.
Nu komen post-waarden binnen als een string. Dat kan dus niet true zijn.

"gelukkig" en daarom schreef ik hierboven -met wat goede wil- is PHP bereid om alles dat "leeg" is tot FALSE te bombarderen en de rest naar true.


<?php
$a = true;
$a = 1;
$a = 2;
$a = 'a';
$a = array(1, 2,4);

$b = false;
$b = null;
$b = ' ';
$b = array();

?>

Alle $a zouden tot true leiden, alle $b tot false.

Let wel: alleen als je == gebruikt.

Gebruik je === dan is ($a === true) alleen het geval voor de eerste.

Maar bottomline:
de expressie tussen de ( ) van if moet tot true of false leiden











Reageren