Ga terug   Computer Idee Forum > Internet > Websites maken

Antwoord
 
Discussietools Weergave
Oud 19 May 2011, 10:36   #1
anoniem31645
Guest
 
Berichten: n/a
Standaard mysql tekst vervangen

In mijn Database heb ik een aantal foute worden die ik wil veranderen.
zo heb ik bijvoorbeeld het word 'Belgi?' i.p.v. België.

Nou weet ik dat ik dit via
Code:
UPDATE `test_tabel` set `land` = replace(`land`, `Belgi?`, `België`)
Kan vervangen maar als ik dit direct in phpmyadmin invoer krijg ik de volgende fout melding #1054 - Unknown column 'Belgi?' in 'field list'

Klopt deze code niet of heb ik hem verkeerd geïnterpreteerd?

Laatst gewijzigd door Sjoukito : 19 May 2011 om 15:27
  Met citaat antwoorden
Oud 19 May 2011, 15:28   #2
anoniem31645
Guest
 
Berichten: n/a
Standaard

Uiteindelijk bleek het de backtiks te zijn waar het fout gaat.
Een gezoek naar een speld in een hooiberg maarja.
  Met citaat antwoorden
Oud 19 May 2011, 19:57   #3
anoniem31645
Guest
 
Berichten: n/a
Standaard

Inmiddels heb ik vandaag de héle dag lekker zitten puzzelen op een script om via een formulier een woord of zin uit een zelf te bepalen tabel en kolom te vervangen in mijn database. Ik ben aardig op weg alleen het deel dat het daad werkelijk gaat uitvoeren krijg ik niet goed.

Ik wil dus de tabel, de kolom, het oude word en het nieuwe word via een formulier verzenden waarna deze word opgevangen, de mysql update query word opgebouwd (in de code is dit $result) en dan verzonden. alles gaat op zich goed behalve het opbouwen van de quiery. Voor zover ik weet heb ik alles goed met punten verbonden enz.

als ik het zoals het 2e stukje code (zie helemaal onderaan) hou werkt het goed.

PHP-code:
$tabel_update mysql_real_escape_string($_POST['tabel_update']);
$kolom_update mysql_real_escape_string($_POST['kolom_update']);
$nieuw_word mysql_real_escape_string($_POST['nieuw_word_update']);
$oud_word mysql_real_escape_string($_POST['oud_word_update']);

$Result mysql_query ('"UPDATE `'.$tabel_update.'` SET `'.$kolom_update.'`=\''$nieuw_word.'\' WHERE `'$land.'`=\''.$oud_word.'\'")'
(2e stukje code)
PHP-code:
$Result mysql_query ("UPDATE `$tabel_update` SET `$kolom_update`='$nieuw_word_update' WHERE `land`='$oud_word_update'"); 
zie http://www.sjoukito.com/test7.php

Laatst gewijzigd door Sjoukito : 19 May 2011 om 20:03
  Met citaat antwoorden
Oud 19 May 2011, 20:32   #4
anoniem14945
Guest
 
Berichten: n/a
Standaard

Zet het sql statement eerst in een aparte string, zodat je deze string kunt echo'en. Dan krijg je namelijk mooi de sql te zien die uitgevoerd gaat worden, en zul je ook zien waar het mis gaat.

Ik heb wel een vermoeden, maar ik laat je liever eerst even zelf kijken.
  Met citaat antwoorden
Oud 19 May 2011, 22:52   #5
anoniem31645
Guest
 
Berichten: n/a
Standaard

Ik heb het om te testen tijdelijk in een apart bestand gezet om het updategedeelte goed te krijgen.

Alles lijkt goed te zijn maar toch krijg ik een foutmelding.

dit is de code nu:

PHP-code:
<?php
$tabel_update 
'test_tabel';
$kolom_update 'land';
$nieuw_word 'nederland';
$oud_word 'test';


//$tabel_update 
$Result mysql_query ("UPDATE .$tabel_update. SET .$kolom_update.'=\''.$nieuw_word.'\'' WHERE .$land.'=\''.$oud_word.'\''");

if(
$Result == false)
{
        
trigger_error("Update niet uitgevoerd");
}
else
{
        echo 
"Update succesvol uitgevoerd";
}



?>
<br />
<?php 
echo $result .'<br />';
echo 
'tabel_update: '$tabel_update'<br />';
echo 
'kolom_update: '$kolom_update'<br />';
echo 
'nieuw_word: '$nieuw_word'<br />';
echo 
'oud_word: '$oud_word'<br />';
//echo 'test:'. ($obj ['Field']). '<br />';
?>
  Met citaat antwoorden
Oud 20 May 2011, 12:35   #6
anoniem14945
Guest
 
Berichten: n/a
Standaard

Citaat:
Oorspronkelijk geplaatst door Sjoukito Bekijk bericht
een foutmelding
Dat zegt niet zo veel. Eigenlijk helemaal niks

Ik zie nog niet dat je de query naar het scherm laat echo'en, zodat je kunt beoordelen of de query uberhaupt wel goed wordt samengesteld.

Verder, als je een probleem in je sql-gedeelte vermoedt, ALTIJD mysql_error echo'en om te zien of er een probleem is en zo ja om wat meer info te krijgen over het probleem.
  Met citaat antwoorden
Oud 20 May 2011, 14:45   #7
anoniem31645
Guest
 
Berichten: n/a
Standaard

ok ik heb het inmiddels goed gekregen hoewel ik niet snap waarom het werkt zoals het werkt.
Als ik namelijk onderdelen verbind met een punt og de 'elscape met een backslash gaat het fout. het staat dus tussen dubbel aanhalings-tekend dus neem ik aan dat php moet kijken wat er staat. dan zou '$nieuw_word' toch niet moeten werken omdat het niet gelezen word door de aanhalingstekens?

Dit is de code die nu werkt:
PHP-code:
("UPDATE `$tabel_update` SET `$kolom_update`='$nieuw_word' WHERE `$kolom_update`='$oud_word'"); 
ok nu ik een geheel word kan vervangen wil ik ook graag slechts een gedeelte van een word kunnen vervangen. Ik heb bijvoorbeeld het word crëme in mijn database staan als cr?me of cr?emewit of cr?emerose etc.
Omdat het om een 1000 ofzo worden gaat zat ik te denken om het onderstaande voorbeeld te gebruiken maar hoe ik het ook aan pas ik krijg het niet zoals ik wil.

PHP-code:
SELECT REPLACE(‘www.mysql.com’‘w’‘Ww’); 
Ik wil de tabel, kolom, gedeelte van een word en het nieuwe gedeelte van een word kunnen aangeven zoals in het andere stukje script alleen dan voor een gedeelte van het word.
  Met citaat antwoorden
Oud 20 May 2011, 15:38   #8
anoniem14945
Guest
 
Berichten: n/a
Standaard

Namen van variabelen tussen dubbele aanhalingstekens worden door PHP herkend en dan vult 'ie de waarde van de variabele voor je in. Bij enkele aanhalingstekens doet 'ie dat niet. Daar kun je dus handig gebruik van maken, zolang je maar oplet met het teken dat direct na de variabele-naam komt: letters en cijfers worden als onderdeel van de naam gezien. Nu gaat het goed, omdat er altijd een quote of backtick na de naam komt.

Waarom het bij jou met die punten en geescapete backslashes niet goed gaat is omdat je er eerlijk gezegd een beetje een rommeltje van maakt: aanhalingstekens worden geescaped waar dat helemaal niet nodig is, er staan aanhalingstekens waar ze niet moeten staan en je verwart hier en daar " en '. Als je met " begint hoort de eerstvolgende " daar bij en precies daarna moet een punt om de zaak aan elkaar te knopen.

De code die nu werkt is verder prima en kun je gewoon gebruiken, maar voor jezelf is het misschien een goede oefening om de variabelen uit die string te halen.

Wat betreft je script moet je uit komen op een sql-query iets als het volgende:

UPDATE `tabel` SET `kolom` = REPLACE(`kolom`, 'zoekstring', 'vervangstring')

Dit wordt dan op alle rijen toegepast. Wil je niet alle rijen, dan kun je nog een WHERE toevoegen.
  Met citaat antwoorden
Oud 20 May 2011, 16:45   #9
anoniem31645
Guest
 
Berichten: n/a
Standaard

Ok dat werkt nu ook.

Nou moet ik dus alleen nog kunnen selecteren of ik een gedeelte of de gehele inhoud wil vervangen. Dit wil ik doem met een groep keuzerondjes echter heb ik hier nog nooit mee gewerkt.
Wat ik ook verander om de een of andere reden lukt het me niet om de waarde (value) op te vangen om daarmee de juiste if statement te gebruiken.
Het lijkt wel of er geen waarde word mee gestuurd want als ik $_GET['select'] direct echo krijg ik ook geen waarde.
Waar zou dit aan kunnen liggen?


PHP-code:
if ($_GET['update'] == "yes"){

    if (
$_GET['select'] == "part"){
    
$Result mysql_query ("UPDATE `$tabel_update` SET `$kolom_update`= replace(`$kolom_update`,'$oud_word','$nieuw_word')");
    }
    
    if (
$_GET['select'] == "all") {
    
$Result mysql_query ("UPDATE `$tabel_update` SET `$kolom_update`='$nieuw_word' WHERE `$kolom_update`='$oud_word'");
    }    
    
    if(
$Result == false){
    
trigger_error("Update niet uitgevoerd");
    }
    else{
    echo 
"<em> <strong>Update succesvol uitgevoerd</strong></em>";
    }

HTML-code:
 <label>
 <input name="select1" type="radio" id="select" value="all" checked>
 Voledige cel inhoud.</label>

<label>	
 <input name="select2" type="radio" id="select" value="part" >
 Gedeeltelijke cel inhoud.</label>
  Met citaat antwoorden
Oud 20 May 2011, 16:59   #10
anoniem14945
Guest
 
Berichten: n/a
Standaard

In PHP heb je het over $_GET['select'], maar in het formulier over name="select1" en name="select2"

Overigens, als twee radiorondjes bij elkaar horen, moet je ze dezelfde name geven, zodat je ze niet beide tegelijkertijd kunt selecteren.
  Met citaat antwoorden
Antwoord

Discussietools
Weergave

Regels voor berichten
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Forumnavigatie


Alle tijden zijn GMT +1. Het is nu 13:10.


Powered by vBulletin Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.