ugrás a tartalomhoz

form küldése while ciklusból

szobek · 2012. Szep. 7. (P), 10.00
Sziasztok!

Egy kis segítségre lenne szükségem. Egy while ciklusban kiiratok egy inputot mely megkapná "elvileg" az értéket, de valamiért nem egy értéket kap hanem rengeteget.
Viszont ugyanitt van még egy input mező ami egy checkbox és ezt is tömbként küldöm tovább, de az rendesen átviszi az adatokat.

Ja és a kód ami nem stimmel:
echo '<form method="post" action="" name="">';

echo '<table border="1">';

echo napok(); // Dátumok kiirása

$query_users = mysql_query("SELECT * FROM szabi_user_new"); // userek lekérdezése

while($userlist = mysql_fetch_assoc($query_users)) {
	$user = $userlist["user_nw"];
	if ($user == 1832) {}
	else {
	echo '<tr><td>'.$user.'</td>'; 
	
	
	
	$date2 = '2011-12-31';
$date2 = strtotime($date2);  // mai
$date3 = $date2; // mai átalakítva
$dateend = '2012-12-31'; // ameddig pörgetem
$dateend = strtotime($dateend); // amedig pörgetem átalakítva



	
	
	while($date3 < $dateend) {
	$date3 += 86400;
	$date4 = 'd'.date("Y_m_d", $date3);
	$nap = date("D", $date3);
	
	$mirol = array('Mon','Tue','Wed','Thu','Fri','Sat','Sun');
	$mire = array('H','K','Sze','Cs','P','Szo','V');
	$nap = str_replace($mirol, $mire, $nap);
	if ($nap == 'Szo' OR $nap == 'V' ) {
		echo '<td style="background:grey"></td>';
	}
	else {	
		$query_nap = mysql_query("SELECT * FROM szabi_new WHERE user = $user 	");	
		while ($napstatusz = mysql_fetch_assoc($query_nap)) {
			switch ($napstatusz[$date4]) {
				case 0: // még nem lefoglalt
					$style = "green";
					break;
				case 1:
					$style = "red"; // megigényelt de nem elfogadott
					break;
				case 2:
					$style = "blue";  // elfogadott szabi
					break;
			}
			
			echo '<td style="background:'.$style.'">'.$napstatusz[$date4];
			echo '<input type="checkbox" name="mikor[]" value="'.$date4.' "/>';
			echo '<input type="hidden" name="iguser[]" value="'.$napstatusz["user"].'" />'; 
// Itt a hiba
			echo '</td>';
			
		}
				

	}	
	
	}
	
	
	
	
	echo '</tr>';
	}
	
	
}	
echo '</table>';



echo '<input type="submit" value="Igényt elfogad" onclick="this.form.action=\'igeny_elfogado.php\'">';
echo '<input type="submit" value="Igényt elutasít" onclick="this.form.action=\'igeny_elutasito.php\'">';


echo '</form>';
Na hát ebben kérném a segítségeteket, hogy hogyan tudnám normálisan továbbküldeni az adatot.
Előre is köszönöm a segítséget!
Norbi
 
1

Név

Poetro · 2012. Szep. 7. (P), 11.12
Adj nekik külön nevet. Azaz
$counter=0
while ($napstatusz = mysql_fetch_assoc($query_nap)) {  
  //...
  echo '<input type="checkbox" name="mikor[', $counter, ']" value="', $date4, ' "/>';  
  echo '<input type="hidden" name="iguser[', $counter, ']" value="', $napstatusz["user"], '" />'; 
  $counter++;
  //...
}
2

Fájdalmas dolgok vannak ebben

inf3rno · 2012. Szep. 11. (K), 05.45
Fájdalmas dolgok vannak ebben a kódban.

Néhány javaslat:
  • Használj egy IDE-t, hogy formázza a kódodat!
  • Döntsd el, hogy magyarul vagy angolul akarod írni a kódot!
  • Olyan neveket adj a változóidnak, hogy érteni lehessen belőle, hogy mi a feladatuk, mit tárolnak, stb... Ugyanez igaz az adatbázis táblákra és oszlopokra is!
  • A nyilvánvaló dolgokat felesleges commentbe beírni.
  • A nagyobb blokkokat emeld ki külön függvénybe!
  • A számokat tedd konstansba vagy változóba!
  • Egy változóban ne tárolj eltérő típusokat, helyette hozz létre új változót!
  • Az OR és AND operátorok helyett || és && -eket használj!
  • A stílust emeld ki külön stíluslapokba, és csak css class-t adjál meg!
  • Ne használj mysql_ függvényeket! (Helyette mysqli vagy PDO, amit lehet, én inkább az utóbbira szavazok.)
  • Ne használj ciklusban SQL lekéréseket, dupla ciklusban meg duplán nem!
  • Add meg az SQL-ekben, hogy pontosan milyen oszlopokat szeretnél lekérdezni!
  • Ha foreign key-t használsz SQL-nél, akkor legyen azonos az oszlop neve a másik táblában lévő primary key-el!
Többet nem írok, mert nagyon hosszú lenne a lista, kezdetnek ezeket is épp elég nehéz betartani.

Nagyjából látom, hogy mit szeretnél. Körülbelül arról van szó, hogy nyilván kell tartani a cég alkalmazottainak a szabadságait. Ők leadhatnak kérvényt, amit vagy elutasítanak, vagy elfogadnak, és ezeket listázni kell alkalmazottanként és naponként. A gond az, hogy teljesen rossz úton jársz mind az adatbázis terén, mind a kirajzolási koncepció terén. Ezt úgy kéne csinálni, hogy letárolod az adatbázisban a kérvényeket (kérvény_id, alkalmazott_id, dátum, állapot) formában. Utána lekéred a teljes listát egyetlen SQL-el

$connection = new PDO($dsn, $username, $passwd, $options);
$holidayDemandReader = $connection->query('SELECT `holiday_demand_id`,`employee_id`,`date`,`state` FROM `holiday_demand`');
és csinálsz egy több dimenziós tömböt belőle:

$demandContainer = array();
while ($record = $holidayDemandReader->fetch(PDO::FETCH_ASSOC)) {
    $employeeId = $record['employee_id'];
    $demandDate = $record['date'];
    if (!isset($demandContainer[$employeeId]))
        $demandContainer[$employeeId] = array();
    $demandContainer[$employeeId][$demandDate] = $record;
}
Ezek után végigmész a listán felhasználónként, és elkezded felsorolni a napokat. Közben megnézed, hogy az adott nap szerepel e a felhasználó listájában:

$startDate = '2011-12-31';
$endDate = '2012-12-31';
$oneDayInSeconds = 86400;
$daysInSelectedInterval = range(strtotime($startDate), strtotime($endDate), $oneDayInSeconds);

foreach ($demandContainer as $employeeId => $demands) {
    //ez a rész felhasználónként egyszer fut le
    foreach ($daysInSelectedInterval as $timeStamp) {
        //ez a rész felhasználónként és naponként egyszer fut le
        $date = date("Y-m-d", $timeStamp);
        if (array_key_exists($date, $demands)) {
            //van kérvény erre a napra
        } else {
            //nincs kérvény erre a napra
        }
    }
}
3

Hűha

Pepita · 2012. Szep. 11. (K), 06.56
Van itt hideg is, meleg is, de igaz...
Ezt viszont nem értem:
Az OR és AND operátorok helyett || és && -eket használj!
Ugyan minek? Én olvasni jobban szeretek, mint kódokat fejteni (bip-bip). Lehet, hogy itt valami tudáshiányom van, remélem akkor felhomályosítasz...
4

Példa

MadBence · 2012. Szep. 11. (K), 08.09
$a=false or true vs $a=false || true. Az első esetben az $a értéke false lesz, a másodikban true. Szóval van vele szívás, ha nem tudod fejből a precedenciáját...
5

Szerintem nekem van

inf3rno · 2012. Szep. 11. (K), 14.14
Szerintem nekem van tudáshiányom, mert soha nem használtam ezeket... Azt se tudtam, hogy egyáltalán működnek, viszont kódban leírva sem sűrűn találkoztam velük...

Ahogy nézem, amit MadBence ír, jobb nem is tudni róla, mert csak a hajamat tépném...
6

Ahogy nézem, amit MadBence

kuka · 2012. Szep. 11. (K), 16.11
Ahogy nézem, amit MadBence ír, jobb nem is tudni róla, mert csak a hajamat tépném...
Én egyszer megjegyeztem Perlben, utána PHP-ben és Ruby-ban csak kipipáltam, hogy Ok, ez is a megszokott. Azóta 3 nyelvben használom és egyiknek sincs köze az előrehaladott kopaszodásomhoz.
  DB<1> $a=0 or 1; print $a;
0
  DB<2> $a=0 || 1; print $a;
1
Interactive shell

php > $a=false or true; echo $a;
php > $a=false || true; echo $a;
1
irb(main):001:0> a=false or true; p a
false
=> false
irb(main):002:0> a=false || true; p a
true
=> true
7

Persze, értem én, hogy mit

inf3rno · 2012. Szep. 11. (K), 18.18
Persze, értem én, hogy mit jelent, de nekem logikusabb a && és || használata, mert egyrészt azt szoktam meg, másrészt meg feltételbe nem teszek bele értékadást, csak nagyon kivételes esetben (while + fetch), de ilyenkor sem társul mellé or vagy and. Tehát nem fordul elő olyan eset, ahol én ezt a feature-t használnám, gondolom ezért nem is sűrűn találkozom vele.
8

Na igen,

Pepita · 2012. Szep. 12. (Sze), 02.06
logikai operátorokat én sem használok értékadásnál (hanem előbb vizsgálat, aztán értékadás -> olvashatóbb). És le is hidalnék, ha az if (false or true)... else ágra billenne. Nehogy azt mondjátok, hogy else lesz, mert akkor néhány gigányi kódot máris nyálazhatok!
9

Nem lesz az :D

inf3rno · 2012. Szep. 12. (Sze), 02.39
Nem lesz az :D itt feldolgozási sorrendről van szó:

if ($x = $a or $b)
;
azonos jelentésű ezzel:

$x = $a;
if ($x or $b)
;
Nyilván ilyesmiket feltételben épeszű ember nem használ. (Bár láttam már kivételt rá...)
10

:)

Pepita · 2012. Szep. 12. (Sze), 03.14
Eddig lapátoltam a lehullott köveket. :)

Hát ilyen csúnyaságokat még nemigen láttam - mondjuk én nem is szoktam "kész a honlap, csak kicsit javítani kéne rajta" dolgokba belemenni...
11

Hát annak is megvan a maga

inf3rno · 2012. Szep. 12. (Sze), 03.46
Hát annak is megvan a maga szépsége :D Én előtte azért szoktam egy véleményt írni a kódról, amiben leírom azt is, hogy mire vagyok hajlandó, és mire nem. Vaktában nem éri meg ilyesmiket bevállalni, csak ha tényleg nagyon apró dolgokról van szó.