Wordt er helemaal gek van, posten van variablen altijd hetzelfde wardes??
Met de volgende code haall ik 3 ID's op uit een db
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$connection = mysql_connect("$host", "$user", "$password")or die("Critical Error: Could not connect" . mysql_error());
MYSQL_CONNECT($host,$user,$password) OR DIE("Unable to connect to database");
@mysql_select_db($DBname) or die( "Unable to select database");
//$query=("select * from categories");
$query=("select * from produkten order by prod_naamlang, prod_naamlang desc");
$result=mysql_query($query) or die ("Het was niet mogelijk de benodigde gegevens uit de database te halen of de database is leeg:" . mysql_error() );
while($row=mysql_fetch_array($result)){
$produktnaam = @$row["prod_naamlang"];
$prodID = @$row["prod_id"];
$prodimgID= @$row["img_id"];
$labelID= @$row["label_id"];
global $produktnaam, $prodID, $prodimgID, $labelID;
?>
$connection = mysql_connect("$host", "$user", "$password")or die("Critical Error: Could not connect" . mysql_error());
MYSQL_CONNECT($host,$user,$password) OR DIE("Unable to connect to database");
@mysql_select_db($DBname) or die( "Unable to select database");
//$query=("select * from categories");
$query=("select * from produkten order by prod_naamlang, prod_naamlang desc");
$result=mysql_query($query) or die ("Het was niet mogelijk de benodigde gegevens uit de database te halen of de database is leeg:" . mysql_error() );
while($row=mysql_fetch_array($result)){
$produktnaam = @$row["prod_naamlang"];
$prodID = @$row["prod_id"];
$prodimgID= @$row["img_id"];
$labelID= @$row["label_id"];
global $produktnaam, $prodID, $prodimgID, $labelID;
?>
als ik dan echo
Code (php)
1
2
3
2
3
<?
echo " <input type=\"radio\" name=\"prod_naamlang\" value=\"$prodID\"> :$produktnaam.$prodID". "<input name=\"prodID\" type=\"hidden\" value=\"<? echo $prodID; ?>\">";
?>
echo " <input type=\"radio\" name=\"prod_naamlang\" value=\"$prodID\"> :$produktnaam.$prodID". "<input name=\"prodID\" type=\"hidden\" value=\"<? echo $prodID; ?>\">";
?>
hier in html een formuliertje met hiddenfields met de variabelen.
Ik krijg ik ook netjes de resultaten die ik wil geprint achter de naam vh produkt opgebouwd binnen de lus.
Tot zover prima dus!
alhoewel de code vast wel beter kan maar dat is voor later als ik meer geoefend ben.
maar nu komt het: ik zet de variabelen binnen de lus op global vd zekerheid zodat ze erbuiten ook beschikbaar zouden moeten zijn??
maar krijg bij posten naar een andere pagina via een formulier met hiddenfields altijd dezelfde waardes als ik ze echo
Kan iemand mij uitleggen wat ik fout doe?
Ik snap het niet meer.. snif
Kees
Gewijzigd op 04/09/2004 00:33:00 door Kees
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
$connection = mysql_connect("$host", "$user", "$password")or die("Critical Error: Could not connect" . mysql_error());
MYSQL_CONNECT($host,$user,$password) OR DIE("Unable to connect to database");
@mysql_select_db($DBname) or die( "Unable to select database");
?>
$connection = mysql_connect("$host", "$user", "$password")or die("Critical Error: Could not connect" . mysql_error());
MYSQL_CONNECT($host,$user,$password) OR DIE("Unable to connect to database");
@mysql_select_db($DBname) or die( "Unable to select database");
?>
Je verbind 2 keer met de database terwijl 1 keer toch echt genoeg is. Daarbij komt ook nog dat de eerste keer helemaal onveilig is. Stel dat de database niet bereikbaar is wordt een mysql error op het beeld gegeven met daarin die query. Kan iedereen mooi zien wat de host/gebruikersnaam/wachtwoord combinatie moet zijn om in je database te komen.
Verder is het nooit slim mysql_error() in een script op te nemen omdat je daarmee onnodig informatie over je database geeft die men helemaal niet hoeft te weten. "or die('Kon niet verbinden');" of "or die('Querie kon niet uitgevoerd worden');" is meer dan genoeg informatie voor de bezoeker.
Die echo die je daar hebt staan is creatieve manier om zoveel mogelijk fouten in 1 regel php te krijgen maar krijgt geen pixel op het scherm.
Code (php)
1
2
3
2
3
<?
echo '<input type="radio" name="prod_naamlang" value="'.$prodID.'"> :'.$produktnaam.$prodID.'<input name="prodID" type="hidden" value="'.$prodID.'">';
?>
echo '<input type="radio" name="prod_naamlang" value="'.$prodID.'"> :'.$produktnaam.$prodID.'<input name="prodID" type="hidden" value="'.$prodID.'">';
?>
Werkt beter :) Dan is het me nog niet helemaal duidelijk waarom je een radio button en hidden field met dezelfde waarde achter elkaar wil zetten maar goed.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
mysql_connect($host, $user, $password) or die('Critical Error: Could not connect to database');
mysql_select_db($DBname) or die('Unable to select database');
$query = ("SELECT * FROM produkten ORDER BY prod_naamlang ASC, prod_naamlang DESC");
$result = mysql_query($query) or die ('Error executing query');
while($row = mysql_fetch_array($result)) {
$produktnaam = $row['prod_naamlang'];
$prodID = $row['prod_id'];
$prodimgID = $row['img_id'];
$labelID = $row['label_id'];
// verdere code
}
?>
mysql_connect($host, $user, $password) or die('Critical Error: Could not connect to database');
mysql_select_db($DBname) or die('Unable to select database');
$query = ("SELECT * FROM produkten ORDER BY prod_naamlang ASC, prod_naamlang DESC");
$result = mysql_query($query) or die ('Error executing query');
while($row = mysql_fetch_array($result)) {
$produktnaam = $row['prod_naamlang'];
$prodID = $row['prod_id'];
$prodimgID = $row['img_id'];
$labelID = $row['label_id'];
// verdere code
}
?>
Is beter leesbaar met tabs en zonder onnodige dingen enzo en wat veiliger zonder mysql errors.
Gewijzigd op 04/09/2004 01:10:00 door dutchcamel
Die echo die je daar hebt staan is creatieve manier om zoveel mogelijk fouten in 1 regel php te krijgen??
In deze regel worden wel alle ID's geprint zoals ze in mijn DB voorkomen dus hij werkt wel denk ik dan?
Dat hiddenfield was een probeersel: daar wou ik de waarde van de prodID in te zetten maar deze zou eigenlijk nav de selectie van een radiobutton vanzelf bekend moeten zijn bij het posten.
Maar hier gaat het dus mis: de waarde die gezet wordt nadat de query is uitgevoerd is de waarde die in de DB voorkomt maar als die waarde vervolgens gepost wordt dan is die waarde anders?
Bij printen van de waardes bij de radiobuttons geeft ie bijv. 11, 7, 5. als waardes.
Het resultaat geeft 1,3,4 als ik de waardes op de volgende pagina echo wat dus andere waardes zijn dan ik opgehaald heb met de query.
Lastig dit..
Ohja: de mysql errors ben ik me van bewust. kben bezig de zaak op te zetten in afgeschermde directorie en bij live gaan zijn ze zeker verdwenen.
Is beetje lastig om duidelijk te omschrijven als ik niet duidelijk genoeg ben laat me ff weten dan zal ik proberen anders te omschrijven.
Gewijzigd op 04/09/2004 09:54:00 door kees
Maar dit:
Tenminste als je formulier begint met <form method="post" action="iets">. Variabelen via de url vraag je op met $_GET en via een formulier met $_POST.
Code (php)
1
2
3
2
3
<?
echo " <input type=\"radio\" name=\"prod_naamlang\" value=\"$prodID\"> :$produktnaam.$prodID". "<input name=\"prodID\" type=\"hidden\" value=\"<? echo $prodID; ?>\">";
?>
echo " <input type=\"radio\" name=\"prod_naamlang\" value=\"$prodID\"> :$produktnaam.$prodID". "<input name=\"prodID\" type=\"hidden\" value=\"<? echo $prodID; ?>\">";
?>
Over die regel, je haalt de variabelen niet buiten haakjes, je kunt net zo goed echo ''; gebruiken ipv echo ""; als je zoveel " moet escapen. Na $produktnaam.$prodID staat een " die nergens voor nodig is. Daarna gebruik je . " terwijl voor de variabelen geen " . gebruikt is. Bij het laatste stuk, de value van het hidden field wil je in je echo aangegeven dat er php komt door
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<? te gebruiken. Terwijl je midden in een stuk php zit.
Dat bedoelde ik met creatieve fouten :) Dat het toch goed wordt weergegeven zal komen omdat ". " wordt gezien als een samenvoeging van 2 stukken in de echo. En de [code]<? en ?> zal gewoon ge-echo'd worden in je formulier. In de HTML zal dus iets staan van:
<input name="prodID" type="hidden" value="<? echo 12; ?>">
Als $prodID 12 is :)
Dat bedoelde ik met creatieve fouten :) Dat het toch goed wordt weergegeven zal komen omdat ". " wordt gezien als een samenvoeging van 2 stukken in de echo. En de [code]<? en ?> zal gewoon ge-echo'd worden in je formulier. In de HTML zal dus iets staan van:
<input name="prodID" type="hidden" value="<? echo 12; ?>">
Als $prodID 12 is :)
en $_REQUEST dan?
Maar nu over posten vd variabelen:
ik heb dus een groep radiobutons maar achter elke radiobutton heb ik een Bevestig button staan.
Dit zou er 1 moeten zijn:
Ik zit een beetje met hoe dit verder op te lossen: ik wil het aantal radiobuttons niet beperken dus denk aan een loop met de resultaten (is er nu al) en als laatste resultaat dan button Bevestig printen maar heb niet echt idee hoe dit te doen.
Ik wil in ieder geval het aantal keuzes niet beperken (worden er nooit meer als 25).
Iemand een idee hoe dit op te lossen?
Kees
Gewijzigd op 04/09/2004 12:32:00 door kees
Quote:
ik heb dus een groep radiobutons maar achter elke radiobutton heb ik een Bevestig button staan.
waarom?!
je kunt een loopje gewoon maken aan de hand van de array die je al hebt..
Code (php)
bijvoorbeeld..
Laaat in godesnaam die mysql_error() staan tijdens het debuggen!!! dat is de enige manier om te achterhalen wat de fout was.
Het is beter om die errors te loggen naar een bestand, maar raad nooit iemand aan om mysql_error() er zomaar uit te halen!
Verder:
Variabelen NOOIT tussen quotes! Het hoeft niet, het geeft problemen en het vernaggelt je syntax-highlighting.
Haken moeten alleen om functie-parameters, niet om strings als je ze definieert.
Een query mislukt niet als er geen records zijn. Als er geen records zijn krijg je gewoon geen records uit je query. Je kunt altijd vragen hoeveel records er zijn, want als er geen records zijn dan is het antwoord gewoon 'geen records'
Leer af om alle POST vars in aparte variabelen te zetten, dat is nergens voor nodig en maakt het echt niet duidelijker.
"maar nu komt het: ik zet de variabelen binnen de lus op global vd zekerheid zodat ze erbuiten ook beschikbaar zouden moeten zijn?? "
denkfoutje, in een lus zijn er meerdere waardes voor de vars, je kunt ze dus sowieso niet buiten de lus gebruiken. En dat wil je ook niet want je maakt de lus juist omdat je in die lus wilt werken.
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
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
<?
if (!$connection = mysql_connect($host, $user, $password))
{
// Bij een connect error is er geen myqls_error() want mysql_error() werkt alleen op verbindigen.
// geen verbinding: geen mysql_error()
echo "Critical Error: Could not connect";
}
else
{
if (!mysql_select_db($DBname))
{
echo 'Could not connect to database'.mysql_error();
}
else
{
$query='select * from produkten order by prod_naamlang, prod_naamlang desc';
if (!$result=mysql_query($query))
{
echo 'Query failed:'.$query.'<BR>'.mysql_error();
}
else
{
while($row=mysql_fetch_assoc($result))
{
echo '<input type="radio" name="prod_naamlang" value="'.$row['prod_id'].'">:'.$row['prod_naamlang'].$row['prod_id'].'"';
echo '<input name="prodID" type="hidden" value="'.$row['prod_id'].'">';
}
}
}
}
?>
if (!$connection = mysql_connect($host, $user, $password))
{
// Bij een connect error is er geen myqls_error() want mysql_error() werkt alleen op verbindigen.
// geen verbinding: geen mysql_error()
echo "Critical Error: Could not connect";
}
else
{
if (!mysql_select_db($DBname))
{
echo 'Could not connect to database'.mysql_error();
}
else
{
$query='select * from produkten order by prod_naamlang, prod_naamlang desc';
if (!$result=mysql_query($query))
{
echo 'Query failed:'.$query.'<BR>'.mysql_error();
}
else
{
while($row=mysql_fetch_assoc($result))
{
echo '<input type="radio" name="prod_naamlang" value="'.$row['prod_id'].'">:'.$row['prod_naamlang'].$row['prod_id'].'"';
echo '<input name="prodID" type="hidden" value="'.$row['prod_id'].'">';
}
}
}
}
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
// verdere code
echo '<input type="radio" name="prod_naamlang" value="'.$prodID.'"> :'.$produktnaam.$prodID.
'<br>';
}
?>
// verdere code
echo '<input type="radio" name="prod_naamlang" value="'.$prodID.'"> :'.$produktnaam.$prodID.
'<br>';
}
?>
Geeft resultaat allemaal radio's.
Hier wil ik dus een formulier met button omheen hebben zodat ik de waardes op volgende pagina uit kan lezen.
Dat vd array snap ik gedeeltelijk maar er staat niets in over het printen van een formulier met button?
Kees
Gewijzigd op 04/09/2004 13:54:00 door kees
Ik heb ook een pagina gemaakt om een dubbele naam te voorkomen. Deze zoekt in de db of de naam al bestaat en geeft dan de mogelijkheid om deze te editen. De waardes zijn dan al bekend door de zoek query dus ik gebruik hiddenfields met de waardes. Dit werkt dus prima.
Voor het updaten van bestaande produkten dacht ik dezelfde procedure te kunnen gebruiken?
Vandaar formulier met button. Als dit anders kan...
hoor ik het graag maar omdat ik beginner ben lijkt deze manier mij het handigst.
Kees
Iemand anders emailde me:
zet de form tags en de buttons buiten de php
en dit werkt dus, eindelijk...
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
include("connect.inc.php");
mysql_connect($host, $user, $password) or die('Critical Error: Could not connect to database');
mysql_select_db($DBname) or die('Unable to select database');
$query = ("SELECT * FROM produkten ORDER BY prod_naamlang ASC, prod_naamlang DESC");
$result = mysql_query($query) or die ('Error executing query');
?>
include("connect.inc.php");
mysql_connect($host, $user, $password) or die('Critical Error: Could not connect to database');
mysql_select_db($DBname) or die('Unable to select database');
$query = ("SELECT * FROM produkten ORDER BY prod_naamlang ASC, prod_naamlang DESC");
$result = mysql_query($query) or die ('Error executing query');
?>
</h2>
<form method="get" action="update_produkt_def.php">
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
while($row = mysql_fetch_array($result)) {
$produktnaam = $row['prod_naamlang'];
$prodID = @$row['prod_id'];
$prodimgID = @$row['img_id'];
$labelID = @$row['label_id'];
// verdere code
echo '<input type="radio" name="prodID" value="'.$prodID.'"> :'.$produktnaam.'<br>';
}
?>
while($row = mysql_fetch_array($result)) {
$produktnaam = $row['prod_naamlang'];
$prodID = @$row['prod_id'];
$prodimgID = @$row['img_id'];
$labelID = @$row['label_id'];
// verdere code
echo '<input type="radio" name="prodID" value="'.$prodID.'"> :'.$produktnaam.'<br>';
}
?>
<br>
<input name="submit" type="submit" id="submit" value="Bevestig">
</form>
?>
did the trick for me.
Complete code maar gepost mocht iemand anders er belang bij hebben.
Kees