[PHP] Meerdere regels uitlezen na POST? *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,
Ik ben bezig een pagina te maken waarin er meerdere lijnen getoond worden van eenzelfde soort gegevens. bijv: naam, telefoonnr, emailadres en deze komt 10 keer terug. Het is een lijst.

Het tonen van deze gegevens binnen het formulier is geen probleem; het wegschrijven nr de database (updaten) lukt me echter niet. Ik weet niet hoe ik de meerdere lijnen kan uitlezen na een post te doen.

Ik heb eens $_POST afgedrukt, en daar zit enkel het laatste record in (ipv 1 grote array met 10 records)

Het opvullen van de array doe ik zo:
PHP:
1
2
3
4
5
6
7
8
$query = "SELECT nr, naam, ip_adres, macadres, mailadres, gsm, prive FROM <tabel> ORDER BY nr";
$result = mysql_query($query) or die( mysql_error() );
$number = mysql_num_rows ($result);

while( $row = mysql_fetch_array( $result ) ){
echo $row["naam"];
...
}

Het posten gebeurt nr zichzelf: <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

Enig idee wat ik over het hoofd zie? 8)7

Thx

EDIT: oei, ik ben m'n prefix vergeten. Kan iemand dat aanpassen?

[ Voor 3% gewijzigd door RobIII op 01-10-2006 14:59 ]


Acties:
  • 0 Henk 'm!

  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 19-09 19:31
wat je dan moet doen is de naam van de elementen met een [] suffixen, dus dan word het iets van <input type="text" name="naam[]" />

Vervolgens kan je met $_POST['naam'] een array tevoorschijn toveren met alle gegevens daarin

edit: of zit ik hier nu helemaal fout :?

[ Voor 9% gewijzigd door truegrit op 01-10-2006 14:48 ]

hallo


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

Neuh, dat klopt truegrit. :)
Moet flokky juist ff oppassen dat er bij een lege cel toch een veld gemaakt wordt. Anders schuift je data uit de kolom waar de lege cel in staat allemaal een plekkie omhoog en is je array daarvan eentje korter dan de rest ;)

LinkedIn


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hey truegrit:ik heb dat even geprobeerd en dan krijg ik nog altijd maar het laatste record terug dat hij gefetcht heeft in de while. Ben niet zeker of dit de juiste oplossing is.

Toch alvast bedankt om mee te denken.

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

laat je code dan eens zien ajb? liefst tussen
code:
1
[code=php][/code]

LinkedIn


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Titelfix en code tags aangepast. Let daar voortaan zelf even op, ok? ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry voor de prefix en de code tag. Ik was het vergeten. :)

Ik ben geen PHP programmeur, dus ik sta helemaal open voor verbeteringen aan deze code.

Ik had graag in function processForm() alle velden die ingevuld zijn uit te lezen. Dat stukje staat nog in commentaar...

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
error_reporting(E_ALL);
include("common.php");
include("index.php");
require("../config.php");

if (!array_key_exists('_submit_check',$_POST))
{
    echo "voor submitten";
    showForm();
}
else
{
    echo "er werd gesubmit";

    process_form();
    showForm();
}

 ?>

 </table>
  <input type="submit" name="submit" value="Bewaar wijzigingen">
 </form>
 </html>

 <?php
 function showForm()
 {
    $query = "SELECT kotnr, naam, ip_adres, macadres, mailadres, gsm, prive FROM studenten ORDER BY kotnr";
    $result = mysql_query($query) or die( mysql_error() );
    $number = mysql_num_rows ($result);
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table width="75%" border="1" cellpadding="5" cellspacing="0">
  <tr>
    <td class="tekst">Kotnr:</td>
    <td class="tekst">Naam:</td>
    <td class="tekst">IP adres:</td>
    <td class="tekst">MAC adres:</td>
    <td class="tekst">Mail:</td>
    <td class="tekst">GSM nr:</td>
    <td class="tekst">Privé:</td>
  </tr>
  <?php

  if ($number==0)
   {
     echo "<strong>De databank is nog leeg. Voeg eerst gebruikers toe!</strong>";
   }
   else
   {
        while( $row = mysql_fetch_array( $result ) )
        {
 ?>
 <tr>
    <td><p class="tekst"><?php echo $row["kotnr"]; ?></p></td>
    <td><input class="tekst" name="naam[]" type="text" size="10" maxlength="30" value="<?php echo $row["naam"]; ?>"></td>
    <td class="tekst">192.168.0.10<?php $row["kotnr"]; ?></td>
    <td><input class="tekst" name="mac" type="text" size="20" maxlength="17" value="<?php echo $row["macadres"];?>"></td>
    <td><input class="tekst" name="mail" type="text" size="15" maxlength="80" value="<?php echo $row["mailadres"]; ?>"></td>
    <td><input class="tekst" name="gsm" type="text" size="15" maxlength="30" value="<?php echo $row["gsm"];?>"></td>
    <td><input name="private" type="checkbox"
        <?php if ($row["prive"] == "1")
            {
                echo "checked";
            }
            echo ">";
        ?>
    </td>
    <input type="hidden" name="_submit_check" value="1"/>
  </tr>
 <?php
    }
 ?>
    <tr>
        <td colspan="7" class="tekst">Er werden <?php $number; ?> rijen gevonden</td>
    </tr>
 <?php 
  }
}

function process_form()
{
    print_r($_POST);

 //foreach ($_POST['row'] as $value)
 //{
 //       $sql = "INSERT INTO clients VALUES('" . $value['fName'] . "', '" . $value['lName'] . "')";
 //       echo $sql . '<br>';
 //}
}
 ?>

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

Die blokhaken moeten dan wel achter alle veldnamen komen ;)
Nu zou je wel een array van namen moeten hebben, maar voor de rest maar 1 waarde.

en in die proces moet het dan iets worden als:
PHP:
1
2
3
4
for($i=0;$i<count($_POST['naam']);$i++)
{
  //doe iets met $_POST['naam'][$i] en alle andere $_POST['hierjevar'][$i]'s
}


Moet je juist nog wat op die checkbox vinden. Alstie nu niet aangevinkt is wordtie ook niet gepost, wat lege plekken in je array op levert (aan het einde)

Oh en natuurlijk altijd braaf userinput controleren enzo, nu sta je nog al open voor sql-injecties ;)
Strings dus escapen met mysql_real_escape_string($stringvar) en bij ints intval($intvar) als je geen zin hebt om een controle functie te maken :P

Edit:
Ohja, je hebt het over wijzigingen opslaan, wil je dan niet updaten ipv inserten?

[ Voor 5% gewijzigd door Pyrus op 01-10-2006 15:20 ]

LinkedIn


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Pyrus, prachtig hoe je me dat uitgelegd hebt. Ik was hier al een tijdje naar aan het zoeken.

Even om op je vragen te antwoorden:
Ik had de haken enkel achter naam gezet om even te testen. Ik heb ze inmiddels achter elk veld gezet en dat werkt nu goed!
Deze pagina wordt in een afgeschermde .htaccess omgeving gebruikt door mezelf. Idd de pagina is een mogelijk doelwit voor sql-injecties.
En inderdaad, ik ga de regels moeten updaten ipv inserten. Het inserten had ik gekopieerd van een ander projectje.

Het enige waar ik nog ga moeten over nadenken is de checkbox, die idd niet gesubmit word als je hem leeglaat...

Thx!
Pagina: 1