Aanvullen van PHParray of DB via javascript-functie
Ik ben redelijk bekend met programmeren, maar nieuw hier en vrij nieuw met PHP.
Dus vergeef me als ik de etiquette hier niet goed toepas of een vraag stel die ooit al beantwoord is.
Ik heb een probleem met PHP.
$aDitArray[]='Paul';
Dit vult het array aan, met het element 'Paul'.
Nu heb ik op dit forum een omweg gevonden om een (javascript)popupvenstertje in PHP te maken. Dat ziet er in de kern zó uit. En dat werkt, ogenschijnlijk....
function prompt($s) {
echo("<script type='text/javascript'> var answer = prompt('" . $s . "'); </script>");
$answer = "<script type='text/javascript'> document.write(answer); </script>";
// addContext('$answer');
return $answer;
}
$antw=prompt('Geef naam: '); geeft netjes de ingetoetste waarde terug.
$aDitArray[]=$antw; lijkt te werken.
foreach ($aDitArray as $regel) print "$regel<br/>"; geeft de lijst inclusief de aanvulling netjes weer.
En bij een volgende aanroep van prompt() komt wél de nieuwe waarde netjes terug.
Maar... bij het aanvullen van de array, wijzigt de vorige waarde in de nieuwe waarde en staat er tweemaal de nieuwe waarde in.
???
Om een eventueel PHP intern pointerprobleem te omzeilen zou addContext $answer in de MySqlDB moeten zetten, maar ook dit wil niet lukken. (De SQL functie klopt en met zelf ingegeven waardes werkt het wel.)
Ook var_dump($antw); meldt netjes dat het een string(65) is.
Heeft iemand enig idee waar ik het zoeken moet ?
Gewijzigd op 30/07/2016 16:32:50 door Paul Ulje
Als je na $aDitArray[]='Paul'; ongecontroleerd $aDitArray[]=$antw; doet, stapelen de data zich op. Zonder meer code is er weinig concreets over te zeggen, maar het lijkt erop dat je alle willekeurige input op één grote hoop veegt.
Een functie met een returnwaarde die aan een array wordt toegevoegd. Normaliter erg eenvoudig.
Wat bedoel je met 'stapelt de data zich op'?
$a=array();
$a[]='een';
$a[]='twee';
foreach ($a as $b ) print "$b<br/>";
geeft:
een
twee
Wat gaat hier dan fout en hoe kan ik dat voorkomen?
Natuurlijk is de variabele $antw gecontroleerd.
1. De functie prompt werkt.
2. De returnwaarde wordt door PHP herkent als een normale string en bevat de string die ingegeven is en kan worden afgedrukt.
3. Het aanvullen van een array op deze wijze is elementair in PHP.
DUS 1,2,3: Alles werkt, behalve deze specifieke combinatie.
Gewijzigd op 30/07/2016 17:21:28 door Paul Ulje
Of zoals we anders zeggen: assumption is the mother of all *onheil*.
Aangezien je met $aDitArray[]=$antw; geen sleutel gebruikt, moet je maar raden wat er in de array zit. Kennelijk is dat je bedoeling, alleen is/wordt je oplossing (te) sterk afhankelijk van de volgorde waarin je de array opbouwt. Als je met $aDitArray[]='Paul'; begint, dan is $aDitArray[0] waarschijnlijk een voornaam, maar je wilt niet iets bouwen op waarschijnlijkheid en liever op zekerheid.
Gewijzigd op 30/07/2016 17:40:40 door Ward van der Put
Je zit PHP en JavaScript te mixen. Dit kan en zal nooit werken.
Het gekke is dat ik geen resultaat verwacht had, want, net als Ben zegt de waarde van een Javascript-variabele naar een PHP overhevelen? Vergeet het maar. En toen vond ik dat voorbeeld op dit forum. Ook al ziet het regel 3 er zeer onwaarschijnlijk uit, het blijkt te werken!
function prompt($s) {
echo("<script type='text/javascript'> var answer = prompt('" . $s . "'); </script>");
$answer = "<script type='text/javascript'> document.write(answer); </script>";
//$answer = filter_var($answer, FILTER_SANITIZE_STRING);
return $answer;
}
print $anwer;
Tot ik $answer verder wilde gebruiken. Dan lijkt er toch wat anders in $answer te zitten dan een nette string en gaat het fout. NAV je opmerking heb ik verder gekeken en heb de invoerfilters ontdekt. Met het geschreven filter valt $answer zoals verwacht genadeloos door de mand. Wat er in zit is wat je verwacht, de hele string. Dus <script type='text/javascript'> document.write(answer); </script> En dat wordt door PHP dan ook netjes gedaan.
Dus dank voor je tips. Daardoor is het wonder verklaard....:-)
Overigens was het een test in een poging om een echte PHP-combobox, dus met nieuwe invoer, te maken.
En Ben, als nooit iemand had geprobeerd wat overduidelijk niet kan, was de aarde nog steeds plat geweest. :-)
Gewijzigd op 30/07/2016 20:48:43 door Paul Ulje
Je ziet hier het verschil tussen een serverside taal en een clientside taal, welke ook nog eens geen enkel verband met elkaar hebben. PHP poept HTML uit en heeft geen verdere interactie met de HTML en/of Javascript. Wanneer je van de grond af leert hoe PHP werkt is dit één van de eerste dingen die hieruit volgen.
Gewijzigd op 30/07/2016 21:00:49 door Ben van Velzen
Zoals veel in PHP moest ik het via de omweg aanpakken.....
[meta]
Prompt met JS en maak daarmee een cookie.
Laat door JS het formulier opnieuw laden anders hervult $_COOKIE zich niet
Lees en gebruik de cookie in PHP
[/meta]
Code (php)
1
2
3
4
2
3
4
function prompt($s) {
print "<script> var naam = 'koek='+window.prompt('$s'); ";
print "document.cookie = naam; document.getElementById('test').submit(); </script>";
}
print "<script> var naam = 'koek='+window.prompt('$s'); ";
print "document.cookie = naam; document.getElementById('test').submit(); </script>";
}
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
print "<form id='test' method='post' action='test.php' target='_top'>";
// de $_SESSION alleen voor testen
// normaal: if (voorwaarde voor prompten) dan prompt('deze vraag');
if (!isset($_SESSION['doePrompt'])) {
$_SESSION['doePrompt'] = false;
}
if ($_SESSION['doePrompt']) {
$_SESSION['doePrompt'] = false;
prompt('Hoesje naam Bommel');
} else
$_SESSION['doePrompt'] = true;
print $_COOKIE['koek'];
// de $_SESSION alleen voor testen
// normaal: if (voorwaarde voor prompten) dan prompt('deze vraag');
if (!isset($_SESSION['doePrompt'])) {
$_SESSION['doePrompt'] = false;
}
if ($_SESSION['doePrompt']) {
$_SESSION['doePrompt'] = false;
prompt('Hoesje naam Bommel');
} else
$_SESSION['doePrompt'] = true;
print $_COOKIE['koek'];
Paul Ulje op 22/04/2017 14:10:17:
Laat door JS het formulier opnieuw laden anders hervult $_COOKIE zich niet
Pretty much this? PHP (serverside) kent de inhoud van het cookie (clientside) niet totdat je een nieuw request doet naar de server en hiermee de (bijgewerkte) cookie-informatie terugstuurt zodat PHP deze uit kan lezen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$_SESSION['lijst'][] = $_COOKIE['koek'];
$_SESSION['lijst'] = array_unique($_SESSION['lijst']);
asort($_SESSION['lijst']);
print "<!doctype html><html><head><title>redactiesysteem</title>";
print "<link rel='stylesheet' href='redactie.css' type='text/css' />";
print "</head><body><form id='test' method=post action='test.php' target='_top'>";
if (isset($_POST['nw'])) {
print "<script> var naam = 'koek = '+window.prompt('Geef naam'); ";
print "document.cookie = naam; document.getElementById('test').submit(); </script>";
}
$_SESSION['lijst'] = array_unique($_SESSION['lijst']);
asort($_SESSION['lijst']);
print "<!doctype html><html><head><title>redactiesysteem</title>";
print "<link rel='stylesheet' href='redactie.css' type='text/css' />";
print "</head><body><form id='test' method=post action='test.php' target='_top'>";
if (isset($_POST['nw'])) {
print "<script> var naam = 'koek = '+window.prompt('Geef naam'); ";
print "document.cookie = naam; document.getElementById('test').submit(); </script>";
}
Gewijzigd op 22/04/2017 17:34:57 door Paul Ulje