Buggfix Plus
Aktuellt datum och tid: 11.30 2019-09-15

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 10 inlägg ] 
Författare Meddelande
InläggPostat: 13.19 2005-06-23 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9290
Ort: Knivsta
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.


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 14.55 2005-06-23 
EF Sponsor

Blev medlem: 15.39 2004-02-05
Inlägg: 167
Ort: Orust
Så här gjorde jag när jag skulle lägga in massa lektioner i en schemadatabas.

I edit-filen
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
<input type=text name=amne[$i] value=\"$amne[$i]\" size=30>


och i update-filen
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
INSERT INTO schema SET amne='$amne[$i]'


båda ligger i var sin loop som räknar igenom $i


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 15.57 2005-06-23 
EF Sponsor

Blev medlem: 18.05 2005-01-16
Inlägg: 1283
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:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
<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>


Koden för change.php ser då ut såhär:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
<?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);
      }
   }
?>

(koden innehåller säkert något/några syntaxfel)


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 18.09 2005-06-23 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9290
Ort: Knivsta
Ahh tackar, verkar smidigt, får testa när jag är tillbaka på jobb efter midsommarhelgen!


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 17.08 2005-06-27 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9290
Ort: Knivsta
Nu har jag misshandlat era exempel "lite"

test.php
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
<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>

Ritar ut en jättefin textbox med namnet hours_day10.

change.php
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
<?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"]}";

?>

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?


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 18.17 2005-06-27 
EF Sponsor
Användarvisningsbild

Blev medlem: 09.40 2004-04-08
Inlägg: 1539
Ort: Uppsala
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:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
<pre>
<? print_r($_POST[amne]) ?>
</pre>

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]


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 18.43 2005-06-27 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9290
Ort: Knivsta
Aha, det var så man skulle skriva $_POST för att komma åt dem i arrayen... Nu ligger de med namn som pheers exempel istället.

Eftersom det är en standard debian ap-get php4 installation så kan man nog rätt säkert misstänka att register_globals är avslaget.

Tackar för hjälpen!


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 21.08 2005-06-27 
EF Sponsor

Blev medlem: 18.05 2005-01-16
Inlägg: 1283
Sorry, det var lite otydligt jag använder själv en funktion som automatiskt lägger $_GET eller $_POST i $form samtidigt som en säkerhetskontroll görs...så i ditt fall ska det stå $_POST...


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 21.54 2005-06-27 
Användarvisningsbild

Blev medlem: 19.54 2003-06-25
Inlägg: 2469
Ort: Stockholm
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 :lol:


Upp
 Profil  
 
 Inläggsrubrik:
InläggPostat: 22.49 2005-06-27 
Användarvisningsbild

Blev medlem: 18.17 2004-02-11
Inlägg: 9290
Ort: Knivsta
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 :D


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 10 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010