Insert eerste getal

Status
Niet open voor verdere reacties.

MB2505

Gebruiker
Lid geworden
26 aug 2011
Berichten
66
Hoi,

Ik heb een mysql query die een lotnummer in een database moet zetten. Die id's van de rijen waarin het lotnummer wordt toegevoegd staan in een array met implode.

PHP:
$sql2= "UPDATE melkgegevens SET Lotnummer = '$lotnummer' WHERE Batch_ID IN ('".$_SESSION['implode']."')";
$result2= mysql_query($sql2) or die (mysql_error());

In $_SESSION implode staan 3 getallen. Als ik de query uitvoer krijg ik een resultaat. (echo resultaat geeft 1). Hij zet alleen het lotnummer niet in phpmyadmin.
Als ik in implode maar 1 getal heb staan doet hij het wel.

Bij meerdere waardes in SESSION implode heeft hij wel resultaat maar zet hij het niet in de database en bij één waarde in de SESSION zet hij hem wel in de database. Hij kan dus op de ene of andere manier maar één waarde verwerken.

Wie weet hier een goed antwoord op?

Hgr,
 
kun je niet je gehele script laten zien?
ik heb het vermoeden dat je het over een heel ander query hebt.
 
Heb nauwelijks ervaring met PHP, maar gezien je uitleg lijkt het mij dat de query gewoon niet klopt. Hoe ziet de query er bijvoorbeeld uit als je 'echo $sql2' doet? Ik verwacht dat het daar mis gaat. Een oplossing is de getallen uit 'implode' zelf op de juiste manier achter elkaar te plakken en dit stukje toe te voegen in het 'IN (...)' gedeelte.
 
je wilt met dit stukje: $_SESSION['implode'] alle getallen samenvoegen?
 
je wilt met dit stukje: $_SESSION['implode'] alle getallen samenvoegen?

Als implode de getallen '1, 2, 3' heeft dan verwacht hij waarschijnlijk dat de query 'IN (1, 2, 3)' wordt. Maar als dat zou kloppen dan zou de update wel gewoon lukken, lijkt mij. :p
 
Hoe ziet de query er bijvoorbeeld uit als je 'echo $sql2' doet?

Echo $sql 2 geeft : MySQL error: Unknown column '4fc100cc8d2c8' in 'where clause'. 4fc100... is een waarde uit implode.

Op de pagina batches vink ik met checkboxen aan welke batches in een lot moeten. Als waarde wordt een getal meegegeven uit de database (batch_id). Echo implode geeft als resultaat alle geselecteerde waarden (batch_id's) door een komma gescheiden. Wat de query moet doen is $lotnummer toevoegen aan de rijen waar batch_id is = zie implode.

Het hele systeem werkt als er maar één waarde in implode zit. Zogauw het er meer worden werkt het niet meer. Het hele script is als volgt:
PHP:
<?
session_start();

if ($_SESSION['rechten']['Rechten'] >=2){

mysql_connect("localhost", "root", "usbw")or die("Kan niet verbinden!"); 
mysql_select_db("zuivelfabriek")or die("Kan de database niet selecteren!");

$batch_id= $_POST['batch_id'];
$landcode= $_POST['landcode'];
$fabriekscode= $_POST['fabriekscode'];
$vulmachine= $_POST['vulmachine'];
$vultijdstip= $_POST['vultijdstip'];
$houdbaarheidsdatum= $_POST['houdbaarheidsdatum'];
$lotnummer= $landcode. ' - ' .$fabriekscode.  ' - ' .$vulmachine. ' - ' .$vultijdstip.  ' - ' .$houdbaarheidsdatum;


if ($_POST['vulmachine'] == -1){
include('header.php');
echo"</br><h3 class='foutmelding'> U heeft geen vulmachine geselecteerd! U wordt teruggestuurd.</h3>";
include('footer.php');
header ("Refresh: 3 ; url=batches.php");
}

else{

//Dit werkt wel gewoon :)
$sql="INSERT INTO lotnummers(Landcode, Fabriekscode, Vulmachine, Vultijdstip, Houdbaarheidsdatum, Lotnummer)VALUES('$landcode', '$fabriekscode', '$vulmachine', '$vultijdstip', '$houdbaarheidsdatum', '$lotnummer')";
$result= mysql_query($sql);

$sql2= "UPDATE melkgegevens SET Lotnummer = '$lotnummer' WHERE Batch_ID IN ('".$_SESSION['implode']."')";
$result2= mysql_query($sql2) or die (mysql_error());

if($result2){
echo "Goed";
}

else{
echo "ERROR";
}

}
}
?>
 
Zoals ik al zei heb ik nauwelijks ervaring met PHP, maar werkt iets als het onderstaande niet gewoon?

[cpp]
$in = "";

foreach($_SESSION['implode'] as $v)
{
$in .= $v . ',';
}

$in = substr($in, 0, -1);

// ...
$sql2= "UPDATE melkgegevens SET Lotnummer = '$lotnummer' WHERE Batch_ID IN (" . $in . ")"; // single quotes zijn hierbinnen toch niet nodig? :P
$result2= mysql_query($sql2) or die (mysql_error());
[/cpp]
 
Hoezo niet met implode() dit is simpeler dan de foreach.
 
Het probleem is intussen opgelost. Wat ik niet had verteld is dat de waarden in implode() gegenereerd waren met de functie unique. De uitkomst van unique is een waarde van 13 letters en cijfers. Implode kan hier blijkbaar niet meer omgaan. Nu de waarden alleen nog maar cijfers bevatten werkt het uitstekend.

Een ieder bedankt voor zijn hulp!

Hgr,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan