[PHP/MySQL] Variabele strings

Pagina: 1
Acties:
  • 1.003 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ej

Ik kon mijn probleem niet zo goed verwoorden in 1 zin dus vandaar de titel die waarschijnlijk niet helemaal zal kloppen...

Mijn probleem is dat ik een database heb gebouwd met daaraan een php site. Nu heb ik dus een "report" gemaakt waarmee managers het budget moeten goedkeuren. Nu heb ik aan een aantal dingen zitten denken en ben ik er toch op uit gekomen dat het makkelijkste is dat bij de reports een checkbox meegeleverd word die ze kunnen aanvinken en zo laten zien dat het budget goed gekeurd is.

De report word gemaakt m.b.v. een while loop en dat ziet er zo uit:

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
<?php
echo "<form name=\"approval\" action=\"approval_uitvoer.php\" method=\"post\">";
    
include("config.php");

mysql_connect($dbhost, $dbuser, $dbpassword) or die ("Could not connect to database! <BR>Reason: ". mysql_error());

mysql_select_db($db);
    
echo "<table border=1><tr><td>";
echo "Approval:</td><td>Is it approved?</td><td>Name</td><td>Department</td><td>Date</td><td>Hardware type</td><td>Expected grow</td><td>Communication type</td><td>Is it a lease?</td><td>Is it maintenance?</td><td>Is it renewal?</td><td>Is support needed?</td><td>Cost investment</td><td>Cost lease</td><td>Cost maintenance</td><td>Cost renewal</td><td>Cost support</td><td>Details</td></tr>";

$result = mysql_query("SELECT * FROM hardware WHERE department=$department1 AND user=$user1") or die ("Query Failed" . mysql_error());
while ($row = mysql_fetch_object($result)) {

echo "<tr><td>";
    echo "<input type=\"checkbox\" name=\"$row->id\" value=\"Yes\"> </td><td>";
    echo "$row->approval </td><td>";
    echo "$row->user </td><td>";
    echo "$row->department </td><td>";
    echo "$row->date </td><td>";
    echo "$row->type </td><td>";
    echo "$row->expected_grow </td><td>";
    echo "$row->comm_type </td><td>";
    echo "$row->lease </td><td>";
    echo "$row->maintenance </td><td>";
    echo "$row->renewal </td><td>";
    echo "$row->support </td><td>";
    echo "$row->investment_cost </td><td>";
    echo "$row->lease_cost </td><td>";
    echo "$row->maintenance_cost </td><td>";
    echo "$row->renewal_cost </td><td>";
    echo "$row->support_cost </td><td>";
    echo "$row->details </td></tr>";

   }
mysql_free_result($result);

echo "<input type=\"submit\" value=\"Proceed\">";
echo "</form>";
?>


Ik geef dus bij elk ingevuld budget een id mee die hij automatisch optelt. Dat id geef ik mee aan de checkbox.

Hier is een deel van de report die ik maak:

Afbeeldingslocatie: http://img163.imageshack.us/img163/9642/probleem39mm.jpg

Nu is mijn probleem dus dat ik dus niet weet hoeveel id's er uit eindelijk komen en hoeveel er bij de reports worden weergeven. Dus hoe kan ik nu strings toekennen aan die checkboxes zodat ik ze m.b.v. een query naar de database kan sturen?

Of moet ik ergens anders aan denken dan strings... dit lijkt mij namelijk de enigste oplossing.

Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Als je de checkboxes noemt zoals je nu doet, is het toch prima.

Je kan dan met een submit de $_POST doorlopen, om zo alle gecheckte boxes te krijgen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ZroBioNe schreef op maandag 15 mei 2006 @ 10:03:
Als je de checkboxes noemt zoals je nu doet, is het toch prima.

Je kan dan met een submit de $_POST doorlopen, om zo alle gecheckte boxes te krijgen.
Dat kan toch niet want dan moet ik voor elke checkbox een $_POST aanmaken. maar aangezien ik dus niet weet tot hoeveel die id ooit zal oplopen en ik niet weet hoeveel er ooit in 1 zo'n report word laten zien is dat niet te doen..

Dat zou betekenen dat ik minstens een paar honderd keer die $_POST moet uitvoeren..

Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Je kan in PHP inderdaad gewoon de value van alle form objecten die een name= hebben uitlezen. Probeer het eens te echo-en dmv print_r zodat je kan zien wat hij post ;)

(Net ff zelf geprobeerd, bij een paar dingen aangevinkt krijg je dan:
PHP:
1
Array ( [0] => Yes [3] => Yes [4] => Yes )

[ Voor 32% gewijzigd door Kayshin op 15-05-2006 10:20 ]

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 21-07 21:37
Doe als naam iets van checkbox[$row->id]. Dan heb je alles in een array en kun je met count(array) uitlezen hoeveel records er zijn. Hoop dat ik je goed begrijp :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kayshin schreef op maandag 15 mei 2006 @ 10:14:
Je kan in PHP inderdaad gewoon de value van alle form objecten die een name= hebben uitlezen. Probeer het eens te echo-en dmv print_r zodat je kan zien wat hij post ;)

(Net ff zelf geprobeerd, bij een paar dingen aangevinkt krijg je dan:
PHP:
1
Array ( [0] => Yes [3] => Yes [4] => Yes )
Hoe doe ik dit dan verder?

Ik ben nl niet zo heel erg ervaren binnen php...

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Numerieke waarden gebruiken in een name-attribuut is vragen om problemen. Persoonlijk zou ik dit op de volgende manier oplossen:
HTML:
1
2
3
<input type="checkbox" name="approve[]" value="1">
<input type="checkbox" name="approve[]" value="2">
<input type="checkbox" name="approve[]" value="3">

serverside kan je dan in PHP $_POST['approve'] doorlopen. Niet-aangevinkte checkboxen worden immers niet meegenomen in je POST.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Als het alleen om bepaalde dingen goed te keuren (de approval) waarom laat je dan óók items zien die allang goedgekeurd zijn? :?

Kan je dan niet beter het volgende als query gebruiken:
PHP:
1
2
3
$query = "SELECT * FROM `hardware` WHERE `department` = '". $department1 ."' AND `user` = '". $user1 ."' AND `approval` = 'No'";

// Query uitvoeren en zo...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GJ-tje schreef op maandag 15 mei 2006 @ 10:34:
Als het alleen om bepaalde dingen goed te keuren (de approval) waarom laat je dan óók items zien die allang goedgekeurd zijn? :?

Kan je dan niet beter het volgende als query gebruiken:
PHP:
1
2
3
$query = "SELECT * FROM `hardware` WHERE `department` = '". $department1 ."' AND `user` = '". $user1 ."' AND `approval` = 'No'";

// Query uitvoeren en zo...
mmh nog niet aangedacht misschien wel leuk om mee te nemen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op maandag 15 mei 2006 @ 10:26:
Numerieke waarden gebruiken in een name-attribuut is vragen om problemen. Persoonlijk zou ik dit op de volgende manier oplossen:
HTML:
1
2
3
<input type="checkbox" name="approve[]" value="1">
<input type="checkbox" name="approve[]" value="2">
<input type="checkbox" name="approve[]" value="3">

serverside kan je dan in PHP $_POST['approve'] doorlopen. Niet-aangevinkte checkboxen worden immers niet meegenomen in je POST.
Ok dit heb ik nu gedaan en heb ik alles in een array staan.. hoe kan ik die nou dan meenemen in een query zodat ik het kan updaten in de database..

Je zit natuurlijk wel met het aantal wat in 1 keer word goed gekeurd.. dat is dus niet van de voren te zeggen..

Want de ene keer gaat de array maar tot 3 en de andere keer misschien wel tot 9 ofzo...

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

SQL:
1
2
3
UPDATE `hardware`
SET `approval` = 'Yes'
WHERE id IN (1,2,3)

;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op maandag 15 mei 2006 @ 11:24:
SQL:
1
2
3
UPDATE `hardware`
SET `approval` = 'Yes'
WHERE id IN (1,2,3)

;)
Dit werkt toch alleen als je deze html code gebruikt:

[html]
<input type="checkbox" name="approve[]" value="1">
<input type="checkbox" name="approve[]" value="2">
<input type="checkbox" name="approve[]" value="3">
[/html]

Wat bij mij de code is is:

PHP:
1
2
3
4
5
6
7
$result = mysql_query("SELECT * FROM hardware WHERE department=$department1 AND user=$user1") or die ("Query Failed" . mysql_error()); 
while ($row = mysql_fetch_object($result)) { 

echo "<input type=\"checkbox\" name=\"approve[]\" value=\"$row->id\">"; 

}
mysql_free_result($result);


hoe kan ik dat probleem dan oplossen...

Acties:
  • 0 Henk 'm!

  • remcotolsma
  • Registratie: December 2005
  • Laatst online: 28-11-2024
PHP:
1
2
3
4
5
6
7
$result = mysql_query("SELECT * FROM hardware WHERE department=$department1 AND user=$user1") or die ("Query Failed" . mysql_error()); 
while ($row = mysql_fetch_object($result)) { 

echo "<input type=\"checkbox\" name=\"approve[]\" value=\"$row->id\">"; 

}
mysql_free_result($result);

Misschien dat je hier iets mee kunt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(array_key_exists('approve', $_POST)) // controleren of er iets gepost is
{
  $query = 'UPDATE `hardware` SET `approval` = `Yes` WHERE id IN ('.implode(', ', $_POST['approve']).');';
  $result = mysql_query($query);

  if($result === false)
  {
    echo 'Error';
  }
  else
  {
    echo 'Ok';
  }
}

[ Voor 17% gewijzigd door remcotolsma op 15-05-2006 12:35 ]


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 14:58

hamsteg

Species 5618

Waarom laat je in de eerste colom een checkbox zien en in de tweede de (vorige) waarde? Dit kun je ook laten zien door de checkbox vanuit de query aan te vinken. Mag een selectie niet meer worden uitgevinkt dan maak je hem read-only. Scheelt weer een colom en dat verhoogt de duidelijkheid.

Politiek overgevoelig: complexiteit en gevoeligheid van politieke onderwerpen, waarbij het de kunst is een constructieve dialoog te voeren. Censuur door overgevoeligheid: gedrag waarbij bepaalde content wordt geredigeerd uit angst voor offensief te zijn.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

remcotolsma schreef op maandag 15 mei 2006 @ 12:35:
Misschien dat je hier iets mee kunt:
[...]
Vergeet niet je input te sanitizen; never trust user input ;)

[ Voor 6% gewijzigd door crisp op 15-05-2006 13:06 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
remcotolsma schreef op maandag 15 mei 2006 @ 12:35:
PHP:
1
2
3
4
5
6
7
$result = mysql_query("SELECT * FROM hardware WHERE department=$department1 AND user=$user1") or die ("Query Failed" . mysql_error()); 
while ($row = mysql_fetch_object($result)) { 

echo "<input type=\"checkbox\" name=\"approve[]\" value=\"$row->id\">"; 

}
mysql_free_result($result);

Misschien dat je hier iets mee kunt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(array_key_exists('approve', $_POST)) // controleren of er iets gepost is
{
  $query = 'UPDATE `hardware` SET `approval` = `Yes` WHERE id IN ('.implode(', ', $_POST['approve']).');';
  $result = mysql_query($query);

  if($result === false)
  {
    echo 'Error';
  }
  else
  {
    echo 'Ok';
  }
}
toon volledige bericht
tnx voor je oplossing.. alleen werkt het niet..

Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Wat werkt er niet aan? Je array klopt? Je hebt een veld aangemaakt genaamd approval? Welke error krijg je?

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kayshin schreef op maandag 15 mei 2006 @ 16:54:
Wat werkt er niet aan? Je array klopt? Je hebt een veld aangemaakt genaamd approval? Welke error krijg je?
Ik krijg helemaal niks te zien gewoon een wit scherm.. ik heb de error reporting al op E_ALL staan maar dan krijg ik nog niks te zien..

Maar voor mijn gevoel voert hij de query toch ook niet uit op deze manier... of zit ik dan fout..

Edit

De IF echo't nu Error terug...

Ik heb al verschillende dingen geprobeerd maar waar moet ik ongeveer kijken naar de fout...


Hij doet het al ik was de connectie naar de database vergeten :X

Maar iig allemaal bedankt voor de oplossing :>

[ Voor 27% gewijzigd door Verwijderd op 16-05-2006 11:28 ]

Pagina: 1