UPDATE query wil niets updaten in de SQL database

Status
Niet open voor verdere reacties.

mmevanwitsen

Gebruiker
Lid geworden
27 nov 2012
Berichten
18
Goedenavond,

ik heb een vraag over een update query die een bestaande rij moet updaten wanneer dit wordt gevraagd. De query heb ik als volgt geformuleerd in een config.php bestand

PHP:
class File {
	var $db = null;
	var $id = 0;
	var $failed = false;
	
	public function File(&$db){
		$this->db = $db;
	}

function _updatelijn1(){
	$sql = "UPDATE lijn1 SET 62 = '".$_POST['62']."', 63 = '".$_POST['63']."', 64 = '".$_POST['64']."', 65 = '".$_POST['65']."' WHERE id = '".$_GET['id']."'";
	
	$update = $this->db->query($sql);
	}
}

Deze functie wordt aangeroepen in een bestand waar ik de volgende code in heb staan:

PHP:
if(isset($_POST['sign1'])){
		$file = new File($mysqli);
		
		$insert = $file->_updatelijn1();
		if($update = true){
			?>
            <table height="300" cellpadding="5" cellspacing="5">
            	<tr>
                	<td class="opgeslagen" valign="middle"><center><img src="images/correct.gif" alt="correct"><br /><br />De instellingen zijn ondertekend. Je kunt deze pagina sluiten.</center></td>
                </tr>
            </table>
            <?php
			}
		} else {
/* hier wordt het formulier getoond */
}

Wanneer ik de gegevens die nodig zijn heb ingevuld dan krijg ik wel de melding dat de update is geslaagd, maar er wordt niets geupdated in de database. Kan ieman mij hier misschien mee helpen? Alvast erg bedankt!
 
Dat je die melding krijgt is niet onlogisch, je voert namelijk geen vergelijking uit maar een toewijzing. Dat levert altijd een true op dus gaat de code dat IF-statement in.
PHP:
if($update = true){
Daarnaast kun je $update uit de File klasse niet aanroepen.

Als je het resultaat wilt weten van die update query dan moet je functie er zo uit zien:
PHP:
function _updatelijn1()
{
    $sql = "UPDATE lijn1 SET 62 = '".$_POST['62']."', 63 = '".$_POST['63']."', 64 = '".$_POST['64']."', 65 = '".$_POST['65']."' WHERE id = '".$_GET['id']."'";
    
    return $this->db->query($sql);
}
Vervolgens is je uitvoerende code dan zo:
PHP:
$update = $file->_updatelijn1();
if($update == true){
De programmeerstijl die je hanteert laat nogal te wensen over, een klasse zou nooit direct met $_POST- of $_GET-variabelen moeten werken.
 
Hoi Tha Devil,

bedankt voor je reactie op mijn vraag. De oplossing die jij biedt brengt me helaas nog niet verder. Ik heb de code aangepast zoals jij deze weergeeft en nu geeft deze in ieder geval niet weer dat de update geslaagd is en wordt er ook niets in de database geupdated. Wellicht is dit ook de bedoeling van de oplossing, maar nu wil ik nog weten hoe ik het voor elkaar krijg dat de update wordt uitgevoerd in de database en daaropvolgend uiteraard de melding dat de update is geslaagd.

Kun jij mij misschien nog iets verder op weg helpen? Alvast bedankt.
 
Dan wordt het debuggen, en ik vermoed dat het in die klasse functie zit.

Probeer dit eens om te debuggen:
PHP:
function _updatelijn1()
{
    $sql = "UPDATE lijn1 SET 62 = '".$_POST['62']."', 63 = '".$_POST['63']."', 64 = '".$_POST['64']."', 65 = '".$_POST['65']."' WHERE id = '".$_GET['id']."'";
    var_dump($sql);
    $query_result = $this->db->query($sql);
    // Geef TRUE terug als $query_result TRUE is en anders geef de error terug.
    return $query_result ? true : $this->db->error();
}
Je krijgt nu een output van de $sql, controleer of dat een juiste query is.

De functie zal alsnog de query proberen uit te voeren.
Het resultaat daarvan vind je terug na het uitvoeren van de functie _updatelijn1().
PHP:
$update = $file->_updatelijn1();
if($update == true)
{
// ...
}
else
{
    echo $update;
}
 
Hoi,

na het wijzigen van de code krijg wordt er inderdaad nog steeds niets geupdated in de database. De echo $update geeft de query weer met daarin de gegevens die in de database moeten komen. De klasse waarin de functie staat gebruik ik ook om gegevens "gewoon" in de database te zetten. Misschien kan ik diezelfde klasse niet gebruiken om te updaten en moet er een andere klasse gemaakt worden?

Alvast wederom bedankt voor de tijd die je voor mij neemt.
 
Dit stukje zou niet de query moeten bevatten.
PHP:
echo $update;
Het resultaat daarvan moet een foutmelding zijn.

Waarschijnlijk doel je op
PHP:
var_dump($sql);
Heb je het resultaat daarvan (Dus de query) al eens direct in phpMyAdmin gebruikt?
 
Ik heb de query geprobeerd in phpmyadmin en deze resulteerde in een error. Na een aanpassing op de query werkte deze wel. Dank voor de moeite die je hebt genomen, ik ben er een stuk verder mee gekomen. :thumb: :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan