[PHP] Probleem met while opdracht *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een beginner wat betreft php en ik heb het volgende probleem. Ik heb het formulier + het php script hieronder opgenomen. Nadat ik het hele formulier heb ingevuld en ik druk op verzenden lijkt alles goed te gaan. Echter wordt in de mysql database bij onderschrift telkense Array als waarde weggeschreven. De andere waarden worden wel allemaal wel goed weggeschreven. Ik denk dat ik een fout maak in het while gedeelte van het php bestand maar ik kom er niet precies uit wat ik nu verkeerd doet. In het while gedeelte worden zowel waarden weggeschreven in de database en daarnaast worden er plaatjes geupload naar de server. Als iemand mij zou kunnen helpen. Graag!

Formulier A
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<form method=post action=b.php enctype='multipart/form-data'>
Titel:<input name="titel" type="text" id="titel" maxlength="255"><br>
Inhoud:<textarea name="inhoud" id="inhoud"></textarea><br>
Categorie:<input name="categorie" type="text" id="categorie">
<?
$max_no_img=10;  // Maximum number of images value to be set here
for($i=1; $i<=$max_no_img; $i++)
{
echo "Images $i</td><td><input type=file name='images[]'>";
echo "Onderschrift $i</td><td><input type=text name='onderschrift[]'>";
}
?>
<input name="Post" type="submit" id="Post" value="Upload File">


PHP bestand
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
<?php
$titel = $_POST['titel'];
$inhoud = $_POST['inhoud'];
$categorie = $_POST['categorie'];
$query1 = "INSERT INTO document (titel,inhoud,categorie_id) VALUES ('$titel','$inhoud','$categorie_id')";
$result1 = mysql_query($query1);
$document_id = mysql_insert_id();
while(list($key,$value) = each($_FILES[images][name]))
        {
            if(!empty($value))
            {
                                                 $filename = $value;
                                                 $onderschrift = $_POST['onderschrift'];
                                                 $query = "INSERT INTO afbeelding                (onderschrift,naam,document_id) VALUES ('$onderschrift','$filename',$document_id)";
$result = mysql_query($query);

                    $add = "upimg/$filename";
                       //echo $_FILES[images][type][$key];
                 // echo "<br>";
                    copy($_FILES[images][tmp_name][$key], $add);
                    chmod("$add",0777);
        }
    }
?>

[ Voor 14% gewijzigd door NMe op 08-04-2005 20:15 . Reden: PHP-tags ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Zet eens [php]...[/php] tags om je code heen, dat maakt het wat duidelijker.

Dat er er "array()" weggeschreven wordt komt omdat je geen array element aanroept waarschijnlijk. Verder ben je gigantisch kwetsbaar voor SQL injections, je vertrouwt nu alle input van de grote boze buitenwereld. Ook is "chmod("$add",0777);" een beetje overdreven, niet heel het systeem hoeft je plaatje te kunnen lezen en execute rechten (gevaarlijk!!) zijn helemaal niet nodig.

Ook kan je met strategisch echoën (de query) bijvoorbeeld wel een heel eind komen. Dan zie je wat je script nou eigenlijk doet. Zie ook P&W FAQ - Algemeen (debuggen) voor meer informatie.

[ Voor 14% gewijzigd door AtleX op 08-04-2005 20:09 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zie AtleX.

$_POST['onderschrift'] is op zichzelf weer een array. Je zal dus in een loopje of iets dergelijks alle onderschriften één voor één in de database moeten stoppen of iets dergelijks. Verder zullen die file uploads waarschijnlijk ook niet werken, aangezien je each($_FILES[images][name]) gebruikt, terwijl daar nog een index tussen zit als het goed is, gezien het feit dat je hier wederom een array gebruikt. $_FILES['images'][0]['name'] bestaat dus wel, maar $_FILES['images']['name'][0] niet. :)

Ik wil je graag adviseren wat meer te lezen over wat arrays nou eigenlijk zijn, en hoe je ermee omgaat, want je lijkt het niet helemaal te begrijpen. Ook zie ik aan je code dat je stukken hebt overgenomen van een ander script, want je bent nogal inconsequent met het aangeven van een array index. Zet voor de grap eens error_reporting(E_ALL); boven je script, en je zal zien wat ik bedoel. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Atlex, NME dank voor de input. De reden waarom er in de database array werd weggeschreven werd inderdaad veroorzaakt omdat ik geen array element aanriep.

Ik ben nu echter al heel de ochtend om het voor elkaar te krijgen dat de juiste waarden worden geechod op het scherm maar dit lukt mij niet. Ik heb het formulier en het script hieronder opgenomen. In het formulier scherm worden 4 velden aangemaakt waarin plaatjes kunnen worden opgegeven en 4 velden waar een onderschrift kan worden ingetikt. Als ik bij de velden van de plaatjes 1.jpg,2.jpg,3.jpg,4.jpg selecteer en bij de onderschriften neerzet, onder1,onder2,onder3,onder4. Zou ik willen dat ik als het formulier uitvoer het volgende verschijnt 1.jpg onder1 2.jpg onder2 3.jpg onder3 4.jpg onder4. Wat echter verschijnt is het volgende 1.jpg onder1 1.jpg onder2 1.jpg onder3 1.jpg onder4

Ik snap ook waarom het niet goed gaat, de eerste while lus wordt opgestart daarna wordt een tweede while lus opgestart die eerst helemaal doorlopen worden, maar ik weet niet hoe ik het moet oplossen. Ik zit op dit moment vast. Als iemand mij de goede kant kan opduwen graag!

FORMULIER
PHP:
1
2
3
4
5
6
7
8
9
10
<?
$max_no_img=4;
echo "<form method=post action=addimgck.php enctype='multipart/form-data'>";
for($i=1; $i<=$max_no_img; $i++){
echo "Images $i<input type=file name='images[]'>";
echo "Ondertitel $i<input type=text name='ondertitel[]'><br>";
}
echo "<input type=submit value='Add Image'></td></tr>"; 
echo "</form>";
?>


PHP bestand
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
while(list($key,$images) = each($_FILES[images][name]))
while(list($key,$ondertitel) = each($_POST[ondertitel]))
        {
            if(!empty($images) or !empty($ondertitel))
            {
                echo "$images";     
                echo "$ondertitel";
            }
        }
?>

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dat is een verkeerd gebruik van de while lus. Je loopt nu de 2de while lus. Ik zou het zo oplossen:
PHP:
1
2
3
4
5
6
foreach ( $_FILES['images']['name'] as $key => $imageName )
{
  if ( $imageName == "" || empty($_POST['ondertitel'][$key]) ) { continue; }
  
  echo $imageName, $_POST['ondertitel'][$key];
}

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
PHP:
1
2
3
4
5
6
7
8
9
<?php

for($i = 0; $i<count($_POST['ondertitel']); $i++) {
     if(!empty($_FILES['images']['name'][$i]) OR !empty($_POST['ondertitel'][$i])) {
          echo $_FILES['images']['name'][$i] . ", " . $_POST['ondertitel'][$i] . "<br />";
     }
}

?>
Je moet ook eens kijken naar je html.. Qua quotes ben je nogal inconsequent


edit: zu spat, maar zo zou ik het doen.. BTW worden shorttags (<?) afgeraden (probs met XML enzo), schrijf ze gewoon voluit (<?php)

[ Voor 139% gewijzigd door flashin op 09-04-2005 12:06 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Beginnersvraag is geen taal; uit de titel gesloopt :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
flashin schreef op zaterdag 09 april 2005 @ 11:59:
edit: zu spat, maar zo zou ik het doen.. BTW worden shorttags (<?) afgeraden (probs met XML enzo), schrijf ze gewoon voluit (<?php)
Heb je het tegen mij? Als je geen tags gebruikt met [ php][/php] dan wordt automatisch short tags toegevoegt. Overigens zijn short tags geen probleem als je er mee weet om te gaan. <?=$var?> zou ik niet willen missen bijvoorbeeld, puur voor template functionaliteit. En voor xml kun je simpel <?="<"?>?xml ?> maken.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Michali schreef op zaterdag 09 april 2005 @ 12:10:
[...]

Heb je het tegen mij? Als je geen tags gebruikt met [ php][/php] dan wordt automatisch short tags toegevoegt. Overigens zijn short tags geen probleem als je er mee weet om te gaan. <?=$var?> zou ik niet willen missen bijvoorbeeld, puur voor template functionaliteit. En voor xml kun je simpel <?="<"?>?xml ?> maken.
Nee had het tegen TS ;)

Short tags hoeven geen probleem te zijn nee, maar kunnen wel voor problemen zorgen als je niet weet hoe je dat kunt oplossen en ook wanneer short tags op een andere server niet "aan" staan in de php.ini

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
PHP:
1
2
3
4
for($i=1; $i<=$max_no_img; $i++){ 
    echo "Images $i<input type=file name='images[".$i."]'>"; 
    echo "Ondertitel $i<input type=text name='ondertitel[".$i."]'><br>"; 
}

Ik zou er ".$i." bij zetten zodat je zeker weet dat de ondertitel bij de afbeelding hoort. En daarna uitlezen met foreach.
Pagina: 1