Wordt er helemaal gek van, posten van variablen altijd hetzelfde wardes??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees

kees

04/09/2004 00:33:00
Quote Anchor link
Hallo mensen,

Met de volgende code haall ik 3 ID's op uit een db

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>


als ik dan echo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$prodID
= $_GET['prod_id'];//enz
?>


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
 
PHP hulp

PHP hulp

15/11/2024 10:36:43
 
Dutchcamel

dutchcamel

04/09/2004 01:00:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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");
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
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.
 
Dutchcamel

dutchcamel

04/09/2004 01:09:00
Quote Anchor link
Verder zou ik van het bovenste stuk iets maken als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>


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
 
Kees

kees

04/09/2004 09:31:00
Quote Anchor link
He alvast bedankt voor de tips 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
 
Dutchcamel

dutchcamel

04/09/2004 10:42:00
Quote Anchor link
Als je die waardes via een formulier door wil geven moet je niet dit gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$prodID
= $_GET['prod_id'];
?>


Maar dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$prodID
= $_POST['prod_id'];
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
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)
PHP script in nieuw venster Selecteer het PHP script
1
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 :)
 
Joris van Rooij

Joris van Rooij

04/09/2004 10:46:00
Quote Anchor link
en $_REQUEST dan?
 
Kees

kees

04/09/2004 12:22:00
Quote Anchor link
Kheb code van dutchcamel geporbeerd en ik krijg nu wel de juiste resultaten als values va radiobuttons dus das heel mooi.

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
 
B a s
Beheerder

B a s

04/09/2004 12:39:00
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
$array
= "<de array die je al hebt en bestaat>";

for ($i = 0; $i < count($array); $i++)
{

   echo "<input type=\"radio\" name=\"naam\" value=\"" . $array['$i'] . "\">";
}

?>


bijvoorbeeld..
 
Vincent elschot

vincent elschot

04/09/2004 12:44:00
Quote Anchor link
"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. "

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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'].'">';
      }
    }
  }
}

?>
 
Kees

kees

04/09/2004 13:33:00
Quote Anchor link
Hoe die array te implementeren?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
// 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
 
Kees

kees

04/09/2004 13:45:00
Quote Anchor link
De bedoeling van de code is om een beheerder van de site een produkt te laten selecteren en aan de hand van de selectie krijgt hij dan de pagina met relevante gegevens om te editen en de db te updaten.

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
 
Kees

kees

04/09/2004 14:56:00
Quote Anchor link
Het probleem is opgelost..

Iemand anders emailde me:

zet de form tags en de buttons buiten de php

en dit werkt dus, eindelijk...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>

</h2>
<form method="get" action="update_produkt_def.php">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
     }

?>

<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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.