PHP och MASSAOR av textboxar
PHP och MASSAOR av textboxar
Mjukvara som mjukvara eller?
Har ett litet problem... Har typ en websida med MASSOR av textboxar, (en för varje dag (21 st) * antalet projekt(som varierar från 1-2 till 20-30st).
Dessa ska man knappa in tid i och sen trycka på typ "Spara".
Och det är ju då det börjar bli jobbigt, finns det nått smart sätt att läsa av värdet i dessa hundratals textboxar? Lägga upp dem i nån typ av tvådimmad array eller nått?
Kör PHP4, värdet ska sen in i en mysql databas, fast det borde kvitta i detta läget...
Har försökt komma på några bra sökfraser på google, men utan nån direkt tur.
Har ett litet problem... Har typ en websida med MASSOR av textboxar, (en för varje dag (21 st) * antalet projekt(som varierar från 1-2 till 20-30st).
Dessa ska man knappa in tid i och sen trycka på typ "Spara".
Och det är ju då det börjar bli jobbigt, finns det nått smart sätt att läsa av värdet i dessa hundratals textboxar? Lägga upp dem i nån typ av tvådimmad array eller nått?
Kör PHP4, värdet ska sen in i en mysql databas, fast det borde kvitta i detta läget...
Har försökt komma på några bra sökfraser på google, men utan nån direkt tur.
Så här gjorde jag när jag skulle lägga in massa lektioner i en schemadatabas.
I edit-filen
och i update-filen
båda ligger i var sin loop som räknar igenom $i
I edit-filen
Kod: Markera allt
<input type=text name=amne[$i] value=\"$amne[$i]\" size=30>
Kod: Markera allt
INSERT INTO schema SET amne='$amne[$i]'
Antar att det är timmar som ska vara i textboxarna. Om du i projekttabellen har kolumnerna id, name och day0-day21 så kan du ha någon liknande kod för att visa sidan med textboxarna för ett projekt:
Koden för change.php ser då ut såhär:
(koden innehåller säkert något/några syntaxfel)
Kod: Markera allt
<FORM METHOD="post" ACTION="change.php">
<TABLE>
<?php
$id = ...;
mysql_query("SELECT * FROM projects WHERE id='$id'", $db);
$nrofprojects = mysql_num_rows($query);
print "<input type=\"hidden\" name=\"nrofprojects\" value=\"$nrofprojects\">";
while ( ($row = mysql_fetch_array($query)) != FALSE ) {
print "<TR><TH>{$row['name']</TH></TR>"
for ( $i = 0; $i < 21; $i++ ) {
print "<TR><TD>Day {$i+1} <input type=text name=\"hours_p{$row['id']}}_day$i\" value=\"{$row["day$i"]}\" size=30></TD></TR>";
}
}
?>
<TR><TD COLSPAN=<?php print $nrofprojects; ?><INPUT TYPE="submit"></TD></TR>
</TABLE>
</FORM>
Kod: Markera allt
<?php
for ( $i = 0; $i < $form['nrofprojects']; $i++ ) {
for ( $j = 0; $j < 21; $j++ ) {
mysql_query("UPDATE projects SET day$j={$form["hours_p{$i}_day{$j}"]} WHERE id = $i", $db);
}
}
?>
Nu har jag misshandlat era exempel "lite"
test.php
Ritar ut en jättefin textbox med namnet hours_day10.
change.php
Det är här det börjar bli skumt, som jag tolkar pheer:s kodexempel skulle jag få ut värdet på det översta sättet att skriva, det får jag inte... utan bara via $_POST varianten, att inte $_GET funkar kan kan köpa.
I vinkings exempel förstår jag inte riktigt hur värdet skulle hamna i 'amne[$i]' Sker detta automagisgt? Finns det alltid en variabel för varje input man har på ett formulär? Vad är då vinsten med att använda _POST/_GET istället?
test.php
Kod: Markera allt
<FORM METHOD="post" ACTION="change.php">
<?php
$i=10;
print "Day $i <input type=text name=\"hours_day$i\" value=\"00\" size=30>";
?>
<INPUT TYPE="submit">
</FORM>
change.php
Kod: Markera allt
<?php
$i=10;
echo "<br><br>form hours_day$i = {$form["hours_day$i"]}";
echo "<br>get hours_day$i = {$_GET["hours_day$i"]}";
echo "<br>post hours_day$i = {$_POST["hours_day$i"]}";
?>
I vinkings exempel förstår jag inte riktigt hur värdet skulle hamna i 'amne[$i]' Sker detta automagisgt? Finns det alltid en variabel för varje input man har på ett formulär? Vad är då vinsten med att använda _POST/_GET istället?
Har man register_globals avslaget i sin php.ini så måste man använda $_GET, $_POST osv. för att komma åt variabler som kommer från användaren på något sätt. Det är en säkerhetsgrej.
I pheers exempel är du tvungen att använda $_POST eftersom forumulärdatan skickas via POST-metoden och du nog har register_globals avslaget (numera standard).
I vikings exempel måste du också använda $_POST för att komma åt datan av samma anledning. Lägg in:
på "mottagarsidan" för att se var värdena sparas i arrayen. Som du kanske luskar ut av utskriften från print_r() så kan du komma åt värdena genom $_POST[amne][$i]
I pheers exempel är du tvungen att använda $_POST eftersom forumulärdatan skickas via POST-metoden och du nog har register_globals avslaget (numera standard).
I vikings exempel måste du också använda $_POST för att komma åt datan av samma anledning. Lägg in:
Kod: Markera allt
<pre>
<? print_r($_POST[amne]) ?>
</pre>
Ett annat alternativ är att köra $_REQUEST[...], det tar data från både GET/POST.
Och vad du än gör, slå inte på register_globals.
Sen kan du ju akta dig för att klämma in någon SQL-injection-exploit.
Säg att du har kod som ser ut såhär:
$id = $_GET['id'];
$q = mysql_query("SELECT tilte,body,date,author FROM news WHERE id='$id'") or die();
BAM... du har fått in en exploit i koden... räcker med att man skriver något i stil med ?id=';UPDATE useres SET admin='true' WHERE user='chille'; eller något liknande
Och vad du än gör, slå inte på register_globals.
Sen kan du ju akta dig för att klämma in någon SQL-injection-exploit.
Säg att du har kod som ser ut såhär:
$id = $_GET['id'];
$q = mysql_query("SELECT tilte,body,date,author FROM news WHERE id='$id'") or die();
BAM... du har fått in en exploit i koden... räcker med att man skriver något i stil med ?id=';UPDATE useres SET admin='true' WHERE user='chille'; eller något liknande
chille:
Tänkte inte slå på register_globals, du kan vara lugn
Har tittat lite på det där med säkerheten, och visst finns det många fina misstag man kan göra. Borde väll i detta fallet vara rätt säkert att klippa ner alla textsträngar till 2 tecken... Bortklippning av div specialtecken borde väll också säkra lite...
Men visst ska jag erkänna att koden idag är full av sql-injection-exploits
Tänkte inte slå på register_globals, du kan vara lugn
Har tittat lite på det där med säkerheten, och visst finns det många fina misstag man kan göra. Borde väll i detta fallet vara rätt säkert att klippa ner alla textsträngar till 2 tecken... Bortklippning av div specialtecken borde väll också säkra lite...
Men visst ska jag erkänna att koden idag är full av sql-injection-exploits