Overnemen aangevinkte items werkt wel in Safari maar niet in IE

  • Onderwerp starter Onderwerp starter Jors
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Jors

Gebruiker
Lid geworden
1 okt 2006
Berichten
142
Hierbij nogmaals de vraag die ik in t verkeerde topic had gepost:

Ik heb een tabel met records die weergegeven worden met een aankruisvakje ervoor. De records die aangekruist worden moeten na het klikken op een knop overgenomen worden in een tweede tabel.

Dit heb ik aan de praat gekregen, echter alleen in Safari. In IE werkt het overnemen van het aangevinkte record alleen bij het laatste record uit tabel1. Bij het aanvinken van de rest gebeurt er ogenschijnlijk niets.

Hier is de code van het formulier met de checkbox:

PHP:
<?php    
     while ($row = mysql_fetch_array($sql)) {
     $id = $row['ID'];
     $VAR2 = $row['COL2'];
     $VAR3 = $row['COL3'];
     $VAR4 = $row['COL4'];
     $VAR5 = $row['COL5'];
    ?>
 
<tr><form method="post">
    <td><input type="checkbox" name="check[]" value="<?php echo $id;?>" /></td>
    <td><?php echo $VAR1;?></td>
    <td><?php echo $VAR2;?></td>
    <td><?php echo $VAR3;?></a></td>
    <td><?php echo $VAR4;?></td>
    <td><?php echo $VAR5;?></td>
    </tr>
    <?php } ?>
    </table>
    <input type="submit" value="Selecteer" />
    </form>

en hier de wijze waarop deze naar de nieuwe tabel gestuurd worden:

PHP:
$checked = $_POST['check'];
foreach($checked as $item) {
    $data = mysql_query("SELECT * FROM tabel1 WHERE ID='$item'");
    while ($row_b = mysql_fetch_array($data)) {
        $b_VAR1 = $row_b['COL2'].".".$row_b['COL1'];
        $b_VAR3 = $row_b['COL3'];
        $b_VAR4 = $row_b['COL4'];
        $b_VAR5 = $row_b['COL5'];
        $b_VAR6 = $row_b['COL6'];
        $b_VAR7 = $row_b['COL7'];
        $b_VAR8 = $row_b['COL8'];
        $b_VAR9 = $row_b['COL9l'];
        $begroting = "INSERT INTO tblBegroting(ID, COL2, COL3, etc) VALUES('NULL','".$b_VAR2."', '".$b_VAR3."',etc)";
        mysql_query($begroting) or die("Fout: ".mysql_error);
        }
    }

De vraag is dus of er een fout in de code zit, of dat dit een bekend iets is met IE.
En wellicht nog belangrijker; hoe los ik het op?
 
Niemand een idee? Ik wil deze functionaliteit heel graag werkend krijgen in IE aangezien de meeste gebruikers daarmee werken..
 
begin eerst een met een print_r($_POST); te doen om te lijken hoe en welke gegevens verzonden worden.
 
De fout zat elders in de code denk ik. Ik heb aan dit stukje code niets gewijzigd, maar andere code wel en nu lijkt hij opeens te werken in IE.

Maar daarmee ben ik nog niet klaar. Ik wil namelijk een stap verder gaan. In het formulier met de checkboxes wil ik nu een tekstinvoervak plaatsen en die informatie verzenden als de regel aangevinkt staat.

De code van het formulier ziet er als volgt uit:

PHP:
<?php    
	 while ($row = mysql_fetch_array($sql)) {
	 $ItemID = $row['ItemID'];
	 $VAR1 = $row['COL1'];
	 $VAR2 = $row['COL2'];
	?>

<tr><form method="post" action="url.php">
  <td><?php echo $ItemID;?></td>
    <td><?php echo $VAR1;?></td>
    <td><?php echo $VAR2;?></td>
    <td><input type="text" value="" name="aantal" /></td>
    <td><input type="checkbox" name="updateaantal_id[]" value="<?php echo $bg_id?>"</td>
    </tr>
    <?php } ?>
    <tr>
    <td colspan="6">
    <input type="submit" value="Update aantallen" /></form>
    </td>
  </tr>

<?php } ?>

Het idee is dat als je iets in het tekstveld wijzigt, er automatisch een vinkje in de checkbox erachter komt en dat bij het verzenden van het formulier de aantallen van de aangevinkte items worden geupdate in onderliggende tabel.

Ik het het volgende geprobeerd:

PHP:
$aantal = array();
$aantal = $_POST['aantal'];
$check = array();
$check = $_POST['updateaantal_id'];
foreach($check as $item) {
	$data = mysql_query("SELECT * FROM tabel1 WHERE ID='$item'");
	while (mysql_fetch_array($data)) {
		$subtotaal = mysql_result($data, 0, 'Prijs') * $aantal;
		$updatesubt = ("UPDATE tabel1 SET Aantal='".$aantal."', Subtotaal='".$subtotaal."' WHERE tabel1.ID='$item'");
		mysql_query($updatesubt) or die("Fout: ".mysql_error);
		}
	}

De fout zit hem natuurlijk in het feit dat het aantal niet goed overgenomen wordt. Deze blijft continue hetzelfde. Ik weet alleen niet hoe ik dit kan oplossen. Is dit uberhaubt mogelijk?
 
Ik was helaas iets te voorbarig..

Gek genoeg lijkt het er op dat door de "print_r($_POST)" de code werkt in IE. Het array wordt dan correct weergegeven en de aangevinkte records worden aan de 2e tabel toegevoegd. Wanneer ik // voor de print_r zet gebeurt dit echter niet meer!

Dit kan toch niet? Toch heb ik t meerdere malen geprobeerd met steeds t zelfde resultaat... Wie kan mij helpen? (In Safari werkt t nog steeds altijd wel gewoon)
 
doe eens
echo $check = $_POST['updateaantal_id'];
als ik het goed hebt verschijnt er dan het woord array op het scherm.
want in je form maak je van de updateaantal_id een array
en je bent de input vergeten te sluiten. zie de rode tekens in de onderstaande zin:
<td><input type="checkbox" name="updateaantal_id[]" value="<?php echo $bg_id?>" /></td>
 
hoi phobia, dank voor je reactie.

even voor de duidelijkheid; ik ben nu qua code ongeveer weer in het stadium van mijn eerste post. De uitbreiding naar de code waar ik daarna een vraag over stelde wil ik pas doen nadat deze weer vlekkeloos werkt in IE. Het sluiten van de inputbox heb ik in ieder vast gedaan.

Dus deze:

PHP:
<?php    
     while ($row = mysql_fetch_array($sql)) {
     $id = $row['ID'];
     $VAR2 = $row['COL2'];
     $VAR3 = $row['COL3'];
     $VAR4 = $row['COL4'];
     $VAR5 = $row['COL5'];
    ?>
 
<tr><form method="post">
    <td><input type="checkbox" name="check[]" value="<?php echo $id;?>" /></td>
    <td><?php echo $VAR1;?></td>
    <td><?php echo $VAR2;?></td>
    <td><?php echo $VAR3;?></a></td>
    <td><?php echo $VAR4;?></td>
    <td><?php echo $VAR5;?></td>
    </tr>
    <?php } ?>
    </table>
    <input type="submit" value="Selecteer" />
    </form>

PHP:
if (isset($_POST['check'])){
$checked = array
$checked = $_POST['check'];
foreach($checked as $item) {
    $data = mysql_query("SELECT * FROM tabel1 WHERE ID='$item'");
    while ($row_b = mysql_fetch_array($data)) {
        $b_VAR1 = $row_b['COL2'].".".$row_b['COL1'];
        $b_VAR3 = $row_b['COL3'];
        $b_VAR4 = $row_b['COL4'];
        $b_VAR5 = $row_b['COL5'];
        $b_VAR6 = $row_b['COL6'];
        $b_VAR7 = $row_b['COL7'];
        $b_VAR8 = $row_b['COL8'];
        $b_VAR9 = $row_b['COL9l'];
        $begroting = "INSERT INTO tblBegroting(ID, COL2, COL3, etc) VALUES('NULL','".$b_VAR2."', '".$b_VAR3."',etc)";
        mysql_query($begroting) or die("Fout: ".mysql_error);
        }
    }

Met de print_r($_POST); ervoor werkt hij dus wel in IE, zonder gek genoeg niet.

Als ik "$checked = $_POST['check'];" verander in "echo $checked = $_POST['check'];" verandert dat eigenlijk niets aan de situatie. Met de print_r doet hij het wel, zonder niet.

De print_r laat iets zien in de trent van: "Array ([check] => Array [0] => 6 [1] => 8))"

De echo laat alleen "Array" zien, maar dat gebeurt ook alleen als de print_r daarvoor staat. Als de print_r inactief is door er // voor te zetten, geeft de echo helemaal niks weer...
 
Laatst bewerkt:
haal regel 2 eens weg, die is overbodig.
En test het script ff

en daarna kun je op die plek volgende nog testen:
echo (isset($_POST['check'])) ? "check posted" : "check NOT posted";
echo (is_array($_POST['check'])) ? "check is an array" : "check is NOT an array";
 
Goedemorgen,

ik heb $checked = array weggehaald, echter zonder resultaat.

Na het toevoegen van de voorgestelde regels krijg ik de volgende output:

"Array ( [check] => Array ( [0] => 2 ) ) check postedcheck is an array"

Maar, als ik print_r($_POST) weer uitschakel gebeurt er weer helemaal niks...
 
Ai ik denk dat ik er uit ben...

Voor $checked = $_POST['check']; had ik een if (isset($_POST['check'])){ gezet omdat ik een foutmelding kreeg als er geen enkel checkbox checked was.

Nu heb ik er het volgende van gemaakt:

PHP:
echo (isset($_POST['check'])) ? "check posted" : "check NOT posted";
echo (is_array($_POST['check'])) ? "check is an array" : "check is NOT an array";
$checked = $_POST['check'];
if ($checked <> ""){

nu werkt het zonder de print_r($_POST); maar niet zonder de tweede regel uit bovenstaande code...

Hoe komt dat?

//Extra info:

Wat me ook opvalt is dat wanneer ik "echo (is_array($_POST['check'])) ? "check is an array" : "check is NOT an array";" welliswaar werkt, maar dat de layout van mijn site (css) op de een of andere manier verandert... Mijn onderliggende tabel heeft bijvoorbeeld afgeronde hoeken normaal gesproken, maar nu opeens niet meer. Kan dit er iets mee te maken hebben?

//Nóg een toevoeging:

Ik heb de regel "echo (is_array($_POST['check'])) ? "check is an array" : "check is NOT an array";" weggehaald en vervangen door "echo "iets randoms" " en ook dan werkt de code wel. Dus op een of andere manier moet er eerst iets geechoed worden voordat de code werkt. Dat is toch gek?

Wat ook van belang is dat als er niets geechoed wordt voor de code, het laatste record uit tabel1 altijd wel toegevoegd kan worden aan tabel2, alleen de rest niet... En dat geldt dus alleen voor IE, Safari werkt wel gewoon.

Voor het geval het van belang is; de plaats waardeze code staat in mijn pagina is nog voor de <html> en <head> etc.
 
Laatst bewerkt:
het is netter om
if (!empty($checked)){
ipv
if ($checked <> ""){
Maar let wel dat dit niet meer werk al men een spatie doet

en die echo's zijn alleen ter controller, om te die of en hoe het verzonden wordt.
daarna kun je ze gewoon weer verwijderen
 
Laatst bewerkt:
het is netter om
en die echo's zijn alleen ter controller, om te die of en hoe het verzonden wordt.
daarna kun je ze gewoon weer verwijderen

Ah, die methode kende ik niet. Dat zal ik aanpassen morgen.

Ik weet dat de echo's eigenlijk alleen ter controle zijn. Daarom vind ik het ook zo gek dat de code niet werkt in IE als er geen echo voor staat..
 
echo (isset($_POST['check'])) ? "check posted" : "check NOT posted";
dit is een short-hand.
wat er eigenlijk staat is:
if(isset(#_POST[çheck'])) {
echo "check posted";
} else {
echo "check NOT posted"
}
 
Ja zoiets had ik inderdaad al begrepen. T zou dus eigenlijk geen invloed moeten hebben op de werking van de code eronder.

Toch is dat zo.

Maar daarbij gaat het niet zozeer om de regel echo (isset($_POST['check'])) ? "check posted" : "check NOT posted"; want als ik deze vervang door letterlijk echo "iets randoms" dan werkt de code ineens ook. Zonder deze echo echter niet..
 
Ik begrijp dat niemand de oplossing weet voor dit probleem?

Kan het zijn dat het gewoon een functionaliteit is die (nog) niet werkt in IE. In Google Chrome en Safari gaat het namelijk wel goed..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan