PHP/MYSQL: (double) quotes en backticks ???
Pagina: « vorige 1 2 3 volgende »
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?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>";
}
}
}
?>
// 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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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://
)
)
(
[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:
Het toevoegen van dit:
Code (php)
1
2
2
echo gettype($_POST['linkoms']) // waarschijnlijk een string of integer.
echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.
echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.
levert dus twee extra undefined index foutmeldingen op.
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)?
Gewijzigd op 02/07/2015 20:16:34 door Thomas van den Heuvel
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)?
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<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>
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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>
?>
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.
Gewijzigd op 03/07/2015 00:17:46 door Johan West
- 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 ===.
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:
Heb je dit al gecontroleerd?
Ik zie nog staads = in de if().
- 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 ===.
Een = is een toekenning en geen vergelijking.
Een vergelijking is == of ===.
Heb je dit al gecontroleerd?
Ik zie nog staads = in de if().
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?
Gewijzigd op 03/07/2015 08:40:22 door Johan West
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:
hoe zeg ik dat in gewone taal zeg maar.
Of dit
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.
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).
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.
Code (php)
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
Ivo P op 03/07/2015 11:11:06:
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).
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).
En moet $a dan tussen de accolades staan?
De accoloades, dus { en }, staan om een code blok
Ik krijg nu het idee dat je iets wilt gaan maken, maar nog niet (voldoende) kennis van de beginselen hebt.
bv http://www.phptuts.nl/view/39/
Toevoeging op 04/07/2015 09:22:05:
Ik begin eigenlijk steeds meer het idee te krijgen dat het probleem ergens anders ligt nl. bij de mysql query.
De query is nu als volgt:
Kan het zijn dat een van jullie weet of voor MYSQL tabel variabelen soms meer commandos nodig zijn als je PHP gebruikt om de database aan te sturen?
- een web/php server
- een mysql server
- een client (browser/gebruiker)
De drie hebben NIETS MET ELKAAR te maken
Ze kunnen alleen commando's uitvoeren.
Dus als PHP het SQL commando goed in elkaar knutselt dan werkt dat commando gewoon.
Je kunt de SQL laten echo-en en daarna in de browser selecteren en kopiëren.
Vervolgens kun je dat commando in phpMyAdmin onder de SQL tab plakken en dan moet dat gewoon werken.
Bovendien kun je dan direct zien wat voor resultaat-set je van MySQL terug krijgt.
Dat is gewoon een leerzame test en helpt je PHP problemen te scheiden van SQL problemen.
Johan West op 04/07/2015 08:52:01:
OK maar zit er een relatie tussen de melding: Undefined Index en het instellen van een if voorwaarde?
Ja, als je een variabele een beginwaarde geeft in een if-blok kan dit in sommige gevallen leiden tot het niet bestaan van een variabele. Dit hangt af van hoe je je variabelen initialiseert.
Eerst moet je snappen hoe if-statements werken. Dit heeft Ivo P hierboven al prima uitgelegd.
Als je zoiets doet:
Dan zal alleen $something na afloop van dit if-statement bestaan want de conditie "1 == 2" zal nooit waar zijn (of anders gezegd, nooit evalueren tot true).
Het is altijd beter om variabelen die je hoe dan ook gaat gebruiken een zinnige initiële waarde te geven, of voordat je deze gaat gebruiken te controleren of deze een (zinnige) waarde hebben gekregen.
Waarschijnlijk is het handiger als je even een stapje terug doet en je je verdiept in boolse expressies (oftewel: statements die enkel true of false kunnen opleveren).
Dit heeft overigens niet specifiek iets te maken met MySQL.
Scheid, zoals Frank zegt, je problemen, als je deze op één hoop gooit (in één topic) dan is dit alleen maar verwarrender. Zowel voor jou als andere lezers.
Gewijzigd op 05/07/2015 11:24:45 door Thomas van den Heuvel
Ik heb al een vrij groot scala aan mogelijkheden geprobeerd.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if (($_POST['kolom2'] == TRUE) && ($tab == TRUE ) )
if (($_POST['kolom2'] == " " ) && ($tab == " "))
if (isset ($_POST['kolom2']) && isset ($tab))
if (!isset ($_POST['kolom2']) && !isset ($tab))
if (!empty ($_POST['kolom2']) && !empty ($tab))
if (empty ($_POST['kolom2']) && empty ($tab))
if ($_POST['kolom2'] !== " " ) && ($tab !== " " ))
if (($_POST['kolom2'] == " " ) && ($tab == " "))
if (isset ($_POST['kolom2']) && isset ($tab))
if (!isset ($_POST['kolom2']) && !isset ($tab))
if (!empty ($_POST['kolom2']) && !empty ($tab))
if (empty ($_POST['kolom2']) && empty ($tab))
if ($_POST['kolom2'] !== " " ) && ($tab !== " " ))
Is het normaal dat je maar iets blijft proberen of is er ook een logica te vinden of zo'n conditie in te stellen?
Het kan ook zijn dat er nog condities zijn die ik niet ken.
Om te controleren of iets ingevuld is, gebruik ik dit altijd:
Een $_POST['....']-waarde zal nooit een boolean zijn. (true/false)