Raketentheo: Fehler auf Level 9

Beitrag lesen

ich bin schon fast am Verzweifeln...

Das wirst Du bals wieder sein - oder jemand anderes.

In dem String "QMF 71328_C Test" möchte ich aus dem "C" ein "D" machen und dann in eine MySQL-Tabelle speichern.

Mein erster Versuch war:

$string = "QMF 71328_C Test";
$rev = substr($string,10,1);
$next_rev = ++$rev;
$string[10] = $next_rev;
$sql = "update tabelle set titel = '$string' where id = '123'";

Offensichtlich willst Du einfach das nächste Zeichen der ASCII-Tabelle nehmen. Das gänge als Einzeiler.

$string[10] = chr( 1 + ord( $string[10] ) );

Ich markiere das als „schlechten Code“, denn die ganze Methode bereitet mir Kopfschmerzen, die hat keine Zukunft:

<?php
# Nicht nachmachen!
$string = "QMF 71328_C Test";
for ( $i = 0; $i < 100; $i++) {
	$string[10] = chr( 1 + ord( $string[10] ) );
	echo $string.PHP_EOL;
}

Ergebnisse (Auswahl)

…

0 : QMF 71328_D Test
1 : QMF 71328_E Test
2 : QMF 71328_F Test
…
22 : QMF 71328_Z Test
23 : QMF 71328_[ Test
24 : QMF 71328_\ Test
…
29 : QMF 71328_a Test
30 : QMF 71328_b Test
31 : QMF 71328_c Test
…
54 : QMF 71328_z Test
55 : QMF 71328_{ Test
…
60 : QMF 71328_� Test
61 : QMF 71328_� Test
…
188 : QMF 71328_ Test
189 : QMF 71328_ Test
190 : QMF 71328_ Test
191 : QMF 71328_ Test
192 : QMF 71328_ Test
193 : QMF 71328_ Test
194 : QMF 71328_ Test
195 : QMF 71328_ Test
196 : QMF 71328 Test
197 : QMF 71328_	 Test
198 : QMF 71328_
 Test
199 : QMF 71328_
                 Test
200 : QMF 71328_
                 Test
 Test QMF 71328_
…
221 : QMF 71328_! Test
222 : QMF 71328_" Test
…
236 : QMF 71328_0 Test
237 : QMF 71328_1 Test
…
245 : QMF 71328_9 Test
246 : QMF 71328_: Test
247 : QMF 71328_; Test
…
252 : QMF 71328_@ Test
253 : QMF 71328_A Test
254 : QMF 71328_B Test
255 : QMF 71328_C Test
256 : QMF 71328_D Test
…

DAS wirst Du nicht wollen, Dein Auftraggeber wohl auch nicht. Bevor das aufscheinende Problem aus Sicht des Programmierers gelöst werden kann muss es eine bessere Vorschrift

  1. für den Aufbau des Strings und
  2. für die Ermittlung des Kennzeichens der "neuen Version" (Bei Dir war das "C"→"D") geben.